Index: base3.10/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/util/EgovUserDetailsHelper.java (revision 10)
@@ -3,6 +3,8 @@
import java.util.List;
import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
import egovframework.com.cmm.service.EgovUserDetailsService;
@@ -26,10 +28,10 @@
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";
+ private static final String LOGIN_URL = "/uat/uia/egovLoginUsr.do";
+ private static final String INDEX_URL = "/index.do";
+ private static final String ADMIN_URL = "/admin/index.do";
+ private static final String LOGIN_ADMIN_URL = "/uat/uia/egovLoginUsr.do";
static EgovUserDetailsService egovUserDetailsService;
@@ -113,6 +115,18 @@
}
/**
+ * 관리자 권한 확인
+ * @Author : 임종호
+ * @Date : 2022. 2. 7
+ * @Method Name : isRoleAdmin
+ * @return : Boolean
+ */
+ public static Boolean isRoleAdmin() {
+ String role = Authory.ROLE_ADMIN;
+ return isRole(role);
+ }
+
+ /**
* 로그인 페이지 이동
* @Author : 임종호
* @Date : 2021. 7. 5.
@@ -120,7 +134,7 @@
* @return : String
*/
public static String getLoginPage() {
- return LOGIN_URL;
+ return "redirect:" + getContextPath() + LOGIN_URL;
}
/**
@@ -131,7 +145,7 @@
* @return : String
*/
public static String getIndexPage() {
- return INDEX_URL;
+ return "redirect:" + getContextPath() + INDEX_URL;
}
/**
@@ -142,7 +156,7 @@
* @return : String
*/
public static String getAdminPage() {
- return ADMIN_URL;
+ return "redirect:" + getContextPath() + ADMIN_URL;
}
/**
@@ -153,6 +167,19 @@
* @return : String
*/
public static String getAdminLogin() {
- return LOGIN_ADMIN_URL;
+ return "redirect:" + getContextPath() + LOGIN_ADMIN_URL;
+ }
+
+ /**
+ * contextPath 반환(request 없을때)
+ * @Author : 임종호
+ * @Date : 2022. 2. 8
+ * @Method Name : getContextPath
+ * @return : String
+ */
+ public static String getContextPath() {
+ ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
+ String contextPath = attr.getRequest().getContextPath();
+ return contextPath;
}
}
Index: base3.10/src/main/java/egovframework/com/cmm/LoginVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/LoginVO.java (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/LoginVO.java (revision 10)
@@ -52,6 +52,18 @@
private String ip;
/** GPKI인증 DN */
private String dn;
+
+ /* 권한정보설정 */
+ /** 권한코드 */
+ private String authorCode;
+ private String[] authorCodeList;
+ /** 권한명 */
+ private String authorCodeNm;
+ /** 권한설명 */
+ private String authorDc;
+ /** 권한생성일자 */
+ private String authorCreatDe;
+
/**
* id attribute 를 리턴한다.
* @return String
@@ -246,5 +258,85 @@
public void setOrgnztNm(String orgnztNm) {
this.orgnztNm = orgnztNm;
}
-
+ /**
+ * 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 getAuthorCodeNm() {
+ return authorCodeNm;
+ }
+ /**
+ * authorNm attribute 값을 설정한다.
+ * @param authorNm String
+ */
+ public void setAuthorCodeNm(String authorCodeNm) {
+ this.authorCodeNm = authorCodeNm;
+ }
+ /**
+ * 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;
+ }
+ public String[] getAuthorCodeList() {
+ if( authorCode != null ) {
+ authorCodeList = authorCode.split(",");
+ }
+
+ if (authorCodeList == null) {
+ return null;
+ } else {
+ int cnt = authorCodeList.length;
+ String[] list = new String[cnt];
+ for (int i = 0; i < cnt; i++) {
+ list[i] = authorCodeList[i];
+ }
+ return list;
+ }
+ }
+ public void setAuthorCodeList(String[] authorCodeList) {
+ if (authorCodeList != null) {
+ int cnt = authorCodeList.length;
+ this.authorCodeList = new String[cnt];
+ for (int i = 0; i < cnt; i++) {
+ this.authorCodeList[i] = authorCodeList[i];
+ }
+ }
+ }
}
Index: base3.10/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/web/EgovFileMngController.java (nonexistent)
@@ -1,165 +0,0 @@
-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";
- }
-}
Index: base3.10/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/web/EgovFileDownloadController.java (nonexistent)
@@ -1,154 +0,0 @@
-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();
- }
- }
- }
-}
Index: base3.10/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/web/EgovImageProcessController.java (nonexistent)
@@ -1,134 +0,0 @@
-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);
- }
- }
-}
Index: base3.10/src/main/java/egovframework/com/cmm/web/EgovComIndexController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/web/EgovComIndexController.java (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/web/EgovComIndexController.java (revision 10)
@@ -35,7 +35,9 @@
import java.util.TreeMap;
import javax.annotation.Resource;
+import javax.servlet.http.HttpSession;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
@@ -45,17 +47,24 @@
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
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.menu.service.MenuService;
+import egovframework.com.menu.service.MenuVO;
import egovframework.com.uat.uia.service.EgovLoginService;
@Controller
public class EgovComIndexController implements ApplicationContextAware, InitializingBean {
+ /** 메뉴서비스 */
+ @Resource(name = "MenuService")
+ private MenuService menuService;
+
private ApplicationContext applicationContext;
private static final Logger LOGGER = LoggerFactory.getLogger(EgovComIndexController.class);
@@ -72,8 +81,49 @@
@Resource(name = "loginService")
private EgovLoginService loginService;
+ /**
+ * 관리자 메인 페이지
+ * @Author : 임종호
+ * @Date : 2022. 2. 8
+ * @Method Name : adminIndex
+ * @return : String
+ */
+ @IncludedInfo(name="관리자 메인화면", order = 1, gid = 0)
+ @RequestMapping(value="/admin/index.do")
+ public String adminIndex(HttpSession session, RedirectAttributes attributes) {
+ session.setAttribute("prevPage", "/admin/index.do");
+
+ LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+
+ if (loginVO == null) {
+ attributes.addFlashAttribute("message", "로그인이 필요한 서비스입니다.");
+ return EgovUserDetailsHelper.getAdminLogin();
+ } else {
+ // 권한 있음
+ // 권한이 있는 최초 페이지 로드
+ MenuVO menuVO = new MenuVO();
+ menuVO.setAuthorCodeList(loginVO.getAuthorCodeList());
+ menuVO.setUserId(loginVO.getUniqId());
+ menuVO.setMenuGb("A");
+ MenuVO result = menuService.selectSessionMenuLimitOne(menuVO);
+
+ if (result != null && StringUtils.isNotBlank(result.getProgrUrl())) {
+ return "redirect:" + result.getProgrUrl();
+ } else {
+ attributes.addFlashAttribute("message", "권한이 없습니다.");
+ return EgovUserDetailsHelper.getAdminLogin();
+ }
+ }
+
+ }
+
@RequestMapping("/index.do")
public String index(ModelMap model) {
+ return "index";
+ }
+
+ @RequestMapping("/EgovUnitMain.do")
+ public String egovUnitMain(ModelMap model) {
return "egovframework/com/cmm/EgovUnitMain";
}
Index: base3.10/src/main/java/egovframework/com/cmm/ComDefaultVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/ComDefaultVO.java (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/ComDefaultVO.java (revision 10)
@@ -31,6 +31,9 @@
/** 검색사용여부 */
private String searchUseYn = "";
+ /** 페이징 사용 유무 */
+ private boolean pagingAt = true;
+
/** 현재페이지 */
private int pageIndex = 1;
@@ -130,9 +133,16 @@
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
-
- /**
+ public boolean isPagingAt() {
+ return pagingAt;
+ }
+
+ public void setPagingAt(boolean pagingAt) {
+ this.pagingAt = pagingAt;
+ }
+
+ /**
* searchKeywordFrom attribute를 리턴한다.
* @return String
*/
Index: base3.10/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/interceptor/AuthenticInterceptor.java (revision 10)
@@ -1,10 +1,13 @@
package egovframework.com.cmm.interceptor;
+import java.util.Collections;
import java.util.List;
+import javax.annotation.Resource;
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.beans.factory.annotation.Autowired;
@@ -13,8 +16,18 @@
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.ModelAndViewDefiningException;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
+import org.springframework.web.util.UrlPathHelper;
+import egovframework.com.cmm.AjaxWrapper;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.util.Authory;
import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.menu.service.MenuService;
+import egovframework.com.menu.service.MenuVO;
+import egovframework.com.menu.web.AlertView;
+import egovframework.com.site.service.SystemManageService;
+import egovframework.com.site.service.SystemVO;
/**
* 인증여부 체크 인터셉터
@@ -40,6 +53,14 @@
@Autowired
private Environment environment;
+ /** 메뉴 서비스 */
+ @Resource(name = "MenuService")
+ private MenuService menuService;
+
+ /** 시스템정보 서비스 */
+ @Resource(name = "SystemManageService")
+ private SystemManageService systemManageService;
+
/** log */
private static final Logger LOGGER = LoggerFactory.getLogger(AuthenticInterceptor.class);
@@ -60,30 +81,125 @@
*/
@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);
+// 파라메터 확인
+// EgovRequestParams.info(request);
+
+ // submit 요청인지 ajax 요청인지 구분
+ String header = request.getHeader("x-requested-with");
+ boolean isAjax = false;
+ if( header != null ) {
+ isAjax = header.matches("XMLHttpRequest");
+// return super.preHandle(request, response, handler);
+ }
+
+ // 사용자정보 조회
+ LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+
+ // 사이트정보 조회
+ SystemVO systemVO = new SystemVO();
+ systemVO.setSysId(1);
+ systemVO = systemManageService.selectSystemInfo(systemVO);
+ if( systemVO != null ) {
+ request.getSession().setAttribute("systemVO", systemVO);
}
- //인증된 권한 목록
- 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 (systemVO != null && systemVO.getInspectAt().equals("Y")) {
+ if (loginVO == null || Boolean.FALSE.equals(EgovUserDetailsHelper.isRoleAdmin())) { // 관리자는 제외
+ // Alert 뷰 생성
+ AlertView view = new AlertView();
+ view.addStaticAttribute("returnUrl", "/code503.jsp");
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setView(view);
+ throw new ModelAndViewDefiningException(modelAndView);
}
}
- //관리자 권한 체크
- if(adminAuthUrlPatternMatcher && !authList.contains("ADMIN")){
- ModelAndView modelAndView = new ModelAndView("redirect:/uat/uia/egovLoginUsr.do?auth_error=1");
- throw new ModelAndViewDefiningException(modelAndView);
+
+ // 로그인 여부 체크
+ MenuVO checkMenuVO = new MenuVO();
+ if( loginVO == null ) {
+ checkMenuVO.setAuthorCode(Authory.ROLE_ANONYMOUS);
+ } else {
+ checkMenuVO.setUserId(loginVO.getUniqId());
+ checkMenuVO.setAuthorCode(loginVO.getAuthorCode());
+ }
+
+ // 메뉴정보 세션에 저장
+ request.getSession().setAttribute("menuVO", menuService.selectSessionMenuList(checkMenuVO));
+
+ UrlPathHelper urlPathHelper = new UrlPathHelper();
+ String originalURL = urlPathHelper.getOriginatingRequestUri(request);
+
+ // contextPath 대응
+ String progrUrl = originalURL;
+ String contextPath = request.getContextPath();
+ if (StringUtils.isNotBlank(contextPath)) {
+ progrUrl = progrUrl.substring(contextPath.length());
+ }
+
+ checkMenuVO.setProgrUrl(progrUrl);
+ // 등록된 URL만 체크
+ MenuVO menuVO = menuService.selectMenuProgram(checkMenuVO);
+ if( menuVO != null ) {
+ // 권한체크
+ int authoCheck = menuService.selectAuthoUrlCheck(checkMenuVO);
+ if( authoCheck == 0 && Boolean.FALSE.equals(EgovUserDetailsHelper.isRoleAdmin())) {
+ ModelAndView modelAndView = new ModelAndView();
+ if (isAjax) {
+ MappingJackson2JsonView view = new MappingJackson2JsonView();
+ AjaxWrapper aw = new AjaxWrapper(AjaxWrapper.FAIL);
+ if (loginVO == null) {
+ aw.setResult("장기간(30분) 동안 미사용으로 로그아웃 되었습니다.");
+ } else {
+ aw.setResult("권한이 없습니다.");
+ }
+ modelAndView.setView(view);
+ modelAndView.addObject("sttus", aw.getSttus());
+ modelAndView.addObject("result", aw.getResult());
+ } else {
+ // Alert 뷰 생성
+ AlertView view = new AlertView();
+ if (loginVO == null) {
+ String returnUrl = contextPath + "/uat/uia/egovLoginUsr.do";
+// if ("A".equals(menuVO.getMenuGb())) {
+// returnUrl = contextPath + "/admin/index.do";
+// }
+ view.addStaticAttribute("message", "장기간(30분) 동안 미사용으로 로그아웃 되었습니다.");
+ view.addStaticAttribute("returnUrl", returnUrl);
+ } else {
+ view.addStaticAttribute("message", "권한이 없습니다.");
+ String prevPage = (String) request.getSession().getAttribute("prevPage");
+ if (progrUrl.equals(prevPage)) {
+ prevPage = contextPath + "/index.do";
+ }
+ view.addStaticAttribute("returnUrl", prevPage);
+ }
+ modelAndView.setView(view);
+ }
+ throw new ModelAndViewDefiningException(modelAndView);
+ }
+ // 이전 페이지 저장
+ String prevUrl = progrUrl;
+ String param = "";
+ for (String name : Collections.<String>list(request.getParameterNames())) {
+ String value = request.getParameter(name);
+ param += name + "=" + value + "&";
+ }
+ if( !"".equals(param) ) {
+ prevUrl = prevUrl + "?" + param;
+ }
+ request.getSession().setAttribute("prevPage", prevUrl);
+
+ // 네비게이션 메뉴 정보
+ List<MenuVO> menuNaviList = menuService.selectMenuNaviList(menuVO);
+ request.getSession().setAttribute("menuNaviVO", menuNaviList);
+
+ // 같은 depth 메뉴 정보
+ List<MenuVO> menuSameDepthList = menuService.selectMenuSameDepthList(menuVO);
+ request.getSession().setAttribute("menuDepthVO", menuSameDepthList);
+
+ // 현재 메뉴 정보
+ request.getSession().setAttribute("thisMenuInfo", menuVO);
}
return true;
}
Index: base3.10/src/main/java/egovframework/com/cmm/interceptor/FileUploadInterceptor.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/interceptor/FileUploadInterceptor.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/cmm/interceptor/FileUploadInterceptor.java (revision 10)
@@ -0,0 +1,39 @@
+package egovframework.com.cmm.interceptor;
+
+import java.util.Iterator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+public class FileUploadInterceptor extends HandlerInterceptorAdapter {
+ private static final Pattern excludePattern = Pattern.compile ("jsp|js|cgi|exe|html|htm|php|php3|php4|phtml|phps|pl|shtml|com|sh|asp|bat|java|xml|msi");
+
+ public boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ if (ServletFileUpload.isMultipartContent (request)) {
+ MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest)request;
+ Iterator<String> itr = mRequest.getFileNames ();
+ String fileParam = null;
+ String fileName = null;
+ String fileExt = null;
+ Matcher matcher;
+ while (itr.hasNext ()) {
+ fileParam = itr.next ();
+ fileName = mRequest.getFile (fileParam).getOriginalFilename ();
+ fileExt = fileName.substring (fileName.lastIndexOf (".") + 1, fileName.length ()).trim ();
+ matcher = excludePattern.matcher (fileExt.toLowerCase ());
+ if (matcher.find ()) {
+ response.setCharacterEncoding("UTF-8");
+ response.getWriter ().println ("<script>alert ('허용되지 않은 확장자입니다.'); history.back(); </script>");
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/cmm/interceptor/FileUploadInterceptor.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 (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngService.java (nonexistent)
@@ -1,115 +0,0 @@
-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;
-}
Index: base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngUtil.java
===================================================================
--- base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngUtil.java (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/service/EgovFileMngUtil.java (nonexistent)
@@ -1,519 +0,0 @@
-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;
- }
-}
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 (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovFileMngServiceImpl.java (nonexistent)
@@ -1,156 +0,0 @@
-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);
- }
-}
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 (revision 9)
+++ base3.10/src/main/java/egovframework/com/cmm/service/impl/EgovUserDetailsSessionServiceImpl.java (revision 10)
@@ -1,8 +1,10 @@
package egovframework.com.cmm.service.impl;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import egovframework.com.cmm.LoginVO;
import egovframework.com.cmm.service.EgovUserDetailsService;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
@@ -43,7 +45,19 @@
public List<String> getAuthorities() {
// 권한 설정을 리턴한다.
- return EgovUserDetailsHelper.getAuthorities();
+ if (RequestContextHolder.getRequestAttributes() == null) {
+ return null;
+ }
+ if( RequestContextHolder.getRequestAttributes().getAttribute("loginVO", RequestAttributes.SCOPE_SESSION) == null ) {
+ return null;
+ }
+ LoginVO loginVO = (LoginVO) RequestContextHolder.getRequestAttributes().getAttribute("loginVO", RequestAttributes.SCOPE_SESSION);
+ List<String> listAuth = new ArrayList<String>();
+ if( loginVO.getAuthorCode() != null ) {
+ listAuth = Arrays.asList(loginVO.getAuthorCode().split(","));
+ }
+
+ return listAuth;
}
public Boolean isAuthenticated() {
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 (revision 9)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovArticleManageController.java (revision 10)
@@ -22,8 +22,6 @@
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;
@@ -63,12 +61,6 @@
@Resource(name = "EgovBBSMasterService")
private EgovBBSMasterService egovBBSMasterService;
- @Resource(name = "EgovFileMngService")
- private EgovFileMngService fileMngService;
-
- @Resource(name = "EgovFileMngUtil")
- private EgovFileMngUtil fileUtil;
-
@Resource(name = "propertiesService")
protected EgovPropertyService propertyService;
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 (revision 9)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/web/EgovArticleController.java (revision 10)
@@ -23,8 +23,6 @@
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;
@@ -76,12 +74,6 @@
@Resource(name = "EgovBBSMasterService")
private EgovBBSMasterService egovBBSMasterService;
- @Resource(name = "EgovFileMngService")
- private EgovFileMngService fileMngService;
-
- @Resource(name = "EgovFileMngUtil")
- private EgovFileMngUtil fileUtil;
-
@Resource(name = "propertiesService")
protected EgovPropertyService propertyService;
@@ -354,8 +346,8 @@
//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);
+// result = fileUtil.parseFileInf(files, "BBS_", 0, "", "");
+// atchFileId = fileMngService.insertFileInfs(result);
}
board.setAtchFileId(atchFileId);
board.setFrstRegisterId((user == null || user.getUniqId() == null) ? "" : user.getUniqId());
@@ -483,8 +475,8 @@
String atchFileId = "";
if (!files.isEmpty()) {
- List<FileVO> result = fileUtil.parseFileInf(files, "BBS_", 0, "", "");
- atchFileId = fileMngService.insertFileInfs(result);
+// List<FileVO> result = fileUtil.parseFileInf(files, "BBS_", 0, "", "");
+// atchFileId = fileMngService.insertFileInfs(result);
}
board.setAtchFileId(atchFileId);
@@ -633,15 +625,15 @@
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);
+// 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);
+// int cnt = fileMngService.getMaxFileSN(fvo);
+// List<FileVO> _result = fileUtil.parseFileInf(files, "BBS_", cnt, atchFileId, "");
+// fileMngService.updateFileInfs(_result);
}
}
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 (revision 9)
+++ base3.10/src/main/java/egovframework/com/cop/bbs/service/impl/EgovArticleServiceImpl.java (revision 10)
@@ -8,7 +8,6 @@
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;
@@ -24,9 +23,6 @@
@Resource(name = "EgovArticleDAO")
private EgovArticleDAO egovArticleDao;
- @Resource(name = "EgovFileMngService")
- private EgovFileMngService fileService;
-
@Resource(name = "propertiesService")
protected EgovPropertyService propertyService;
@@ -113,11 +109,6 @@
board.setNttSj("이 글은 작성자에 의해서 삭제되었습니다.");
egovArticleDao.deleteArticle(board);
-
- if (!"".equals(fvo.getAtchFileId()) || fvo.getAtchFileId() != null) {
- fileService.deleteAllFileInf(fvo);
- }
-
}
@Override
Index: base3.10/src/main/java/egovframework/com/site/web/SystemManageController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/site/web/SystemManageController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/site/web/SystemManageController.java (revision 10)
@@ -0,0 +1,104 @@
+package egovframework.com.site.web;
+
+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.servlet.mvc.support.RedirectAttributes;
+
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.site.service.SystemManageService;
+import egovframework.com.site.service.SystemVO;
+
+@Controller
+public class SystemManageController {
+ private static final Logger LOGGER = LoggerFactory.getLogger(SystemManageController.class);
+
+ @Resource(name = "SystemManageService")
+ private SystemManageService systemManageService;
+
+ /** EgovMessageSource */
+ @Resource(name="egovMessageSource")
+ private EgovMessageSource egovMessageSource;
+
+ /**
+ * 시스템관리 - 기본정보 관리
+ *
+ * @param systemVO
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value = "/site/manageSystemView.do")
+ public String manageSystemView(@ModelAttribute("searchVO") SystemVO systemVO, ModelMap model) throws Exception {
+
+// // 관리자 체크
+// if (!EgovUserDetailsHelper.isRoleAdmin()) {
+// return "redirect:/index.do";
+// }
+ systemVO.setSysId(1);
+ SystemVO sysVO = systemManageService.selectSystemInfo(systemVO);
+ model.addAttribute("sysVO", sysVO);
+ return ".adminLayout/시스템관리/com/site/SystemManage";
+ }
+
+ /**
+ * 시스템관리 - 기본정보 등록
+ *
+ * @param systemVO
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value = "/site/insertSystemInfo.do")
+ public String insertSystemInfo(SystemVO systemVO, ModelMap model, RedirectAttributes redirectAttributes)
+ throws Exception {
+
+// // 관리자 체크
+// if (!EgovUserDetailsHelper.isRoleAdmin()) {
+// return "redirect:/index.do";
+// }
+
+ try {
+ systemManageService.insertSystemInfo(systemVO);
+ } catch (Exception ex) {
+ LOGGER.error(ex.getMessage());
+ model.addAttribute("msg", egovMessageSource.getMessage("fail.common.msg"));
+ return "forward:/site/manageSystemView.do";
+ }
+
+ redirectAttributes.addFlashAttribute("msg", egovMessageSource.getMessage("success.common.insert"));
+ return "redirect:/site/manageSystemView.do";
+ }
+
+ /**
+ * 시스템관리 - 기본정보 수정
+ *
+ * @param systemVO
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value = "/site/updateSystemInfo.do")
+ public String updateSystemInfo(SystemVO systemVO, ModelMap model, RedirectAttributes redirectAttributes)
+ throws Exception {
+
+// // 관리자 체크
+// if (!EgovUserDetailsHelper.isRoleAdmin()) {
+// return "redirect:/index.do";
+// }
+
+ try {
+ systemManageService.updateSystemInfo(systemVO);
+ } catch (Exception ex) {
+ LOGGER.error(ex.getMessage());
+ model.addAttribute("msg", egovMessageSource.getMessage("fail.common.msg"));
+ return "forward:/site/manageSystemView.do";
+ }
+
+ redirectAttributes.addFlashAttribute("msg", egovMessageSource.getMessage("success.common.update"));
+ return "redirect:/site/manageSystemView.do";
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/site/web/SystemManageController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/site/service/impl/SystemManageDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/site/service/impl/SystemManageDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/site/service/impl/SystemManageDAO.java (revision 10)
@@ -0,0 +1,43 @@
+package egovframework.com.site.service.impl;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.site.service.SystemVO;
+
+@Repository("SystemManageDAO")
+public class SystemManageDAO extends EgovComAbstractDAO {
+
+ /**
+ * 시스템관리 - 기본정보 조회
+ *
+ * @param systemVO
+ * @return
+ * @throws Exception
+ */
+ public SystemVO selectSystemInfo(SystemVO systemVO) throws Exception {
+ return selectOne("SystemManageDAO.selectSystemInfo", systemVO);
+ }
+
+ /**
+ * 시스템관리 - 기본정보 등록
+ *
+ * @param systemVO
+ * @return
+ * @throws Exception
+ */
+ public void insertSystemInfo(SystemVO systemVO) throws Exception {
+ insert("SystemManageDAO.insertSystemInfo", systemVO);
+ }
+
+ /**
+ * 시스템관리 - 기본정보 수정
+ *
+ * @param systemVO
+ * @return
+ * @throws Exception
+ */
+ public void updateSystemInfo(SystemVO systemVO) throws Exception {
+ update("SystemManageDAO.updateSystemInfo", systemVO);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/site/service/impl/SystemManageDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/site/service/impl/SystemManageServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/site/service/impl/SystemManageServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/site/service/impl/SystemManageServiceImpl.java (revision 10)
@@ -0,0 +1,33 @@
+package egovframework.com.site.service.impl;
+
+import javax.annotation.Resource;
+
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import egovframework.com.site.service.SystemManageService;
+import egovframework.com.site.service.SystemVO;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+
+@Service("SystemManageService")
+public class SystemManageServiceImpl extends EgovAbstractServiceImpl implements SystemManageService {
+
+ @Resource(name = "SystemManageDAO")
+ private SystemManageDAO systemManageDAO;
+
+ @Cacheable(value="systemInfo", key = "#systemVO.sysId")
+ public SystemVO selectSystemInfo(SystemVO systemVO) throws Exception {
+ return systemManageDAO.selectSystemInfo(systemVO);
+ }
+
+ @CacheEvict(value="systemInfo", allEntries = true)
+ public void insertSystemInfo(SystemVO systemVO) throws Exception {
+ systemManageDAO.insertSystemInfo(systemVO);
+ }
+
+ @CacheEvict(value="systemInfo", allEntries = true)
+ public void updateSystemInfo(SystemVO systemVO) throws Exception {
+ systemManageDAO.updateSystemInfo(systemVO);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/site/service/impl/SystemManageServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/site/service/SystemVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/site/service/SystemVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/site/service/SystemVO.java (revision 10)
@@ -0,0 +1,107 @@
+package egovframework.com.site.service;
+
+import java.io.Serializable;
+
+@SuppressWarnings("serial")
+public class SystemVO implements Serializable {
+
+ //시스템ID
+ private Integer sysId;
+
+ //시스템명
+ private String sysNm;
+
+ //로고
+ private String coLogo;
+
+ //주소
+ private String coAddr;
+
+ //전화번호
+ private String coTel;
+
+ //팩스
+ private String coFax;
+
+ //저작권
+ private String copyright;
+
+ //favicon
+ private String coFavicon;
+
+ //점검 여부
+ private String inspectAt;
+
+ public Integer getSysId() {
+ return sysId;
+ }
+
+ public void setSysId(Integer sysId) {
+ this.sysId = sysId;
+ }
+
+ public String getSysNm() {
+ return sysNm;
+ }
+
+ public void setSysNm(String sysNm) {
+ this.sysNm = sysNm;
+ }
+
+ public String getCoLogo() {
+ return coLogo;
+ }
+
+ public void setCoLogo(String coLogo) {
+ this.coLogo = coLogo;
+ }
+
+ public String getCoAddr() {
+ return coAddr;
+ }
+
+ public void setCoAddr(String coAddr) {
+ this.coAddr = coAddr;
+ }
+
+ public String getCoTel() {
+ return coTel;
+ }
+
+ public void setCoTel(String coTel) {
+ this.coTel = coTel;
+ }
+
+ public String getCoFax() {
+ return coFax;
+ }
+
+ public void setCoFax(String coFax) {
+ this.coFax = coFax;
+ }
+
+ public String getCopyright() {
+ return copyright;
+ }
+
+ public void setCopyright(String copyright) {
+ this.copyright = copyright;
+ }
+
+ public String getCoFavicon() {
+ return coFavicon;
+ }
+
+ public void setCoFavicon(String coFavicon) {
+ this.coFavicon = coFavicon;
+ }
+
+ public String getInspectAt() {
+ return inspectAt;
+ }
+
+ public void setInspectAt(String inspectAt) {
+ this.inspectAt = inspectAt;
+ }
+
+}
Property changes on: base3.10/src/main/java/egovframework/com/site/service/SystemVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/site/service/SystemManageService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/site/service/SystemManageService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/site/service/SystemManageService.java (revision 10)
@@ -0,0 +1,29 @@
+package egovframework.com.site.service;
+
+public interface SystemManageService {
+
+ /**
+ * 시스템관리 - 기본정보 조회
+ *
+ * @param systemVO
+ * @return
+ * @throws Exception
+ */
+ public SystemVO selectSystemInfo(SystemVO systemVO) throws Exception;
+
+ /**
+ * 시스템관리 - 기본정보 등록
+ *
+ * @param systemVO
+ * @throws Exception
+ */
+ public void insertSystemInfo(SystemVO systemVO) throws Exception;
+
+ /**
+ * 시스템관리 - 기본정보 수정
+ *
+ * @param systemVO
+ * @throws Exception
+ */
+ public void updateSystemInfo(SystemVO systemVO) throws Exception;
+}
Property changes on: base3.10/src/main/java/egovframework/com/site/service/SystemManageService.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 (revision 9)
+++ base3.10/src/main/java/egovframework/com/sym/log/wlg/web/EgovWebLogInterceptor.java (revision 10)
@@ -5,12 +5,16 @@
import egovframework.com.sym.log.wlg.service.EgovWebLogService;
import egovframework.com.sym.log.wlg.service.WebLog;
+import java.util.List;
+
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+import org.springframework.web.util.UrlPathHelper;
/**
* @Class Name : EgovWebLogInterceptor.java
@@ -32,6 +36,17 @@
@Resource(name="EgovWebLogService")
private EgovWebLogService webLogService;
+
+ /** 로그 등록 제외 패턴 목록 */
+ private List<String> patternList;
+
+ public List<String> getPatternList() {
+ return patternList;
+ }
+
+ public void setPatternList(List<String> patternList) {
+ this.patternList = patternList;
+ }
/**
* 웹 로그정보를 생성한다.
@@ -43,23 +58,36 @@
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler, ModelAndView modeAndView) throws Exception {
-
- WebLog webLog = new WebLog();
- String reqURL = request.getRequestURI();
- String uniqId = "";
+ //URL 패턴 매칭 여부
+ boolean urlPatternMatcher = false;
+ //AntPathRequestMatcher
+ AntPathRequestMatcher antPathRequestMatcher = null;
+ for (String pattern : patternList) {
+ antPathRequestMatcher = new AntPathRequestMatcher(pattern);
+ if(antPathRequestMatcher.matches(request)){
+ urlPatternMatcher = true;
+ }
+ }
- /* 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);
-
+ //웹로그 등록 제외 체크
+ if (!urlPatternMatcher) {
+ WebLog webLog = new WebLog();
+ UrlPathHelper urlPathHelper = new UrlPathHelper();
+ String reqURL = urlPathHelper.getOriginatingRequestUri(request);
+ 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);
+ }
}
}
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 (revision 9)
+++ base3.10/src/main/java/egovframework/com/sym/mnu/mpm/web/EgovMainMenuManageController.java (revision 10)
@@ -216,7 +216,7 @@
* @return 출력페이지정보 "EgovMainView"
* @exception Exception
*/
- @IncludedInfo(name="포털(예제) 메인화면", order = 1, gid = 0)
+// @IncludedInfo(name="포털(예제) 메인화면", order = 1, gid = 0)
@RequestMapping(value="/sym/mnu/mpm/EgovMainMenuHome.do")
public String selectMainMenuHome(
@ModelAttribute("menuManageVO") MenuManageVO menuManageVO,
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 (revision 9)
+++ base3.10/src/main/java/egovframework/com/uat/uia/web/EgovLoginController.java (revision 10)
@@ -144,14 +144,9 @@
// 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";
@@ -177,19 +172,6 @@
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;
@@ -197,27 +179,10 @@
LOGGER.debug("main_page > {}", main_page);
if (main_page.startsWith("/")) {
- return "forward:" + main_page;
+ return "redirect:" + 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";
- }
- }
- */
}
/**
@@ -234,12 +199,13 @@
return "redirect:/j_spring_security_logout";*/
request.getSession().setAttribute("loginVO", null);
- // 세션모드인경우 Authority 초기화
- // List<String> authList = (List<String>)EgovUserDetailsHelper.getAuthorities();
- request.getSession().setAttribute("accessUser", null);
+ request.getSession().setAttribute("prevPage", null);
+ request.getSession().setAttribute("systemVO", null);
+ request.getSession().setAttribute("menuVO", null);
+ request.getSession().setAttribute("menuNaviVO", null);
+ request.getSession().setAttribute("menuDepthVO", null);
- //return "redirect:/egovDevIndex.jsp";
- return "redirect:/EgovContent.do";
+ return "redirect:" + Globals.MAIN_PAGE;
}
/**
Index: base3.10/src/main/java/egovframework/com/menu/program/web/ProgramController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/program/web/ProgramController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/program/web/ProgramController.java (revision 10)
@@ -0,0 +1,390 @@
+package egovframework.com.menu.program.web;
+
+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.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.annotation.ResponseBody;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import com.google.gson.Gson;
+
+import egovframework.com.cmm.ComDefaultCodeVO;
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.annotation.IncludedInfo;
+import egovframework.com.cmm.service.EgovCmmUseService;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.menu.program.service.MenuInfoVO;
+import egovframework.com.menu.program.service.MenuProgramInfoVO;
+import egovframework.com.menu.program.service.ProgramService;
+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창이 제일 먼저 뜨는것 수정 : 출력메시지 주석처리
+ * </pre>
+ */
+
+@Controller
+public class ProgramController {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ProgramController.class);
+
+ /* Validator */
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** EgovMessageSource */
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "EgovCmmUseService")
+ private EgovCmmUseService cmmUseService;
+
+ @Resource(name = "programService")
+ private ProgramService programService;
+
+ /**
+ * 2020.04.08 프로그램 리스트 관리 트리 추가
+ */
+ /**
+ * 프로그램 리스트에 대한 트리를 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovProgrmListTreeSelect"
+ * @exception Exception
+ */
+ @IncludedInfo(name="프로그램리스트 관리", order = 1090 ,gid = 60)
+ @RequestMapping(value="/menu/program/ProgrmListTreeSelect.do")
+ public String selectProgrmTreeList(
+ @ModelAttribute("searchVO") ComDefaultVO searchVO,
+ @RequestParam(value="menuType", required=false) String menuType,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+
+ return "egovframework/com/menu/program/EgovProgrmListTree";
+ }
+
+ /**
+ * 2020.04.08 프로그램 리스트 관리 추가
+ */
+ /**
+ * 프로그램 리스트를 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuList"
+ * @exception Exception
+ */
+ @RequestMapping(value="/menu/program/ProgrmListSelect.do")
+ public String selectProgrmList(
+ @ModelAttribute("menuInfoVO") MenuInfoVO menuInfoVO,
+ ModelMap model)
+ throws Exception {
+ String resultMsg = "";
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+
+ ComDefaultCodeVO vo = new ComDefaultCodeVO();
+ vo.setCodeId("COM104");
+ List<?> codeResult = cmmUseService.selectCmmCodeDetail(vo);
+ model.addAttribute("menuGbList", codeResult);
+
+ model.addAttribute("menuInfoVO", menuInfoVO);
+
+ return ".adminLayout/프로그램리스트관리/com/menu/program/EgovProgrmList";
+ }
+
+ /**
+ * 메뉴리스트의 메뉴정보를 등록한다.
+ * @param menuManageVO MenuManageVO
+ * @return 출력페이지정보 "sym/mnu/mpm/EgovMenuList"
+ * @exception Exception
+ */
+ @RequestMapping(value="/menu/program/MenuInfoInsert.do")
+ public String insertProgrmList(
+ @ModelAttribute("menuInfoVO") MenuInfoVO menuInfoVO,
+ BindingResult bindingResult,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+
+ programService.insertMenuInfo(menuInfoVO);
+
+ return "redirect:/menu/program/ProgrmListSelect.do?menuNo=" + menuInfoVO.getMenuNo();
+ }
+
+ /**
+ * 메뉴정보를 삭제 한다.
+ * @param menuInfoVo
+ * @return
+ * @exception Exception
+ */
+ @RequestMapping(value="/menu/program/MenuInfoDelete.do", produces="application/text; charset=utf8")
+ @ResponseBody
+ public String deleteMenuInfo(
+ @ModelAttribute("menuInfoVo") MenuInfoVO menuInfoVO,
+ ModelMap model)
+ throws Exception {
+
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+ programService.deleteMenuInfo(menuInfoVO);
+
+ //부모 menuNo
+ MenuInfoVO upperMenuNo = new MenuInfoVO();
+ upperMenuNo.setMenuNo(menuInfoVO.getUpperMenuNo());
+// upperMenuNo.setSysGroupCd(menuInfoVO.getSysGroupCd());;
+
+ //메뉴 정보 가져오기
+ upperMenuNo = programService.selectMenuInfo(upperMenuNo);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put ("result", upperMenuNo);
+ Gson gson = new Gson();
+ return gson.toJson (map);
+ }
+
+ /**
+ * 메뉴정보 이동 시 정보 및 Sort 변경
+ * @param menuInfoVo
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/menu/program/MenuInfoMove.do", produces="application/text; charset=utf8")
+ @ResponseBody
+ public String moveMenuInfo(
+ @ModelAttribute("menuInfoVo") MenuInfoVO menuInfoVO,
+ ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated ();
+ if (!isAuthenticated) {
+ return "redirect:/uat/uia/egovLoginUsr.do";
+ }
+
+
+ for (MenuInfoVO menuInfo : menuInfoVO.getMenuInfoList()) {
+ //메뉴정보 수정
+ programService.moveMenuInfo(menuInfo);
+ }
+
+ //메뉴 정보 가져오기
+ menuInfoVO = programService.selectMenuInfo(menuInfoVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put ("result", menuInfoVO);
+ Gson gson = new Gson();
+ return gson.toJson (map);
+ }
+
+ /**
+ * Tree에서 메뉴 추가 시 등록
+ * @param menuInfoVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/menu/program/MenuInfoTreeInsert.do", produces="application/text; charset=utf8")
+ @ResponseBody
+ public String inertTreeMenuInfo(
+ @ModelAttribute("menuInfoVo") MenuInfoVO menuInfoVO,
+ ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated ();
+ if (!isAuthenticated) {
+ return "redirect:/uat/uia/egovLoginUsr.do";
+ }
+
+ //메뉴 추가 등록
+ programService.insertTreeMenuInfo(menuInfoVO);
+
+ //메뉴 정보 가져오기
+ menuInfoVO = programService.selectMenuInfo(menuInfoVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+ //메뉴번호 리턴
+ map.put ("result", menuInfoVO);
+ Gson gson = new Gson();
+ return gson.toJson (map);
+ }
+
+ /**
+ * Tree에서 메뉴 명 변경 시 수정
+ * @param menuInfoVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/menu/program/MenuInfoTreeNewName.do", produces="application/text; charset=utf8")
+ @ResponseBody
+ public String updateNewnNameTreeMenuInfo(
+ @ModelAttribute("menuInfoVo") MenuInfoVO menuInfoVO,
+ ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated ();
+ if (!isAuthenticated) {
+ return "redirect:/uat/uia/egovLoginUsr.do";
+ }
+
+ //메뉴 추가 등록
+ programService.updateNewnNameTreeMenuInfo(menuInfoVO);
+
+ //메뉴 정보 가져오기
+ menuInfoVO = programService.selectMenuInfo(menuInfoVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+ //메뉴번호 리턴
+ map.put ("result", menuInfoVO);
+ Gson gson = new Gson();
+ return gson.toJson (map);
+ }
+
+ /**
+ * Tree 노드 클릭 시 정보 조회
+ * @param menuInfoVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/menu/program/MenuInfoTreeSelect.do", produces="application/text; charset=utf8")
+ @ResponseBody
+ public String selectTreeMenuInfo(
+ @ModelAttribute("menuInfoVo") MenuInfoVO menuInfoVO,
+ ModelMap model) throws Exception {
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated ();
+ if (!isAuthenticated) {
+ return "redirect:/uat/uia/egovLoginUsr.do";
+ }
+
+ //메뉴 정보 가져오기
+ menuInfoVO = programService.selectMenuInfo(menuInfoVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+ //메뉴번호 리턴
+ map.put ("result", menuInfoVO);
+ Gson gson = new Gson();
+ return gson.toJson (map);
+ }
+
+ /**
+ * 메뉴정보를 삭제 한다.
+ * @param menuInfoVo
+ * @return
+ * @exception Exception
+ */
+ @RequestMapping(value="/menu/program/MenuProgramInfoDelete.do", produces="application/text; charset=utf8")
+ @ResponseBody
+ public String deleteMenuProgramInfo(
+ @ModelAttribute("menuProgramInfoVO") MenuProgramInfoVO menuProgramInfoVO,
+ ModelMap model)
+ throws Exception {
+
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+ //프로그램 URL 삭제
+ programService.deleteMenuProgramInfo(menuProgramInfoVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put ("result", "SUCCESS");
+ Gson gson = new Gson();
+ return gson.toJson (map);
+ }
+
+ /**
+ * 게시판을 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "/menu/program/ProgramBbsListSearch"
+ * @exception Exception
+ */
+ @RequestMapping(value="/menu/program/ProgramBbsListSearch.do")
+ public String selectProgrmBbsListSearch(
+ @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 EgovUserDetailsHelper.getLoginPage();
+ }
+
+ // 내역 조회
+ 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_Contents = programService.selectBbsList(searchVO);
+ model.addAttribute("list_Contents", list_Contents);
+
+ int totCnt = programService.selectBbsListTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+
+ return "egovframework/com/menu/program/EgovProgramBbsListSearch";
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/menu/program/web/ProgramController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/program/service/impl/ProgramDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/program/service/impl/ProgramDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/program/service/impl/ProgramDAO.java (revision 10)
@@ -0,0 +1,139 @@
+package egovframework.com.menu.program.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.menu.program.service.MenuInfoVO;
+import egovframework.com.menu.program.service.MenuProgramInfo;
+import egovframework.com.menu.program.service.MenuProgramInfoVO;
+
+@Repository("ProgramDAO")
+public class ProgramDAO extends EgovComAbstractDAO {
+
+ /**
+ * 메뉴 정보 삭제
+ * @param menuInfoVo
+ * @throws Exception
+ */
+ public void deleteMenuInfo (MenuInfoVO menuInfoVO) throws Exception {
+ delete ("ProgramDAO.deleteMenuInfo", menuInfoVO);
+ }
+
+ /**
+ * 메뉴 프로그램 정보 삭제
+ * @param menuInfoVo
+ * @throws Exception
+ */
+ public void deleteMenuProgramInfo (MenuProgramInfoVO menuProgramInfoVO) throws Exception {
+ delete ("ProgramDAO.deleteMenuProgramInfo", menuProgramInfoVO);
+ }
+
+ /**
+ * 메뉴 프로그램 이동 시 수정
+ * @param menuInfoVo
+ * @throws Exception
+ */
+ public void moveMenuInfo(MenuInfoVO menuInfoVO) throws Exception {
+ update ("ProgramDAO.moveMenuInfo", menuInfoVO);
+ }
+
+ /**
+ * 트리에서 프로그램 메뉴정보 추가 등록
+ * @param menuInfoVo
+ * @throws Exception
+ */
+ public void insertTreeMenuInfo(MenuInfoVO menuInfoVO) throws Exception {
+ insert ("ProgramDAO.insertTreeMenuInfo", menuInfoVO);
+ }
+
+ /**
+ * 트리에서 메뉴 명 변경 시 수정
+ * @param menuInfoVO
+ * @throws Exception
+ */
+ public void updateNewnNameTreeMenuInfo(MenuInfoVO menuInfoVO) throws Exception {
+ update ("ProgramDAO.updateNewnNameTreeMenuInfo", menuInfoVO);
+ }
+
+ /**
+ * 메뉴 정보 가져오기
+ * @param menuInfoVO
+ * @return
+ * @throws Exception
+ */
+ public MenuInfoVO selectMenuInfo(MenuInfoVO menuInfoVO) throws Exception {
+ return selectOne ("ProgramDAO.selectMenuInfo", menuInfoVO);
+ }
+
+ /**
+ * 프로그램 메뉴 등록
+ * @param menuInfoVO
+ * @throws Exception
+ */
+ public void insertMenuInfo(MenuInfoVO menuInfoVO) throws Exception {
+ insert ("ProgramDAO.insertMenuInfo", menuInfoVO);
+ }
+
+ /**
+ * 프로그램 Url 등록
+ * @param menuProgramInfo
+ * @throws Exception
+ */
+ public void insertMenuProgramInfo(MenuProgramInfoVO menuProgramInfoVO) throws Exception {
+ insert ("ProgramDAO.insertMenuProgramInfo", menuProgramInfoVO);
+ }
+
+ /**
+ * 프로그램 메뉴 수정
+ * @param menuInfoVO
+ * @throws Exception
+ */
+ public void updateMenuInfo(MenuInfoVO menuInfoVO) throws Exception {
+ update ("ProgramDAO.updateMenuInfo", menuInfoVO);
+ }
+
+ /**
+ * 컨텐츠 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+
+ public List<?> selectContentsList(ComDefaultVO vo) throws Exception{
+ return selectList ("ProgramDAO.selectContentsList", vo);
+ }
+
+ /**
+ * 컨텐츠 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectContentsListTotCnt(ComDefaultVO vo) {
+ return (Integer)selectOne("ProgramDAO.selectContentsListTotCnt", vo);
+ }
+
+ /**
+ * 게시판 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+
+ public List<?> selectBbsList(ComDefaultVO vo) throws Exception{
+ return selectList ("ProgramDAO.selectBbsList", vo);
+ }
+
+ /**
+ * 게시판 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectBbsListTotCnt(ComDefaultVO vo) {
+ return (Integer)selectOne("ProgramDAO.selectBbsListTotCnt", vo);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/program/service/impl/ProgramDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/program/service/impl/ProgramServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/program/service/impl/ProgramServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/program/service/impl/ProgramServiceImpl.java (revision 10)
@@ -0,0 +1,159 @@
+package egovframework.com.menu.program.service.impl;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.stereotype.Service;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.menu.program.service.MenuInfoVO;
+import egovframework.com.menu.program.service.MenuProgramInfoVO;
+import egovframework.com.menu.program.service.ProgramService;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+
+@Service("programService")
+public class ProgramServiceImpl extends EgovAbstractServiceImpl implements ProgramService {
+ @Resource(name = "ProgramDAO")
+ private ProgramDAO programDAO;
+
+ @Resource(name = "egovProgrListIdGnrService")
+ private EgovIdGnrService egovProgrListIdGnrService;
+
+ @Override
+ @CacheEvict(value="menuProgram", allEntries = true)
+ public void deleteMenuInfo (MenuInfoVO menuInfoVO) throws Exception {
+ //메뉴 프로그램 삭제
+ MenuProgramInfoVO menuProgramInfoVO = new MenuProgramInfoVO();
+ menuProgramInfoVO.setMenuNo(menuInfoVO.getMenuNo());
+// menuProgramInfoVO.setSysGroupCd(menuInfoVO.getSysGroupCd());
+ programDAO.deleteMenuProgramInfo(menuProgramInfoVO);
+ //메뉴 정보 삭제
+ programDAO.deleteMenuInfo(menuInfoVO);
+ }
+
+ @Override
+ public void moveMenuInfo(MenuInfoVO menuInfoVO) throws Exception {
+ programDAO.moveMenuInfo(menuInfoVO);
+ }
+
+ @Override
+ public void insertTreeMenuInfo(MenuInfoVO menuInfoVO) throws Exception {
+ menuInfoVO.setMenuNo(egovProgrListIdGnrService.getNextStringId());
+ programDAO.insertTreeMenuInfo(menuInfoVO);
+ }
+
+ @Override
+ public void updateNewnNameTreeMenuInfo(MenuInfoVO menuInfoVO) throws Exception {
+ programDAO.updateNewnNameTreeMenuInfo(menuInfoVO);
+ }
+
+ @Override
+ public MenuInfoVO selectMenuInfo(MenuInfoVO menuInfoVO) throws Exception {
+ return programDAO.selectMenuInfo(menuInfoVO);
+ }
+
+ @Override
+ @CacheEvict(cacheNames= {"menuProgram", "sessionMenu"}, allEntries = true)
+ public void insertMenuInfo(MenuInfoVO menuInfoVO) throws Exception {
+ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+
+ if (menuInfoVO.getMenuNo() == null || menuInfoVO.getMenuNo().equals("")) {
+ //menuNo 생성
+ menuInfoVO.setMenuNo(egovProgrListIdGnrService.getNextStringId());
+ menuInfoVO.setFrstRegisterId(user.getUniqId());
+ menuInfoVO.setLastUpdusrId(user.getUniqId());
+ //프로그램 메뉴 등록
+ programDAO.insertMenuInfo(menuInfoVO);
+
+ //프로그램 메뉴 Url 등록
+// for(MenuProgramInfo menuProgramInfo : menuInfoVO.getMenuProgramList()) {
+// programDAO.insertMenuProgramInfo(menuProgramInfo);
+// }
+ } else {
+ //수정
+ menuInfoVO.setLastUpdusrId(user.getUniqId());
+ programDAO.updateMenuInfo(menuInfoVO);
+ //프로그램 메뉴 삭제
+// programDAO.deleteMenuProgramInfo(menuInfoVO);
+ //프로그램 메뉴 Url 등록
+// for(MenuProgramInfo menuProgramInfo : menuInfoVO.getMenuProgramList()) {
+// menuProgramInfo.setMenuNo(menuInfoVO.getMenuNo());
+// programDAO.insertMenuProgramInfo(menuProgramInfo);
+// }
+ }
+
+ if (menuInfoVO.getMenuProgramList() != null) {
+ for(MenuProgramInfoVO vo : menuInfoVO.getMenuProgramList()) {
+ if (!vo.getProgrUrl().equals("") && vo.getProgrUrl() != null) {
+ vo.setMenuNo(menuInfoVO.getMenuNo());
+// vo.setSysGroupCd(menuInfoVO.getSysGroupCd());
+ vo.setFrstRegisterId(user.getUniqId());
+ vo.setLastUpdusrId(user.getUniqId());
+ programDAO.insertMenuProgramInfo(vo);
+ }
+ }
+ }
+
+ if (menuInfoVO.getDeleteProgramList() != null) {
+ for(MenuProgramInfoVO vo : menuInfoVO.getDeleteProgramList()) {
+ vo.setMenuNo(menuInfoVO.getMenuNo());
+// vo.setSysGroupCd(menuInfoVO.getSysGroupCd());
+ programDAO.deleteMenuProgramInfo(vo);
+ }
+ }
+ }
+
+ @Override
+ public void deleteMenuProgramInfo(MenuProgramInfoVO menuProgramInfoVO) throws Exception {
+ programDAO.deleteMenuProgramInfo(menuProgramInfoVO);
+ }
+
+ /**
+ * 컨텐츠 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ @Override
+ public List<?> selectContentsList(ComDefaultVO vo) throws Exception {
+ return programDAO.selectContentsList(vo);
+ }
+
+ /**
+ * 컨텐츠 목록 수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return Integer
+ * @exception Exception
+ */
+ @Override
+ public int selectContentsListTotCnt(ComDefaultVO vo) throws Exception {
+ return programDAO.selectContentsListTotCnt(vo);
+ }
+
+ /**
+ * 게시판 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ @Override
+ public List<?> selectBbsList(ComDefaultVO vo) throws Exception {
+ return programDAO.selectBbsList(vo);
+ }
+
+ /**
+ * 게시판 목록 수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return Integer
+ * @exception Exception
+ */
+ @Override
+ public int selectBbsListTotCnt(ComDefaultVO vo) throws Exception {
+ return programDAO.selectBbsListTotCnt(vo);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/program/service/impl/ProgramServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/program/service/MenuInfo.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/program/service/MenuInfo.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/program/service/MenuInfo.java (revision 10)
@@ -0,0 +1,183 @@
+package egovframework.com.menu.program.service;
+
+import org.apache.ibatis.type.Alias;
+
+import egovframework.com.cmm.CustomDefaultVO;
+
+/**
+ * 메뉴 정보 객체
+ *
+ * @author Jun
+ */
+@SuppressWarnings("serial")
+@Alias("MenuInfo")
+public class MenuInfo extends CustomDefaultVO {
+ /**
+ * 메뉴번호
+ */
+ private String menuNo;
+
+ /**
+ * 상위메뉴번호
+ */
+ private String upperMenuNo;
+
+ /**
+ * 메뉴 명
+ */
+ private String menuNm;
+
+ /**
+ * 메뉴순서
+ */
+ private String menuOrdr;
+
+ /**
+ * 메뉴 설명
+ */
+ private String menuDc;
+
+ /**
+ * 관련 이미지
+ */
+ private String relateImage;
+
+ /**
+ * 프로그램 구분
+ */
+ private String progrGb;
+
+ /**
+ * 메뉴구분 U:사용자 A:관리자 M:마이페이지
+ */
+ private String menuGb;
+
+ /**
+ * 사용유무
+ */
+ private String useYn;
+
+ /**
+ * 최초등록자 아이디
+ */
+ private String frstRegisterId = "";
+
+ /**
+ * 최초등록시점
+ */
+ private String frstRegisterPnttm = "";
+
+ /**
+ * 최종수정자 아이디
+ */
+ private String lastUpdusrId = "";
+
+ /**
+ * 최종수정시점
+ */
+ private String lastUpdusrPnttm = "";
+
+ public String getMenuNo() {
+ return menuNo;
+ }
+
+ public void setMenuNo(String menuNo) {
+ this.menuNo = menuNo;
+ }
+
+ public String getUpperMenuNo() {
+ return upperMenuNo;
+ }
+
+ public void setUpperMenuNo(String upperMenuNo) {
+ this.upperMenuNo = upperMenuNo;
+ }
+
+ public String getMenuNm() {
+ return menuNm;
+ }
+
+ public void setMenuNm(String menuNm) {
+ this.menuNm = menuNm;
+ }
+
+ public String getMenuOrdr() {
+ return menuOrdr;
+ }
+
+ public void setMenuOrdr(String menuOrdr) {
+ this.menuOrdr = menuOrdr;
+ }
+
+ public String getMenuDc() {
+ return menuDc;
+ }
+
+ public void setMenuDc(String menuDc) {
+ this.menuDc = menuDc;
+ }
+
+ public String getRelateImage() {
+ return relateImage;
+ }
+
+ public void setRelateImage(String relateImage) {
+ this.relateImage = relateImage;
+ }
+
+ public String getProgrGb() {
+ return progrGb;
+ }
+
+ public void setProgrGb(String progrGb) {
+ this.progrGb = progrGb;
+ }
+
+ public String getMenuGb() {
+ return menuGb;
+ }
+
+ public void setMenuGb(String menuGb) {
+ this.menuGb = menuGb;
+ }
+
+ public String getUseYn() {
+ return useYn;
+ }
+
+ public void setUseYn(String useYn) {
+ this.useYn = useYn;
+ }
+
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+
+ public String getFrstRegisterPnttm() {
+ return frstRegisterPnttm;
+ }
+
+ public void setFrstRegisterPnttm(String frstRegisterPnttm) {
+ this.frstRegisterPnttm = frstRegisterPnttm;
+ }
+
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+
+ public String getLastUpdusrPnttm() {
+ return lastUpdusrPnttm;
+ }
+
+ public void setLastUpdusrPnttm(String lastUpdusrPnttm) {
+ this.lastUpdusrPnttm = lastUpdusrPnttm;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/program/service/MenuInfo.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/program/service/MenuProgramInfoVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/program/service/MenuProgramInfoVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/program/service/MenuProgramInfoVO.java (revision 10)
@@ -0,0 +1,45 @@
+package egovframework.com.menu.program.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.ibatis.type.Alias;
+
+/**
+ * 메뉴 프로그램 정보 객체
+ *
+ * @author Jun
+ */
+@Alias("MenuProgramInfoVO")
+public class MenuProgramInfoVO extends MenuProgramInfo {
+ //이전 프로그램URL
+ private List<MenuProgramInfoVO> menuProgramInfoList;
+ //트리 프로그램URL ID
+ private String proId;
+
+ public List<MenuProgramInfoVO> getMenuProgramInfoList() {
+ if (this.menuProgramInfoList == null) {
+ return null;
+ } else {
+ List<MenuProgramInfoVO> list = this.menuProgramInfoList;
+ return list;
+ }
+ }
+
+ public void setMenuProgramInfoList(List<MenuProgramInfoVO> menuProgramInfoList) {
+ if (menuProgramInfoList != null) {
+ this.menuProgramInfoList = new ArrayList<MenuProgramInfoVO>();
+ for (MenuProgramInfoVO vo : menuProgramInfoList) {
+ this.menuProgramInfoList.add(vo);
+ }
+ }
+ }
+
+ public String getProId() {
+ return proId;
+ }
+
+ public void setProId(String proId) {
+ this.proId = proId;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/program/service/MenuProgramInfoVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/program/service/MenuInfoVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/program/service/MenuInfoVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/program/service/MenuInfoVO.java (revision 10)
@@ -0,0 +1,111 @@
+package egovframework.com.menu.program.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.ibatis.type.Alias;
+
+/**
+ * 메뉴 정보 Vo
+ *
+ * @author Jun
+ */
+@SuppressWarnings("serial")
+@Alias("MenuInfoVO")
+public class MenuInfoVO extends MenuInfo {
+
+ /**
+ * 메뉴 프로그램 리스트
+ */
+ private List<MenuProgramInfoVO> menuProgramList;
+
+ /**
+ * 메뉴 정보 리스트
+ */
+ private List<MenuInfoVO> menuInfoList;
+
+ /**
+ * 메뉴 프로그램 삭제리스트
+ */
+ private List<MenuProgramInfoVO> deleteProgramList;
+
+ /**
+ * 메뉴번호 treeId
+ */
+ private String id;
+
+ /**
+ * 상위메뉴번호 treePid
+ */
+ private String pId;
+
+ public List<MenuProgramInfoVO> getMenuProgramList() {
+ if (this.menuProgramList == null) {
+ return null;
+ } else {
+ List<MenuProgramInfoVO> list = this.menuProgramList;
+ return list;
+ }
+ }
+
+ public void setMenuProgramList(List<MenuProgramInfoVO> menuProgramList) {
+ if (menuProgramList != null) {
+ this.menuProgramList = new ArrayList<MenuProgramInfoVO>();
+ for (MenuProgramInfoVO vo : menuProgramList) {
+ this.menuProgramList.add(vo);
+ }
+ }
+ }
+
+ public List<MenuInfoVO> getMenuInfoList() {
+ if (this.menuInfoList == null) {
+ return null;
+ } else {
+ List<MenuInfoVO> list = this.menuInfoList;
+ return list;
+ }
+ }
+
+ public void setMenuInfoList(List<MenuInfoVO> menuInfoList) {
+ if (menuInfoList != null) {
+ this.menuInfoList = new ArrayList<MenuInfoVO>();
+ for (MenuInfoVO vo : menuInfoList) {
+ this.menuInfoList.add(vo);
+ }
+ }
+ }
+
+ public List<MenuProgramInfoVO> getDeleteProgramList() {
+ if (this.deleteProgramList == null) {
+ return null;
+ } else {
+ List<MenuProgramInfoVO> list = this.deleteProgramList;
+ return list;
+ }
+ }
+
+ public void setDeleteProgramList(List<MenuProgramInfoVO> deleteProgramList) {
+ if (deleteProgramList != null) {
+ this.deleteProgramList = new ArrayList<MenuProgramInfoVO>();
+ for (MenuProgramInfoVO vo : deleteProgramList) {
+ this.deleteProgramList.add(vo);
+ }
+ }
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getpId() {
+ return pId;
+ }
+
+ public void setpId(String pId) {
+ this.pId = pId;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/program/service/MenuInfoVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/program/service/MenuProgramInfo.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/program/service/MenuProgramInfo.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/program/service/MenuProgramInfo.java (revision 10)
@@ -0,0 +1,126 @@
+package egovframework.com.menu.program.service;
+
+import org.apache.ibatis.type.Alias;
+
+/**
+ * 메뉴 프로그램 정보 객체
+ *
+ * @author Jun
+ */
+@SuppressWarnings("serial")
+@Alias("MenuProgramInfo")
+public class MenuProgramInfo {
+ /**
+ * 메뉴번호
+ */
+ private String menuNo;
+
+ /**
+ * 프로그램 Url
+ */
+ private String progrUrl;
+
+ /**
+ * 프로그램 Url 명
+ */
+ private String progrUrlNm;
+
+ /**
+ * 대표 Url 설정
+ */
+ private String defaultYn = "N";
+
+ /**
+ * 시스템 그룹코드
+ */
+ private String sysGroupCd;
+
+ /**
+ * 최초등록자 아이디
+ */
+ private String frstRegisterId = "";
+ /**
+ * 최초등록시점
+ */
+ private String frstRegisterPnttm = "";
+ /**
+ * 최종수정자 아이디
+ */
+ private String lastUpdusrId = "";
+ /**
+ * 최종수정시점
+ */
+ private String lastUpdusrPnttm = "";
+
+ public String getMenuNo() {
+ return menuNo;
+ }
+
+ public void setMenuNo(String menuNo) {
+ this.menuNo = menuNo;
+ }
+
+ public String getProgrUrl() {
+ return progrUrl;
+ }
+
+ public void setProgrUrl(String progrUrl) {
+ this.progrUrl = progrUrl;
+ }
+
+ public String getProgrUrlNm() {
+ return progrUrlNm;
+ }
+
+ public void setProgrUrlNm(String progrUrlNm) {
+ this.progrUrlNm = progrUrlNm;
+ }
+
+ public String getDefaultYn() {
+ return defaultYn;
+ }
+
+ public void setDefaultYn(String defaultYn) {
+ this.defaultYn = defaultYn;
+ }
+
+ public String getSysGroupCd() {
+ return sysGroupCd;
+ }
+
+ public void setSysGroupCd(String sysGroupCd) {
+ this.sysGroupCd = sysGroupCd;
+ }
+
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+
+ public String getFrstRegisterPnttm() {
+ return frstRegisterPnttm;
+ }
+
+ public void setFrstRegisterPnttm(String frstRegisterPnttm) {
+ this.frstRegisterPnttm = frstRegisterPnttm;
+ }
+
+ public String getLastUpdusrId() {
+ return lastUpdusrId;
+ }
+
+ public void setLastUpdusrId(String lastUpdusrId) {
+ this.lastUpdusrId = lastUpdusrId;
+ }
+
+ public String getLastUpdusrPnttm() {
+ return lastUpdusrPnttm;
+ }
+
+ public void setLastUpdusrPnttm(String lastUpdusrPnttm) {
+ this.lastUpdusrPnttm = lastUpdusrPnttm;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/program/service/MenuProgramInfo.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/program/service/ProgramService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/program/service/ProgramService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/program/service/ProgramService.java (revision 10)
@@ -0,0 +1,96 @@
+package egovframework.com.menu.program.service;
+
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+/**
+ * 메뉴정보관리 서비스
+ *
+ * @author Song YoungHo
+ */
+public interface ProgramService {
+ /**
+ * 프로그램 메뉴정보 삭제
+ *
+ * @param menuInfoVo
+ * @return
+ * @throws Exception
+ */
+ public void deleteMenuInfo(MenuInfoVO menuInfoVO) throws Exception;
+
+ /**
+ * 프로그램 이동 시 수정
+ * @param menuInfoVo
+ * @throws Exception
+ */
+ public void moveMenuInfo(MenuInfoVO menuInfoVO) throws Exception;
+
+ /**
+ * 트리에서 프로그램 메뉴정보 추가 등록
+ * @param menuInfoVo
+ * @throws Exception
+ */
+ public void insertTreeMenuInfo(MenuInfoVO menuInfoVO) throws Exception;
+
+ /**
+ * 트리에서 메뉴 명 변경 시 수정
+ * @param menuInfoVo
+ * @throws Exception
+ */
+ public void updateNewnNameTreeMenuInfo(MenuInfoVO menuInfoVO) throws Exception;
+
+ /**
+ * 메뉴 정보 가져오기
+ * @param menuInfoVo
+ * @return
+ * @throws Exception
+ */
+ public MenuInfoVO selectMenuInfo(MenuInfoVO menuInfoVO) throws Exception;
+
+ /**
+ * 프로그램 메뉴 등록
+ * @param menuInfoVO
+ * @throws Exception
+ */
+ public void insertMenuInfo(MenuInfoVO menuInfoVO) throws Exception;
+
+ /**
+ * 프로그램 URL 삭제
+ * @param menuInfoVO
+ * @throws Exception
+ */
+ public void deleteMenuProgramInfo(MenuProgramInfoVO menuProgramInfoVO) throws Exception;
+
+ /**
+ * 컨텐츠 게시물 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectContentsList(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 컨텐츠 게시물 목록 수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectContentsListTotCnt(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 게시판 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectBbsList(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 게시판 목록 수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectBbsListTotCnt(ComDefaultVO vo) throws Exception;
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/program/service/ProgramService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/web/MenuController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/web/MenuController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/web/MenuController.java (revision 10)
@@ -0,0 +1,33 @@
+package egovframework.com.menu.web;
+
+import javax.annotation.Resource;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import com.google.gson.Gson;
+
+import egovframework.com.menu.service.MenuService;
+import egovframework.com.menu.service.MenuTreeVO;
+
+@Controller
+public class MenuController {
+
+ @Resource(name = "MenuService")
+ private MenuService menuService;
+
+ /**
+ * 메뉴 트리 생성을 위한 목록 데이터
+ * @param menuTreeVO
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value = "/menu/menuTreeList.do", produces = "application/json; charset=utf8")
+ @ResponseBody
+ public String menuTreeList(@ModelAttribute MenuTreeVO menuTreeVO) throws Exception {
+ Gson gson = new Gson();
+ return gson.toJson(menuService.selectMenuTreeList());
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/web/MenuController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/web/AlertView.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/web/AlertView.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/web/AlertView.java (revision 10)
@@ -0,0 +1,35 @@
+package egovframework.com.menu.web;
+
+import java.io.PrintWriter;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.view.AbstractView;
+
+/**
+ * 경고창 이후 페이지 이동 뷰
+ * @author ljh
+ *
+ */
+@Component
+public class AlertView extends AbstractView {
+
+ @Override
+ protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+// String contextPath = request.getContextPath();
+ String message = (String) model.get("message");
+ String returnUrl = (String) model.get("returnUrl");
+
+ response.setContentType("text/html; charset=UTF-8");
+ PrintWriter out = response.getWriter();
+ out.print("<script>");
+ if( message != null ) {
+ out.print("alert('" + message +"');");
+ }
+ out.println("location.href='"+ returnUrl + "'</script>");
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/menu/web/AlertView.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/service/impl/MenuServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/service/impl/MenuServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/service/impl/MenuServiceImpl.java (revision 10)
@@ -0,0 +1,70 @@
+package egovframework.com.menu.service.impl;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.dao.DataAccessException;
+import org.springframework.stereotype.Service;
+
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.menu.service.MenuService;
+import egovframework.com.menu.service.MenuTreeVO;
+import egovframework.com.menu.service.MenuVO;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+
+@Service("MenuService")
+public class MenuServiceImpl extends EgovAbstractServiceImpl implements MenuService {
+ @Resource(name = "MenuDAO")
+ private MenuDAO menuDAO;
+
+ @Override
+ public List<MenuTreeVO> selectMenuTreeList() throws Exception {
+ return menuDAO.selectMenuTreeList();
+ }
+
+ @Override
+ public List<MenuVO> selectAllMenuList(MenuVO menuVO) throws Exception {
+ return menuDAO.selectAllMenuList(menuVO);
+ }
+
+ @Override
+ @Cacheable(value="sessionMenu", key = "{#menuVO.userId}")
+ public List<MenuVO> selectSessionMenuList(MenuVO menuVO) throws Exception {
+ return menuDAO.selectSessionMenuList(menuVO);
+ }
+
+ @Override
+ public int selectAuthoUrlCheck(MenuVO menuVO) throws Exception {
+ return menuDAO.selectAuthoUrlCheck(menuVO);
+ }
+
+ @Override
+ public int selectMenuProgramCnt(MenuVO menuVO) throws Exception {
+ return menuDAO.selectMenuProgramCnt(menuVO);
+ }
+
+ @Override
+ public List<MenuVO> selectMenuNaviList(MenuVO menuVO) throws Exception {
+ return menuDAO.selectMenuNaviList(menuVO);
+ }
+
+ @Override
+ public List<MenuVO> selectMenuSameDepthList(MenuVO menuVO) throws Exception {
+ return menuDAO.selectMenuSameDepthList(menuVO);
+ }
+
+ @Override
+ @Cacheable(value="menuProgram", key = "{#menuVO.progrUrl}")
+ public MenuVO selectMenuProgram(MenuVO menuVO) throws EgovBizException {
+ return menuDAO.selectMenuProgram(menuVO);
+ }
+
+ @Override
+ public MenuVO selectSessionMenuLimitOne(MenuVO menuVO) throws DataAccessException {
+ return menuDAO.selectSessionMenuLimitOne(menuVO);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/service/impl/MenuServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/service/impl/MenuDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/service/impl/MenuDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/service/impl/MenuDAO.java (revision 10)
@@ -0,0 +1,112 @@
+package egovframework.com.menu.service.impl;
+
+import java.util.List;
+
+import org.springframework.dao.DataAccessException;
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.menu.service.MenuTreeVO;
+import egovframework.com.menu.service.MenuVO;
+
+@Repository("MenuDAO")
+public class MenuDAO extends EgovComAbstractDAO {
+ /**
+ * 메뉴 트리 생성을 위한 목록 데이터
+ *
+ * @return
+ * @throws Exception
+ */
+ public List<MenuTreeVO> selectMenuTreeList() throws Exception {
+ return selectList("MenuDAO.selectMenuTreeList");
+ }
+
+ /**
+ * 모든 메뉴 목록 데이터
+ *
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public List<MenuVO> selectAllMenuList(MenuVO menuVO) throws Exception {
+ return selectList("MenuDAO.selectAllMenuList", menuVO);
+ }
+
+ /**
+ * 권한에 따른 메뉴 목록 데이터(사용자, 롤)
+ *
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public List<MenuVO> selectSessionMenuList(MenuVO menuVO) throws Exception {
+ return selectList("MenuDAO.selectSessionMenuList", menuVO);
+ }
+
+ /**
+ * URL로 권한 체크
+ *
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public int selectAuthoUrlCheck(MenuVO menuVO) throws Exception {
+ return selectOne("MenuDAO.selectAuthoUrlCheck", menuVO);
+ }
+
+ /**
+ * 권한 체크 대상인지 확인
+ *
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public int selectMenuProgramCnt(MenuVO menuVO) throws Exception {
+ return selectOne("MenuDAO.selectMenuProgramCnt", menuVO);
+ }
+
+ /**
+ * URL로 메뉴 정보 조회
+ *
+ * @Author : 임종호
+ * @Date : 2021. 9. 2.
+ * @Method Name : selectMenuProgram
+ * @return : MenuVO
+ */
+ public MenuVO selectMenuProgram(MenuVO menuVO) throws DataAccessException {
+ return selectOne("MenuDAO.selectMenuProgram", menuVO);
+ }
+
+ /**
+ * URL의 상위 메뉴정보 리스트
+ *
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public List<MenuVO> selectMenuNaviList(MenuVO menuVO) throws Exception {
+ return selectList("MenuDAO.selectMenuNaviList", menuVO);
+ }
+
+ /**
+ * URL에 해당하는 메뉴 depth의 데이터 목록
+ *
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public List<MenuVO> selectMenuSameDepthList(MenuVO menuVO) throws Exception {
+ return selectList("MenuDAO.selectMenuSameDepthList", menuVO);
+ }
+
+ /**
+ * 권한에 따른 메뉴 상위 1건
+ * @Author : 임종호
+ * @Date : 2021. 9. 27.
+ * @Method Name : selectSessionMenuLimitOne
+ * @return : MenuVO
+ */
+ public MenuVO selectSessionMenuLimitOne(MenuVO menuVO) throws DataAccessException {
+ return selectOne("MenuDAO.selectSessionMenuLimitOne", menuVO);
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/service/impl/MenuDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/service/MenuVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/service/MenuVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/service/MenuVO.java (revision 10)
@@ -0,0 +1,215 @@
+package egovframework.com.menu.service;
+
+import org.apache.ibatis.type.Alias;
+
+import egovframework.com.cmm.ComDefaultVO;
+
+/**
+ * 메뉴VO TOP메뉴에 사용
+ *
+ * @author ljh
+ *
+ */
+@SuppressWarnings("serial")
+@Alias("MenuVO")
+public class MenuVO extends ComDefaultVO {
+ /**
+ * 메뉴번호
+ */
+ private String menuNo;
+
+ /**
+ * 상위메뉴번호
+ */
+ private String upperMenuNo;
+
+ /**
+ * 메뉴명
+ */
+ private String menuNm;
+
+ /**
+ * 메뉴순서
+ */
+ private Long menuOrdr;
+
+ /**
+ * 메뉴설정
+ */
+ private String menuDc;
+
+ /**
+ * 관련이미지
+ */
+ private String relateImage;
+
+ /**
+ * 프로그램구분 C:컨텐츠 P:프로그램 B:게시판 D:폴더
+ */
+ private String progrGb;
+
+ /**
+ * 대표URL
+ */
+ private String progrUrl;
+
+ /**
+ * 대표URL명
+ */
+ private String progrUrlNm;
+
+ /**
+ * 메뉴구분 U:사용자 A:관리자 M:마이페이지
+ */
+ private String menuGb;
+
+ /**
+ * 권한체크에 사용되는 권한코드
+ */
+ private String authorCode;
+
+ /**
+ * 권한체크에 사용되는 권한코드목록
+ */
+ private String[] authorCodeList;
+
+ /**
+ * 권한체크에 사용되는 사용자ID
+ */
+ private String userId;
+
+ /**
+ * 하위메뉴 개수
+ */
+ private int childCnt;
+
+ public String getMenuNo() {
+ return menuNo;
+ }
+
+ public void setMenuNo(String menuNo) {
+ this.menuNo = menuNo;
+ }
+
+ public String getUpperMenuNo() {
+ return upperMenuNo;
+ }
+
+ public void setUpperMenuNo(String upperMenuNo) {
+ this.upperMenuNo = upperMenuNo;
+ }
+
+ public String getMenuNm() {
+ return menuNm;
+ }
+
+ public void setMenuNm(String menuNm) {
+ this.menuNm = menuNm;
+ }
+
+ public Long getMenuOrdr() {
+ return menuOrdr;
+ }
+
+ public void setMenuOrdr(Long menuOrdr) {
+ this.menuOrdr = menuOrdr;
+ }
+
+ public String getMenuDc() {
+ return menuDc;
+ }
+
+ public void setMenuDc(String menuDc) {
+ this.menuDc = menuDc;
+ }
+
+ public String getRelateImage() {
+ return relateImage;
+ }
+
+ public void setRelateImage(String relateImage) {
+ this.relateImage = relateImage;
+ }
+
+ public String getProgrGb() {
+ return progrGb;
+ }
+
+ public void setProgrGb(String progrGb) {
+ this.progrGb = progrGb;
+ }
+
+ public String getProgrUrl() {
+ return progrUrl;
+ }
+
+ public void setProgrUrl(String progrUrl) {
+ this.progrUrl = progrUrl;
+ }
+
+ public String getMenuGb() {
+ return menuGb;
+ }
+
+ public void setMenuGb(String menuGb) {
+ this.menuGb = menuGb;
+ }
+
+ public String getAuthorCode() {
+ return authorCode;
+ }
+
+ public void setAuthorCode(String authorCode) {
+ this.authorCode = authorCode;
+ }
+
+ public String[] getAuthorCodeList() {
+ if (authorCode != null) {
+ authorCodeList = authorCode.split(",");
+ }
+ if (authorCodeList == null) {
+ return null;
+ } else {
+ int cnt = authorCodeList.length;
+ String[] list = new String[cnt];
+ for (int i = 0; i < cnt; i++) {
+ list[i] = authorCodeList[i];
+ }
+ return list;
+ }
+ }
+
+ public void setAuthorCodeList(String[] authorCodeList) {
+ if (authorCodeList != null) {
+ int cnt = authorCodeList.length;
+ this.authorCodeList = new String[cnt];
+ for (int i = 0; i < cnt; i++) {
+ this.authorCodeList[i] = authorCodeList[i];
+ }
+ }
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public int getChildCnt() {
+ return childCnt;
+ }
+
+ public void setChildCnt(int childCnt) {
+ this.childCnt = childCnt;
+ }
+
+ public String getProgrUrlNm() {
+ return progrUrlNm;
+ }
+
+ public void setProgrUrlNm(String progrUrlNm) {
+ this.progrUrlNm = progrUrlNm;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/menu/service/MenuVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/service/MenuService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/service/MenuService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/service/MenuService.java (revision 10)
@@ -0,0 +1,87 @@
+package egovframework.com.menu.service;
+
+import java.util.List;
+
+import org.springframework.dao.DataAccessException;
+
+import egovframework.rte.fdl.cmmn.exception.EgovBizException;
+
+/**
+ * 메뉴 서비스
+ *
+ * @author Jun
+ */
+public interface MenuService {
+ /**
+ * 메뉴 트리 생성을 위한 목록 데이터
+ * @return
+ * @throws Exception
+ */
+ public List<MenuTreeVO> selectMenuTreeList() throws Exception;
+
+ /**
+ * 모든 메뉴 목록 데이터
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public List<MenuVO> selectAllMenuList(MenuVO menuVO) throws Exception;
+
+ /**
+ * 권한에 따른 메뉴 목록 데이터(사용자, 롤)
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public List<MenuVO> selectSessionMenuList(MenuVO menuVO) throws Exception;
+
+ /**
+ * URL로 권한 체크
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public int selectAuthoUrlCheck(MenuVO menuVO) throws Exception;
+
+ /**
+ * URL로 메뉴 정보 조회
+ * @Author : 임종호
+ * @Date : 2021. 9. 2.
+ * @Method Name : selectMenuProgram
+ * @return : MenuVO
+ */
+ public MenuVO selectMenuProgram(MenuVO menuVO) throws EgovBizException;
+
+ /**
+ * 권한 체크 대상인지 확인
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public int selectMenuProgramCnt(MenuVO menuVO) throws Exception;
+
+ /**
+ * URL의 상위 메뉴정보 리스트
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public List<MenuVO> selectMenuNaviList(MenuVO menuVO) throws Exception;
+
+ /**
+ * URL에 해당하는 메뉴 depth의 데이터 목록
+ * @param menuVO
+ * @return
+ * @throws Exception
+ */
+ public List<MenuVO> selectMenuSameDepthList(MenuVO menuVO) throws Exception;
+
+ /**
+ * 권한에 따른 메뉴 상위 1건
+ * @Author : 임종호
+ * @Date : 2021. 9. 27.
+ * @Method Name : selectSessionMenuLimitOne
+ * @return : MenuVO
+ */
+ public MenuVO selectSessionMenuLimitOne(MenuVO menuVO) throws DataAccessException;
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/menu/service/MenuService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/service/MenuTreeVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/service/MenuTreeVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/service/MenuTreeVO.java (revision 10)
@@ -0,0 +1,171 @@
+package egovframework.com.menu.service;
+
+import org.apache.ibatis.type.Alias;
+
+import egovframework.com.cmm.CustomDefaultVO;
+
+/**
+ * 메뉴트리VO
+ * 메뉴트리에 사용
+ * @author ljh
+ *
+ */
+@SuppressWarnings("serial")
+@Alias("MenuTreeVO")
+public class MenuTreeVO extends CustomDefaultVO {
+ /**
+ * 메뉴번호 treeId
+ */
+ private String id;
+
+ /**
+ * 상위메뉴번호 treePid
+ */
+ private String pId;
+
+ /**
+ * 메뉴명
+ */
+ private String name;
+
+ /**
+ * 메뉴순서
+ */
+ private Long menuOrdr;
+
+ /**
+ * 메뉴설정
+ */
+ private String menuDc;
+
+ /**
+ * 관련이미지
+ */
+ private String relateImage;
+
+ /**
+ * 프로그램구분 C:컨텐츠 P:프로그램 B:게시판 D:폴더
+ */
+ private String progrGb;
+
+ /**
+ * 대표URL
+ */
+ private String progrUrl;
+
+ /**
+ * 메뉴구분 U:사용자 A:관리자 M:마이페이지
+ */
+ private String menuGb;
+
+ /**
+ * 메뉴번호
+ */
+ private String menuNo;
+
+ /**
+ * 상위메뉴번호
+ */
+ private String upperMenuNo;
+
+ /**
+ * 시스템그룹 명
+ */
+ private String sysGroupNm;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getpId() {
+ return pId;
+ }
+
+ public void setpId(String pId) {
+ this.pId = pId;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Long getMenuOrdr() {
+ return menuOrdr;
+ }
+
+ public void setMenuOrdr(Long menuOrdr) {
+ this.menuOrdr = menuOrdr;
+ }
+
+ public String getMenuDc() {
+ return menuDc;
+ }
+
+ public void setMenuDc(String menuDc) {
+ this.menuDc = menuDc;
+ }
+
+ public String getRelateImage() {
+ return relateImage;
+ }
+
+ public void setRelateImage(String relateImage) {
+ this.relateImage = relateImage;
+ }
+
+ public String getProgrGb() {
+ return progrGb;
+ }
+
+ public void setProgrGb(String progrGb) {
+ this.progrGb = progrGb;
+ }
+
+ public String getProgrUrl() {
+ return progrUrl;
+ }
+
+ public void setProgrUrl(String progrUrl) {
+ this.progrUrl = progrUrl;
+ }
+
+ public String getMenuGb() {
+ return menuGb;
+ }
+
+ public void setMenuGb(String menuGb) {
+ this.menuGb = menuGb;
+ }
+
+ public String getMenuNo() {
+ return menuNo;
+ }
+
+ public void setMenuNo(String menuNo) {
+ this.menuNo = menuNo;
+ }
+
+ public String getUpperMenuNo() {
+ return upperMenuNo;
+ }
+
+ public void setUpperMenuNo(String upperMenuNo) {
+ this.upperMenuNo = upperMenuNo;
+ }
+
+ public String getSysGroupNm() {
+ return sysGroupNm;
+ }
+
+ public void setSysGroupNm(String sysGroupNm) {
+ this.sysGroupNm = sysGroupNm;
+ }
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/menu/service/MenuTreeVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/autho/web/AuthoController.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/autho/web/AuthoController.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/autho/web/AuthoController.java (revision 10)
@@ -0,0 +1,306 @@
+package egovframework.com.menu.autho.web;
+
+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.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.ResponseBody;
+import org.springmodules.validation.commons.DefaultBeanValidator;
+
+import com.google.gson.Gson;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.EgovMessageSource;
+import egovframework.com.cmm.service.EgovCmmUseService;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.menu.autho.service.AuthoInfoVO;
+import egovframework.com.menu.autho.service.AuthoService;
+import egovframework.com.menu.program.service.MenuInfoVO;
+import egovframework.com.sym.mnu.mcm.service.EgovMenuCreateManageService;
+import egovframework.com.uss.umt.service.EgovMberManageService;
+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창이 제일 먼저 뜨는것 수정 : 출력메시지 주석처리
+ * </pre>
+ */
+
+@Controller
+public class AuthoController {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(AuthoController.class);
+
+ /* Validator */
+ @Autowired
+ private DefaultBeanValidator beanValidator;
+ /** EgovPropertyService */
+ @Resource(name = "propertiesService")
+ protected EgovPropertyService propertiesService;
+
+ /** EgovMessageSource */
+ @Resource(name="egovMessageSource")
+ EgovMessageSource egovMessageSource;
+
+ @Resource(name = "EgovCmmUseService")
+ private EgovCmmUseService cmmUseService;
+
+ @Resource(name = "authoService")
+ private AuthoService authoService;
+
+ /** EgovMenuManageService */
+ @Resource(name = "meunCreateManageService")
+ private EgovMenuCreateManageService menuCreateManageService;
+
+ /** mberManageService */
+ @Resource(name = "mberManageService")
+ private EgovMberManageService mberManageService;
+
+ /**
+ * *메뉴생성목록을 조회한다.
+ *
+ * @param searchVO
+ * ComDefaultVO
+ * @return 출력페이지정보 "/menu/autho/EgovMenuCreatManageSelect.do"
+ * @exception Exception
+ */
+ @RequestMapping(value = "/menu/autho/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 EgovUserDetailsHelper.getLoginPage();
+ }
+ // 내역 조회
+ /** 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 = authoService.selectUsrByPk(searchVO);
+ if (IDcnt == 0) {
+ resultMsg = egovMessageSource.getMessage("info.nodata.msg");
+ } else {
+ /* AuthorCode 검색 */
+ AuthoInfoVO vo = new AuthoInfoVO();
+ vo = authoService.selectAuthorByUsr(searchVO);
+ searchVO.setSearchKeyword(vo.getAuthorCode());
+ }
+ }
+ List<?> list_menumanage = authoService.selectMenuCreatManagList(searchVO);
+ model.addAttribute("list_menumanage", list_menumanage);
+
+ int totCnt = authoService.selectMenuCreatManagTotCnt(searchVO);
+ paginationInfo.setTotalRecordCount(totCnt);
+ model.addAttribute("paginationInfo", paginationInfo);
+ model.addAttribute("resultMsg", resultMsg);
+ return ".adminLayout/메뉴권한관리/com/menu/autho/EgovMenuCreatManage";
+ }
+
+ /**
+ * 프로그램 리스트를 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "/menu/autho/authoManage"
+ * @exception Exception
+ */
+ @RequestMapping(value="/menu/autho/authoManage.do")
+ public String selectProgrmList(
+ @ModelAttribute("authoInfoVO") AuthoInfoVO authoInfoVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+
+ List<MenuInfoVO> menuInfoList = authoService.selectMenuInfoList();
+ model.addAttribute("menuInfoList", menuInfoList);
+
+ List<AuthoInfoVO> authoInfoList = authoService.selectAuthoInfoList(authoInfoVO);
+ model.addAttribute("authoInfoList", authoInfoList);
+
+ model.addAttribute("resultVO", authoInfoVO);
+
+ ComDefaultVO vo = new ComDefaultVO();
+ vo.setPagingAt(false);
+ List<?> list_menumanage = authoService.selectMenuCreatManagList(vo);
+ model.addAttribute("authoList", list_menumanage);
+
+ return ".adminLayout/메뉴권한관리/com/menu/autho/EgovMenuAutoCreat";
+ }
+
+ /**
+ * 메뉴정보에 대한 권한 설정
+ * @param menuInfoVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/menu/autho/insertAuthoInfo.do", produces="application/text; charset=utf8")
+ @ResponseBody
+ public String insertAuthoInfo(
+ @ModelAttribute("authoInfoVO") AuthoInfoVO authoInfoVO,
+ ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated ();
+ if (!isAuthenticated) {
+ return "redirect:/uat/uia/egovLoginUsr.do";
+ }
+
+ //메뉴 추가 등록
+ authoService.insertAuthoInfo(authoInfoVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+ //메뉴번호 리턴
+ map.put ("result", "SUCCESS");
+ Gson gson = new Gson();
+ return gson.toJson (map);
+ }
+
+ /**
+ * 메뉴정보에 대한 사용자 권한 설정
+ * @param menuInfoVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/menu/autho/insertUserAuthoInfo.do", produces="application/text; charset=utf8")
+ @ResponseBody
+ public String insertUserAuthoInfo(
+ @ModelAttribute("authoInfoVO") AuthoInfoVO authoInfoVO,
+ ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated ();
+ if (!isAuthenticated) {
+ return "redirect:/uat/uia/egovLoginUsr.do";
+ }
+
+ //메뉴 추가 등록
+ authoService.insertUserAuthoInfo(authoInfoVO);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+ //메뉴번호 리턴
+ map.put ("result", "SUCCESS");
+ Gson gson = new Gson();
+ return gson.toJson (map);
+ }
+
+ /**
+ * 프로그램 리스트를 조회한다.
+ * @param searchVO ComDefaultVO
+ * @return 출력페이지정보 "/menu/autho/userAuthoManage"
+ * @exception Exception
+ */
+ @RequestMapping(value="/menu/autho/userAuthoManage.do")
+ public String selectUserProgrmList(
+ @ModelAttribute("authoInfoVO") AuthoInfoVO authoInfoVO,
+ ModelMap model)
+ throws Exception {
+ // 0. Spring Security 사용자권한 처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated();
+ if(!isAuthenticated) {
+ model.addAttribute("message", egovMessageSource.getMessage("fail.common.login"));
+ return EgovUserDetailsHelper.getLoginPage();
+ }
+
+ List<MenuInfoVO> menuInfoList = authoService.selectMenuInfoList();
+ model.addAttribute("menuInfoList", menuInfoList);
+
+ model.addAttribute("resultVO", authoInfoVO);
+
+ return ".adminLayout/메뉴권한관리/com/menu/autho/EgovMenuUserCreat";
+ }
+
+ /**
+ * 메뉴권한에 대한 사용자 정보 가져오기
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/menu/autho/selectUserInfo.do", produces="application/json; charset=utf8")
+ @ResponseBody
+ public String insertAuthoInfo(
+ ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated ();
+ if (!isAuthenticated) {
+ return "redirect:/uat/uia/egovLoginUsr.do";
+ }
+
+ //메뉴 추가 등록
+ List<?> userList = authoService.selectUserList();
+
+ //메뉴번호 리턴
+ Gson gson = new Gson();
+ return gson.toJson (userList);
+ }
+
+ /**
+ * 권한별 메뉴 권한정보 조회
+ * @param authoInfoVO
+ * @param model
+ * @return
+ * @throws Exception
+ */
+ @RequestMapping(value="/menu/autho/selectUserAuthoInfo.do", produces="application/text; charset=utf8")
+ @ResponseBody
+ public String selectUserAuthoInfo(
+ @ModelAttribute("authoInfoVO") AuthoInfoVO authoInfoVO,
+ ModelMap model) throws Exception {
+
+ // 미인증 사용자에 대한 보안처리
+ Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated ();
+ if (!isAuthenticated) {
+ return "redirect:/uat/uia/egovLoginUsr.do";
+ }
+
+ //메뉴 추가 등록
+ List<AuthoInfoVO> authoInfoList = authoService.selectAuthoInfoList(authoInfoVO);
+
+ //메뉴번호 리턴
+ Gson gson = new Gson();
+ return gson.toJson (authoInfoList);
+ }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/java/egovframework/com/menu/autho/web/AuthoController.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/autho/service/impl/AuthoServiceImpl.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/autho/service/impl/AuthoServiceImpl.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/autho/service/impl/AuthoServiceImpl.java (revision 10)
@@ -0,0 +1,109 @@
+package egovframework.com.menu.autho.service.impl;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.stereotype.Service;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.LoginVO;
+import egovframework.com.cmm.util.EgovUserDetailsHelper;
+import egovframework.com.menu.autho.service.AuthoInfoVO;
+import egovframework.com.menu.autho.service.AuthoService;
+import egovframework.com.menu.program.service.MenuInfoVO;
+import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
+
+@Service("authoService")
+public class AuthoServiceImpl extends EgovAbstractServiceImpl implements AuthoService {
+ @Resource(name = "authoDAO")
+ private AuthoDAO authoDAO;
+
+ @Resource(name = "egovAuthoListIdGnrService")
+ private EgovIdGnrService egovAuthoListIdGnrService;
+
+ @Override
+ public List<MenuInfoVO> selectMenuInfoList() throws Exception {
+ // TODO Auto-generated method stub
+ return authoDAO.selectMenuInfoList();
+ }
+
+ @Override
+ @CacheEvict(value="sessionMenu", allEntries = true)
+ public void insertAuthoInfo(AuthoInfoVO authoInfoVO) throws Exception {
+ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+ //권한에 대한 메뉴정보 권한 삭제
+ authoDAO.deleteAuthoInfo(authoInfoVO);
+ for(AuthoInfoVO vo : authoInfoVO.getAuthoInfoList()) {
+ vo.setAuthorSeq(egovAuthoListIdGnrService.getNextStringId());
+ vo.setFrstRegisterId(user.getUniqId());
+ authoDAO.insertAuthoInfo(vo);
+ }
+ }
+
+ @Override
+ @CacheEvict(value="sessionMenu", allEntries = true)
+ public void insertUserAuthoInfo(AuthoInfoVO authoInfoVO) throws Exception {
+ LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser();
+ //권한에 대한 메뉴정보 권한 삭제
+ for(AuthoInfoVO list : authoInfoVO.getAuthoInfoList()) {
+ authoDAO.deleteAuthoInfo(list);
+
+ if (list.getAuthoInfoList() != null) {
+ for(AuthoInfoVO vo : list.getAuthoInfoList()) {
+ vo.setAuthorSeq(egovAuthoListIdGnrService.getNextStringId());
+ vo.setFrstRegisterId(user.getUniqId());
+ authoDAO.insertAuthoInfo(vo);
+ }
+ }
+ }
+ }
+
+ @Override
+ public List<AuthoInfoVO> selectAuthoInfoList(AuthoInfoVO authoInfoVO) throws Exception {
+ return authoDAO.selectAuthoInfoList(authoInfoVO);
+ }
+
+ @Override
+ public List<?> selectUserList() throws Exception {
+ return authoDAO.selectUserList();
+ }
+
+ @Override
+ public int selectUsrByPk(ComDefaultVO vo) throws Exception {
+ return authoDAO.selectUsrByPk(vo);
+ }
+
+ @Override
+ public AuthoInfoVO selectAuthorByUsr(ComDefaultVO vo) throws Exception {
+ // TODO Auto-generated method stub
+ return authoDAO.selectAuthorByUsr(vo);
+ }
+
+ /**
+ * 메뉴생성관리 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuCreatManagList(ComDefaultVO vo) throws Exception {
+ return authoDAO.selectMenuCreatManagList(vo);
+ }
+
+ /**
+ * 메뉴생성관리 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectMenuCreatManagTotCnt(ComDefaultVO vo) throws Exception {
+ return authoDAO.selectMenuCreatManagTotCnt(vo);
+ }
+
+ @Override
+ public List<MenuInfoVO> selectMenuList() throws Exception {
+ return authoDAO.selectMenuList();
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/autho/service/impl/AuthoServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/autho/service/impl/AuthoDAO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/autho/service/impl/AuthoDAO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/autho/service/impl/AuthoDAO.java (revision 10)
@@ -0,0 +1,109 @@
+package egovframework.com.menu.autho.service.impl;
+
+import java.util.List;
+
+import org.springframework.stereotype.Repository;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.cmm.service.impl.EgovComAbstractDAO;
+import egovframework.com.menu.autho.service.AuthoInfoVO;
+import egovframework.com.menu.program.service.MenuInfoVO;
+
+@Repository("authoDAO")
+public class AuthoDAO extends EgovComAbstractDAO {
+
+ /**
+ * 메뉴 정보 삭제
+ * @param menuInfoVo
+ * @throws Exception
+ */
+ public List<MenuInfoVO> selectMenuInfoList () throws Exception {
+ return selectList ("MenuAuthoDAO.selectMenuInfo");
+ }
+
+ /**
+ * 권한별 메뉴정보 권한 삭제
+ * @param authoInfoVO
+ * @throws Exception
+ */
+ public void deleteAuthoInfo (AuthoInfoVO authoInfoVO) throws Exception {
+ delete ("MenuAuthoDAO.deleteAuthoInfo", authoInfoVO);
+ }
+
+ /**
+ * 권한별 메뉴정보 권한 등록
+ * @param authoInfoVO
+ * @throws Exception
+ */
+ public void insertAuthoInfo (AuthoInfoVO authoInfoVO) throws Exception {
+ insert ("MenuAuthoDAO.insertAuthoInfo", authoInfoVO);
+ }
+
+ /**
+ * 권한별 메뉴 권한정보 조회
+ * @param authoInfoVO
+ * @return
+ * @throws Exception
+ */
+ public List<AuthoInfoVO> selectAuthoInfoList (AuthoInfoVO authoInfoVO) throws Exception {
+ return selectList ("MenuAuthoDAO.selectAuthoInfoList", authoInfoVO);
+ }
+
+ /**
+ * 사용자별 권한 선택을 위한 사용자 조회
+ * @return
+ * @throws Exception
+ */
+ public List<?> selectUserList () throws Exception {
+ return selectList ("MenuAuthoDAO.selectUserList");
+ }
+
+ /**
+ * ID 존재여부를 조회
+ * @param vo MenuManageVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectUsrByPk(ComDefaultVO vo) throws Exception{
+ return (Integer)selectOne("MenuAuthoDAO.selectUsrByPk", vo);
+ }
+
+ /**
+ * ID에 대한 권한코드를 조회
+ * @param vo MenuCreatVO
+ * @return AuthoInfoVO
+ * @exception Exception
+ */
+ public AuthoInfoVO selectAuthorByUsr(ComDefaultVO vo) throws Exception{
+ return selectOne("MenuAuthoDAO.selectAuthorByUsr", vo);
+ }
+
+ /**
+ * 메뉴생성관리 내역을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuCreatManagList(ComDefaultVO vo) throws Exception{
+ return selectList ("MenuAuthoDAO.selectMenuCreatManageList_D", vo);
+ }
+
+ /**
+ * 메뉴생성관리 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectMenuCreatManagTotCnt(ComDefaultVO vo) {
+ return (Integer)selectOne("MenuAuthoDAO.selectMenuCreatManageTotCnt_S", vo);
+ }
+
+ /**
+ * 메뉴 조회
+ * @return
+ * @throws Exception
+ */
+ public List<MenuInfoVO> selectMenuList () throws Exception {
+ return selectList ("MenuAuthoDAO.selectMenuList");
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/autho/service/impl/AuthoDAO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoInfoVO.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoInfoVO.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoInfoVO.java (revision 10)
@@ -0,0 +1,38 @@
+package egovframework.com.menu.autho.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.ibatis.type.Alias;
+
+/**
+ * 메뉴 권한 정보 객체
+ *
+ * @author Jun
+ */
+@SuppressWarnings("serial")
+@Alias("MenuAuthoInfo")
+public class AuthoInfoVO extends AuthoInfo {
+ /**
+ * 메뉴권한 정보 리스트
+ */
+ private List<AuthoInfoVO> authoInfoList;
+
+ public List<AuthoInfoVO> getAuthoInfoList() {
+ if (this.authoInfoList == null) {
+ return null;
+ } else {
+ List<AuthoInfoVO> list = this.authoInfoList;
+ return list;
+ }
+ }
+
+ public void setAuthoInfoList(List<AuthoInfoVO> authoInfoList) {
+ if (authoInfoList != null) {
+ this.authoInfoList = new ArrayList<>();
+ for (AuthoInfoVO vo : authoInfoList) {
+ this.authoInfoList.add(vo);
+ }
+ }
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoInfoVO.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoService.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoService.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoService.java (revision 10)
@@ -0,0 +1,90 @@
+package egovframework.com.menu.autho.service;
+
+import java.util.List;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.menu.program.service.MenuInfoVO;
+
+/**
+ * 권한정보관리 서비스
+ *
+ * @author Song YoungHo
+ */
+public interface AuthoService {
+ /**
+ * 프로그램 메뉴정보 삭제
+ *
+ * @param menuInfoVo
+ * @return
+ * @throws Exception
+ */
+ public List<MenuInfoVO> selectMenuInfoList() throws Exception;
+
+ /**
+ * 메뉴정보에 대한 권한 설정
+ * @param authoInfoVO
+ * @throws Exception
+ */
+ public void insertAuthoInfo(AuthoInfoVO authoInfoVO) throws Exception;
+
+ /**
+ * 메뉴정보에 대한 사용자 권한 설정
+ * @param authoInfoVO
+ * @throws Exception
+ */
+ public void insertUserAuthoInfo(AuthoInfoVO authoInfoVO) throws Exception;
+
+ /**
+ * 권한별 메뉴 권한정보 조회
+ * @param authoInfoVO
+ * @return
+ * @throws Exception
+ */
+ public List<AuthoInfoVO> selectAuthoInfoList(AuthoInfoVO authoInfoVO) throws Exception;
+
+ /**
+ * 사용자별 권한 선택을 위한 사용자 조회
+ * @return
+ * @throws Exception
+ */
+ public List<?> selectUserList() throws Exception;
+
+ /**
+ * ID 존재여부를 조회
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectUsrByPk(ComDefaultVO vo) throws Exception;
+
+ /**
+ * ID에 대한 권한코드를 조회
+ * @param vo ComDefaultVO
+ * @return MenuCreatVO
+ * @exception Exception
+ */
+ public AuthoInfoVO selectAuthorByUsr(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 메뉴생성관리 목록을 조회
+ * @param vo ComDefaultVO
+ * @return List
+ * @exception Exception
+ */
+ public List<?> selectMenuCreatManagList(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 메뉴생성관리 총건수를 조회한다.
+ * @param vo ComDefaultVO
+ * @return int
+ * @exception Exception
+ */
+ public int selectMenuCreatManagTotCnt(ComDefaultVO vo) throws Exception;
+
+ /**
+ * 메뉴 조회
+ * @return
+ * @throws Exception
+ */
+ public List<MenuInfoVO> selectMenuList() throws Exception;
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoService.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoInfo.java
===================================================================
--- base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoInfo.java (nonexistent)
+++ base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoInfo.java (revision 10)
@@ -0,0 +1,88 @@
+package egovframework.com.menu.autho.service;
+
+import org.apache.ibatis.type.Alias;
+
+import egovframework.com.cmm.ComDefaultVO;
+import egovframework.com.menu.program.service.MenuInfoVO;
+import egovframework.com.menu.program.service.MenuProgramInfoVO;
+
+/**
+ * 메뉴 권한 정보 객체
+ *
+ * @author Jun
+ */
+@SuppressWarnings("serial")
+@Alias("AuthoInfo")
+public class AuthoInfo extends ComDefaultVO {
+ /**
+ * 메뉴 권한 시퀀스
+ */
+ private String authorSeq;
+ /**
+ * 권한 코드
+ */
+ private String authorCode;
+ /**
+ * 권한 사용자 ID
+ */
+ private String userId;
+ /**
+ * 메뉴 번호
+ */
+ private MenuInfoVO menuNo;
+ /**
+ * 프로그램 URL
+ */
+ private MenuProgramInfoVO progrUrl;
+ /**
+ * 최초등록자 아이디
+ */
+ private String frstRegisterId = "";
+ /**
+ * 최초등록시점
+ */
+ private String frstRegisterPnttm = "";
+
+ public String getAuthorSeq() {
+ return authorSeq;
+ }
+ public void setAuthorSeq(String authorSeq) {
+ this.authorSeq = authorSeq;
+ }
+ public String getAuthorCode() {
+ return authorCode;
+ }
+ public void setAuthorCode(String authorCode) {
+ this.authorCode = authorCode;
+ }
+ public String getUserId() {
+ return userId;
+ }
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+ public MenuInfoVO getMenuNo() {
+ return menuNo;
+ }
+ public void setMenuNo(MenuInfoVO menuNo) {
+ this.menuNo = menuNo;
+ }
+ public MenuProgramInfoVO getProgrUrl() {
+ return progrUrl;
+ }
+ public void setProgrUrl(MenuProgramInfoVO progrUrl) {
+ this.progrUrl = progrUrl;
+ }
+ public String getFrstRegisterId() {
+ return frstRegisterId;
+ }
+ public void setFrstRegisterId(String frstRegisterId) {
+ this.frstRegisterId = frstRegisterId;
+ }
+ public String getFrstRegisterPnttm() {
+ return frstRegisterPnttm;
+ }
+ public void setFrstRegisterPnttm(String frstRegisterPnttm) {
+ this.frstRegisterPnttm = frstRegisterPnttm;
+ }
+}
Property changes on: base3.10/src/main/java/egovframework/com/menu/autho/service/AuthoInfo.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/site/SystemManage_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/site/SystemManage_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/site/SystemManage_SQL_postgres.xml (revision 10)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2020.04.14 김기윤 최초생성
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="SystemManageDAO">
+ <!-- 시스템관리 맵 -->
+ <resultMap id="systemMap" type="SystemVO">
+ <id property="sysId" column="SYS_ID"/>
+ <result property="sysNm" column="SYS_NM"/>
+ <result property="coLogo" column="CO_LOGO"/>
+ <result property="coAddr" column="CO_ADDR"/>
+ <result property="coTel" column="CO_TEL"/>
+ <result property="coFax" column="CO_FAX"/>
+ <result property="copyright" column="COPYRIGHT"/>
+ <result property="coFavicon" column="CO_FAVICON"/>
+ <result property="inspectAt" column="INSPECT_AT"/>
+ </resultMap>
+
+ <!-- 시스템 기본 정보 등록 -->
+ <insert id="insertSystemInfo" parameterType="SystemVO">
+ INSERT INTO COMTNSYSTEMINFO (
+ SYS_ID,
+ SYS_NM,
+ CO_LOGO,
+ CO_ADDR,
+ CO_TEL,
+ CO_FAX,
+ COPYRIGHT,
+ CO_FAVICON,
+ INSPECT_AT
+ ) VALUES (
+ #{sysId},
+ #{sysNm},
+ #{coLogo},
+ #{coAddr},
+ #{coTel},
+ #{coFax},
+ #{copyright},
+ #{coFavicon},
+ #{inspectAt}
+ )
+ </insert>
+
+ <!-- 시스템 기본 정보 조회 -->
+ <select id="selectSystemInfo" parameterType="SystemVO" resultMap="systemMap">
+ SELECT
+ SYS_ID,
+ SYS_NM,
+ fnconvertfileid(CO_LOGO) AS CO_LOGO,
+ CO_ADDR,
+ CO_TEL,
+ CO_FAX,
+ COPYRIGHT,
+ fnconvertfileid(CO_FAVICON) AS CO_FAVICON,
+ INSPECT_AT
+ FROM
+ COMTNSYSTEMINFO
+ WHERE
+ SYS_ID = #{sysId}
+ </select>
+
+ <!-- 시스템 기본 정보 수정 -->
+ <update id="updateSystemInfo" parameterType="SystemVO">
+ UPDATE COMTNSYSTEMINFO SET
+ SYS_NM = #{sysNm},
+ CO_LOGO = #{coLogo},
+ CO_ADDR = #{coAddr},
+ CO_TEL = #{coTel},
+ CO_FAX = #{coFax},
+ COPYRIGHT = #{copyright},
+ CO_FAVICON = #{coFavicon},
+ INSPECT_AT = #{inspectAt}
+ WHERE
+ SYS_ID = #{sysId}
+ </update>
+
+ <!-- 시스템 기본 정보 초기화 -->
+ <delete id="deleteSystemInfo" parameterType="SystemVO">
+ DELETE FROM
+ COMTNSYSTEMINFO
+ WHERE
+ SYS_ID = #{sysId}
+ </delete>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/site/SystemManage_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/site/SystemManage_SQL_mysql.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/site/SystemManage_SQL_mysql.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/site/SystemManage_SQL_mysql.xml (revision 10)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 수정일 수정자 수정내용
+ ========= ======= =================================================
+ 2020.04.14 김기윤 최초생성
+-->
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="SystemManageDAO">
+ <!-- 시스템관리 맵 -->
+ <resultMap id="systemMap" type="SystemVO">
+ <id property="sysId" column="SYS_ID"/>
+ <result property="sysNm" column="SYS_NM"/>
+ <result property="coLogo" column="CO_LOGO"/>
+ <result property="coAddr" column="CO_ADDR"/>
+ <result property="coTel" column="CO_TEL"/>
+ <result property="coFax" column="CO_FAX"/>
+ <result property="copyright" column="COPYRIGHT"/>
+ <result property="coFavicon" column="CO_FAVICON"/>
+ <result property="inspectAt" column="INSPECT_AT"/>
+ </resultMap>
+
+ <!-- 시스템 기본 정보 등록 -->
+ <insert id="insertSystemInfo" parameterType="SystemVO">
+ INSERT INTO COMTNSYSTEMINFO (
+ SYS_ID,
+ SYS_NM,
+ CO_LOGO,
+ CO_ADDR,
+ CO_TEL,
+ CO_FAX,
+ COPYRIGHT,
+ CO_FAVICON,
+ INSPECT_AT
+ ) VALUES (
+ #{sysId},
+ #{sysNm},
+ #{coLogo},
+ #{coAddr},
+ #{coTel},
+ #{coFax},
+ #{copyright},
+ #{coFavicon},
+ #{inspectAt}
+ )
+ </insert>
+
+ <!-- 시스템 기본 정보 조회 -->
+ <select id="selectSystemInfo" parameterType="SystemVO" resultMap="systemMap">
+ SELECT
+ SYS_ID,
+ SYS_NM,
+ CO_LOGO,
+ CO_ADDR,
+ CO_TEL,
+ CO_FAX,
+ COPYRIGHT,
+ CO_FAVICON,
+ INSPECT_AT
+ FROM
+ COMTNSYSTEMINFO
+ WHERE
+ SYS_ID = #{sysId}
+ </select>
+
+ <!-- 시스템 기본 정보 수정 -->
+ <update id="updateSystemInfo" parameterType="SystemVO">
+ UPDATE COMTNSYSTEMINFO SET
+ SYS_NM = #{sysNm},
+ CO_LOGO = #{coLogo},
+ CO_ADDR = #{coAddr},
+ CO_TEL = #{coTel},
+ CO_FAX = #{coFax},
+ COPYRIGHT = #{copyright},
+ CO_FAVICON = #{coFavicon},
+ INSPECT_AT = #{inspectAt}
+ WHERE
+ SYS_ID = #{sysId}
+ </update>
+
+ <!-- 시스템 기본 정보 초기화 -->
+ <delete id="deleteSystemInfo" parameterType="SystemVO">
+ DELETE FROM
+ COMTNSYSTEMINFO
+ WHERE
+ SYS_ID = #{sysId}
+ </delete>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/site/SystemManage_SQL_mysql.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 (revision 9)
+++ base3.10/src/main/resources/egovframework/mapper/com/uat/uia/EgovLoginUsr_SQL_postgres.xml (revision 10)
@@ -20,7 +20,8 @@
<result property="password" column="password"/>
<result property="userSe" column="userSe"/>
<result property="orgnztId" column="orgnztId"/>
- <result property="uniqId" column="uniqId"/>
+ <result property="uniqId" column="uniqId"/>
+ <result property="authorCode" column="authorCode"/>
</resultMap>
<!-- 아이디 찾기를 위한 resultMap -->
@@ -38,52 +39,58 @@
<!-- 일반회원 -->
<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
+ SELECT A.mber_id AS id
+ , A.mber_nm AS name
+ , A.ihidNum AS ihidNum
+ , A.password AS password
+ , A.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'
+ , A.esntl_id AS uniqId
+ , B.author_code as authorCode
+ FROM COMTNGNRLMBER A
+ INNER JOIN COMTNEMPLYRSCRTYESTBS B ON A.esntl_id = B.scrty_dtrmn_trget_id
+ WHERE A.mber_id = #{id}
+ AND A.password = #{password}
+ AND A.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
+ SELECT A.entrprs_mber_id AS id
+ , A.cmpny_nm AS name
+ , A.entrprs_mber_password AS password
+ , A.bizrno AS ihidNum
+ , A.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'
+ , A.esntl_id AS uniqId
+ , B.author_code as authorCode
+ FROM COMTNENTRPRSMBER A
+ INNER JOIN COMTNEMPLYRSCRTYESTBS B ON A.esntl_id = B.scrty_dtrmn_trget_id
+ WHERE A.entrprs_mber_id = #{id}
+ AND A.entrprs_mber_password = #{password}
+ AND A.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
+ SELECT A.emplyr_id AS id
+ , A.user_nm AS name
+ , A.password AS password
+ , A.ihidnum AS ihidNum
+ , A.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'
+ , A.orgnzt_id AS orgnztId
+ , A.esntl_id AS uniqId
+ , B.author_code as authorCode
+ FROM COMTNEMPLYRINFO A
+ INNER JOIN COMTNEMPLYRSCRTYESTBS B ON A.esntl_id = B.scrty_dtrmn_trget_id
+ WHERE A.emplyr_id = #{id}
+ AND A.password = #{password}
+ AND A.emplyr_sttus_code = 'P'
<!--
Index: base3.10/src/main/resources/egovframework/mapper/com/menu/Menu_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/menu/Menu_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/menu/Menu_SQL_postgres.xml (revision 10)
@@ -0,0 +1,280 @@
+<?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="MenuDAO">
+ <!-- 메뉴트리 맵 -->
+ <resultMap id="menuTreeMap" type="MenuTreeVO">
+ <id property="id" column="ID"/>
+ <result property="menuNo" column="MENU_NO"/>
+ <result property="upperMenuNo" column="UPPER_MENU_NO"/>
+ <result property="pId" column="PID"/>
+ <result property="name" column="MENU_NM"/>
+ <result property="menuOrdr" column="MENU_ORDR"/>
+ <result property="relateImage" column="RELATE_IMAGE"/>
+ <result property="progrGb" column="PROGR_GB"/>
+ <result property="menuGb" column="MENU_GB"/>
+ <result property="progrUrl" column="PROGR_URL"/>
+ </resultMap>
+
+ <!-- 메뉴 맵 -->
+ <resultMap id="menuMap" type="MenuVO">
+ <id property="menuNo" column="MENU_NO"/>
+ <result property="upperMenuNo" column="UPPER_MENU_NO"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="menuOrdr" column="MENU_ORDR"/>
+ <result property="menuDc" column="MENU_DC"/>
+ <result property="relateImage" column="RELATE_IMAGE"/>
+ <result property="progrGb" column="PROGR_GB"/>
+ <result property="menuGb" column="MENU_GB"/>
+ <result property="progrUrl" column="PROGR_URL"/>
+ <result property="childCnt" column="CHILD_CNT"/>
+ </resultMap>
+
+ <!-- 트리 생성을 위한 메뉴리스트 -->
+ <select id="selectMenuTreeList" resultMap="menuTreeMap">
+ SELECT A.MENU_NO AS ID
+ , A.MENU_NO
+ , A.UPPER_MENU_NO AS PID
+ , A.UPPER_MENU_NO
+ , A.MENU_NM
+ , A.MENU_ORDR
+ , A.RELATE_IMAGE
+ , A.PROGR_GB
+ , A.MENU_GB
+ FROM TNMENUINFO A
+ UNION ALL
+ SELECT 'ROOT'
+ , 'ROOT'
+ , NULL
+ , NULL
+ , 'ROOT'
+ , 0
+ , ''
+ , ''
+ , ''
+ ORDER BY MENU_ORDR
+ </select>
+
+ <!-- 모든 메뉴 리스트 -->
+ <select id="selectAllMenuList" parameterType="MenuVO" resultMap="menuMap">
+ SELECT DISTINCT A.MENU_NO
+ , A.MENU_NM
+ , A.UPPER_MENU_NO
+ , A.MENU_ORDR
+ , A.MENU_GB
+ -- , B.PROGR_URL
+ , FNCMENUDOWNURL(A.MENU_NO, #{userId}) AS PROGR_URL
+ FROM TNMENUINFO A
+ , TNMENUPROGRAMINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.USE_YN = 'Y'
+ AND B.DEFAULT_YN = 'Y'
+ ORDER BY A.MENU_ORDR
+ </select>
+
+ <!-- 권한에 따른 메뉴리스트 -->
+ <select id="selectSessionMenuList" parameterType="MenuVO" resultMap="menuMap">
+ SELECT DISTINCT A.MENU_NO
+ , A.MENU_NM
+ , A.UPPER_MENU_NO
+ , A.MENU_ORDR
+ , A.MENU_GB
+ --, B.PROGR_URL
+ , FNCMENUDOWNURL(A.MENU_NO, #{userId}) AS PROGR_URL
+ , (SELECT COUNT(*) FROM TNMENUINFO Z WHERE A.MENU_NO = Z.UPPER_MENU_NO) AS CHILD_CNT
+ FROM TNMENUINFO A
+ , TNMENUPROGRAMINFO B
+ , TNMENUAUTHOINFO C
+ WHERE A.MENU_NO = B.MENU_NO
+ AND B.DEFAULT_YN = 'Y'
+ AND B.MENU_NO = C.MENU_NO
+ AND B.PROGR_URL = C.PROGR_URL
+ AND (
+ <choose>
+ <when test="authorCodeList != null and authorCodeList != ''">
+ C.AUTHOR_CODE IN
+ <foreach collection="authorCodeList" item="code" open="(" close=")" separator=",">
+ #{code}
+ </foreach>
+ <if test="userId != null and userId != ''">
+ OR C.USER_ID = #{userId}
+ </if>
+ </when>
+ <otherwise>
+ C.AUTHOR_CODE = #{authorCode}
+ <if test="userId != null and userId != ''">
+ OR C.USER_ID = #{userId}
+ </if>
+ </otherwise>
+ </choose>
+ )
+ ORDER BY A.MENU_ORDR
+ </select>
+
+ <!-- 권한 체크 대상인지 조회 -->
+ <select id="selectMenuProgramCnt" parameterType="MenuVO" resultType="int">
+ SELECT COUNT(*)
+ FROM TNMENUPROGRAMINFO
+ WHERE PROGR_URL = #{progrUrl}
+ </select>
+
+ <!-- URL로 현재 메뉴 정보 조회 -->
+ <select id="selectMenuProgram" parameterType="MenuVO" resultType="MenuVO">
+ SELECT a.menu_no
+ , a.progr_url
+ , a.progr_url_nm
+ , b.menu_nm
+ , b.menu_dc
+ , b.menu_gb
+ FROM TNMENUPROGRAMINFO a
+ INNER JOIN TNMENUINFO b ON a.menu_no = b.menu_no
+ WHERE a.PROGR_URL = #{progrUrl}
+ </select>
+
+ <!-- 권한 체크(롤 and uniqId 로그인ID 아님) -->
+ <select id="selectAuthoUrlCheck" parameterType="MenuVO" resultType="int">
+ SELECT COUNT(*)
+ FROM TNMENUINFO A
+ , TNMENUPROGRAMINFO B
+ , TNMENUAUTHOINFO C
+ WHERE A.MENU_NO = B.MENU_NO
+ AND B.MENU_NO = C.MENU_NO
+ AND B.PROGR_URL = C.PROGR_URL
+ AND (
+ <choose>
+ <when test="authorCodeList != null and authorCodeList != ''">
+ C.AUTHOR_CODE IN
+ <foreach collection="authorCodeList" item="code" open="(" close=")" separator=",">
+ #{code}
+ </foreach>
+ <if test="userId != null and userId != ''">
+ OR C.USER_ID = #{userId}
+ </if>
+ </when>
+ <otherwise>
+ C.AUTHOR_CODE = #{authorCode}
+ <if test="userId != null and userId != ''">
+ OR C.USER_ID = #{userId}
+ </if>
+ </otherwise>
+ </choose>
+ )
+ AND B.PROGR_URL = #{progrUrl}
+ </select>
+
+ <!-- URL의 상위 정보 데이터 -->
+ <select id="selectMenuNaviList" parameterType="MenuVO" resultMap="menuMap">
+ <![CDATA[
+ WITH RECURSIVE VIEW_MENU(MENU_NO, MENU_NM, MENU_DC, UPPER_MENU_NO, DEPTH, PATH, CYCLE) AS (
+ SELECT B.MENU_NO, B.MENU_NM, B.MENU_DC, B.UPPER_MENU_NO, 1, ARRAY[B.MENU_NO::TEXT], FALSE
+ FROM TNMENUPROGRAMINFO A, TNMENUINFO B
+ WHERE A.MENU_NO = B.MENU_NO
+ AND PROGR_URL = #{progrUrl}
+ UNION ALL
+ SELECT A.MENU_NO, A.MENU_NM, A.MENU_DC, A.UPPER_MENU_NO, B.DEPTH + 1, ARRAY_APPEND(B.PATH, A.MENU_NO::TEXT), A.MENU_NO = ANY(B.PATH)
+ FROM TNMENUINFO A, VIEW_MENU B
+ WHERE B.UPPER_MENU_NO = A.MENU_NO
+ AND NOT CYCLE
+ )
+ SELECT MENU_NO
+ , UPPER_MENU_NO
+ , MENU_NM
+ , MENU_DC
+ , fncmenudownurl(menu_no, #{userId}) AS progr_url
+ FROM VIEW_MENU
+ WHERE UPPER_MENU_NO <> 'ROOT'
+ ORDER BY DEPTH DESC
+ ]]>
+ </select>
+ <!-- URL에 해당하는 메뉴 depth의 데이터 목록 -->
+ <select id="selectMenuSameDepthList" parameterType="MenuVO" resultMap="menuMap">
+ SELECT DISTINCT B.menu_no
+ , fncmenudownurl(B.menu_no, #{userId}) AS PROGR_URL
+ , B.menu_nm
+ , B.menu_ordr
+ , B.upper_menu_no
+ FROM TNMENUPROGRAMINFO A
+ , (
+ SELECT A.MENU_NO
+ , A.MENU_NM
+ , A.MENU_ORDR
+ , B.UPPER_MENU_NO
+ FROM TNMENUINFO A
+ , (
+ SELECT B.UPPER_MENU_NO
+ FROM TNMENUPROGRAMINFO A
+ , TNMENUINFO B
+ WHERE A.PROGR_URL = #{progrUrl}
+ AND A.MENU_NO = B.MENU_NO
+ ) B
+ WHERE A.UPPER_MENU_NO = B.UPPER_MENU_NO
+ AND A.USE_YN = 'Y'
+ ) B
+ , TNMENUAUTHOINFO C
+ WHERE A.MENU_NO = B.MENU_NO
+ AND A.DEFAULT_YN = 'Y'
+ AND A.PROGR_URL = C.PROGR_URL
+ AND A.MENU_NO = C.MENU_NO
+ AND (
+ <choose>
+ <when test="authorCodeList != null and authorCodeList != ''">
+ C.AUTHOR_CODE IN
+ <foreach collection="authorCodeList" item="code" open="(" close=")" separator=",">
+ #{code}
+ </foreach>
+ <if test="userId != null and userId != ''">
+ OR C.USER_ID = #{userId}
+ </if>
+ </when>
+ <otherwise>
+ C.AUTHOR_CODE = #{authorCode}
+ <if test="userId != null and userId != ''">
+ OR C.USER_ID = #{userId}
+ </if>
+ </otherwise>
+ </choose>
+ )
+ ORDER BY B.MENU_ORDR
+ </select>
+
+ <!-- 권한에 따른 상위 메뉴 1건 -->
+ <select id="selectSessionMenuLimitOne" parameterType="MenuVO" resultMap="menuMap">
+ SELECT DISTINCT A.MENU_NO
+ , A.MENU_NM
+ , A.UPPER_MENU_NO
+ , A.MENU_ORDR
+ , A.MENU_GB
+ , FNCMENUDOWNURL(A.MENU_NO, #{userId}) AS PROGR_URL
+ FROM TNMENUINFO A
+ , TNMENUPROGRAMINFO B
+ , TNMENUAUTHOINFO C
+ WHERE A.MENU_NO = B.MENU_NO
+ AND B.DEFAULT_YN = 'Y'
+ AND B.MENU_NO = C.MENU_NO
+ AND B.PROGR_URL = C.PROGR_URL
+ AND A.UPPER_MENU_NO <![CDATA[<>]]> 'ROOT'
+ AND (
+ <choose>
+ <when test="authorCodeList != null and authorCodeList != ''">
+ C.AUTHOR_CODE IN
+ <foreach collection="authorCodeList" item="code" open="(" close=")" separator=",">
+ #{code}
+ </foreach>
+ <if test="userId != null and userId != ''">
+ OR C.USER_ID = #{userId}
+ </if>
+ </when>
+ <otherwise>
+ C.AUTHOR_CODE = #{authorCode}
+ <if test="userId != null and userId != ''">
+ OR C.USER_ID = #{userId}
+ </if>
+ </otherwise>
+ </choose>
+ )
+ <if test='menuGb != null and menuGb != ""'>
+ AND menu_gb = #{menuGb}
+ </if>
+ ORDER BY A.MENU_ORDR, A.MENU_NO
+ LIMIT 1
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/menu/Menu_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/menu/Autho_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/menu/Autho_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/menu/Autho_SQL_postgres.xml (revision 10)
@@ -0,0 +1,169 @@
+<?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="MenuAuthoDAO">
+
+ <!-- 권한정보 -->
+ <resultMap id="menuAuthoInfoMap" type="MenuAuthoInfo">
+ <id property="authorSeq" column="AUTHOR_SEQ"/>
+ <result property="authorCode" column="AUTHOR_CODE"/>
+ <result property="userId" column="USER_ID"/>
+ <association property="menuNo" javaType="MenuInfoVO">
+ <result property="menuNo" column="MENU_NO"/>
+ </association>
+ <association property="progrUrl" javaType="MenuProgramInfoVO">
+ <result property="progrUrl" column="PROGR_URL"/>
+ </association>
+ </resultMap>
+
+ <!-- 메뉴 및 URL 정보 조회 -->
+ <select id="selectMenuInfo" resultMap="ProgramDAO.menuInfoMap">
+ SELECT A.MENU_NO AS ID
+ , A.MENU_NO
+ , A.UPPER_MENU_NO AS PID
+ , A.UPPER_MENU_NO
+ , A.MENU_NM
+ , B.MENU_NO AS PRO_ID
+ , B.MENU_NO AS PRO_MENU_NO
+ , B.PROGR_URL
+ , B.PROGR_URL_NM
+ , B.DEFAULT_YN
+ FROM TNMENUINFO A
+ INNER JOIN TNMENUPROGRAMINFO B
+ ON B.MENU_NO = A.MENU_NO
+ ORDER BY A.MENU_ORDR
+ , (
+ CASE B.DEFAULT_YN WHEN 'Y' THEN 1
+ ELSE 2
+ END
+ )
+ </select>
+
+ <!-- 권한별 메뉴 권한정보 삭제 -->
+ <delete id="deleteAuthoInfo" parameterType="MenuAuthoInfo">
+ DELETE FROM TNMENUAUTHOINFO
+ WHERE 1 = 1
+ <choose>
+ <when test="authorCode != null and authorCode != ''">
+ AND AUTHOR_CODE = #{authorCode}
+ </when>
+ <otherwise>
+ AND MENU_NO = #{menuNo.menuNo}
+ AND PROGR_URL = #{progrUrl.progrUrl}
+ AND USER_ID IS NOT NULL
+ </otherwise>
+ </choose>
+ </delete>
+
+ <!-- 권한별 메뉴 권한정보 등록 -->
+ <insert id="insertAuthoInfo" parameterType="MenuAuthoInfo">
+ INSERT INTO TNMENUAUTHOINFO (
+ AUTHOR_SEQ
+ , AUTHOR_CODE
+ , MENU_NO
+ , PROGR_URL
+ , USER_ID
+ , FRST_REGISTER_ID
+ , FRST_REGIST_PNTTM
+ ) VALUES (
+ #{authorSeq}
+ , #{authorCode}
+ , #{menuNo.menuNo}
+ , #{progrUrl.progrUrl}
+ , #{userId}
+ , #{frstRegisterId}
+ , NOW()
+ )
+ </insert>
+
+ <!-- 권한별 메뉴 권한정보 조회 -->
+ <select id="selectAuthoInfoList" parameterType="MenuAuthoInfo" resultMap="menuAuthoInfoMap">
+ SELECT AUTHOR_SEQ
+ , AUTHOR_CODE
+ , USER_ID
+ , MENU_NO
+ , PROGR_URL
+ FROM TNMENUAUTHOINFO
+ WHERE 1 = 1
+ <choose>
+ <when test="authorCode != null and authorCode != ''">
+ AND AUTHOR_CODE = #{authorCode}
+ </when>
+ <otherwise>
+ AND MENU_NO = #{menuNo.menuNo}
+ AND PROGR_URL = #{progrUrl.progrUrl}
+ AND USER_ID IS NOT NULL
+ </otherwise>
+ </choose>
+ </select>
+
+ <!-- 사용자별 권한 선택을 위한 사용자 조회 -->
+ <select id="selectUserList" resultType="egovMap">
+ SELECT ESNTL_ID
+ , USER_ID
+ , USER_NM
+ FROM COMVNUSERMASTER
+ WHERE 1 = 1
+ </select>
+
+ <!-- ID 존재여부를 조회 -->
+ <select id="selectUsrByPk" parameterType="egovframework.com.cmm.ComDefaultVO" resultType="int">
+ <![CDATA[
+ select count(AUTHOR_CODE) from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+ ]]>
+ </select>
+
+ <!-- ID에 대한 권한코드를 조회 -->
+ <select id="selectAuthorByUsr" parameterType="egovframework.com.cmm.ComDefaultVO" resultType="MenuAuthoInfo">
+ <![CDATA[
+ select AUTHOR_CODE AS authorCode from COMTNEMPLYRSCRTYESTBS
+ where SCRTY_DTRMN_TRGET_ID =
+ (select ESNTL_ID from COMVNUSERMASTER
+ where user_id = #{searchKeyword} )
+ ]]>
+ </select>
+
+ <!-- 메뉴생성관리 목록을 조회 -->
+ <select id="selectMenuCreatManageList_D" parameterType="egovframework.com.cmm.ComDefaultVO" resultType="egovframework.rte.psl.dataaccess.util.EgovMap">
+ <![CDATA[
+ SELECT AUTHOR_CODE AS "authorCode",
+ AUTHOR_NM AS "authorNm",
+ AUTHOR_DC AS "authorDc",
+ AUTHOR_CREAT_DE AS "authorCreatDe",
+ (SELECT COUNT(B.AUTHOR_CODE)
+ FROM TNMENUAUTHOINFO B
+ WHERE B.AUTHOR_CODE = A.AUTHOR_CODE ) AS "chkYeoBu"
+ FROM COMTNAUTHORINFO A
+ WHERE A.AUTHOR_CODE like CONCAT('%', #{searchKeyword}, '%')
+ AND A.AUTHOR_CODE NOT IN ('IS_AUTHENTICATED_ANONYMOUSLY', 'IS_AUTHENTICATED_FULLY', 'IS_AUTHENTICATED_REMEMBERED')
+ ORDER BY AUTHOR_CREAT_DE DESC
+ ]]>
+ <if test="pagingAt == true">
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ </if>
+ </select>
+
+ <!-- 메뉴생성관리 총건수를 조회 -->
+ <select id="selectMenuCreatManageTotCnt_S" parameterType="egovframework.com.cmm.ComDefaultVO" resultType="int">
+ <![CDATA[
+ SELECT COUNT(AUTHOR_CODE) AS totcnt
+ FROM COMTNAUTHORINFO
+ WHERE AUTHOR_CODE like CONCAT('%', #{searchKeyword}, '%')
+ AND AUTHOR_CODE NOT IN ('IS_AUTHENTICATED_ANONYMOUSLY', 'IS_AUTHENTICATED_FULLY', 'IS_AUTHENTICATED_REMEMBERED')
+ ]]>
+ </select>
+
+ <!-- 메뉴 조회 -->
+ <select id="selectMenuList" resultMap="ProgramDAO.menuInfoMap">
+ SELECT A.MENU_NO AS ID
+ , A.MENU_NO
+ , A.UPPER_MENU_NO AS PID
+ , A.UPPER_MENU_NO
+ , A.MENU_NM
+ , A.PROGR_GB
+ FROM TNMENUINFO A
+ ORDER BY A.MENU_ORDR
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/menu/Autho_SQL_postgres.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/mapper/com/menu/Progrm_SQL_postgres.xml
===================================================================
--- base3.10/src/main/resources/egovframework/mapper/com/menu/Progrm_SQL_postgres.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/mapper/com/menu/Progrm_SQL_postgres.xml (revision 10)
@@ -0,0 +1,218 @@
+<?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="ProgramDAO">
+ <!-- 메뉴 맵 -->
+ <resultMap id="menuInfoMap" type="MenuInfoVO">
+ <result property="id" column="ID"/>
+ <result property="menuNo" column="MENU_NO"/>
+ <result property="pId" column="PID"/>
+ <result property="upperMenuNo" column="UPPER_MENU_NO"/>
+ <result property="menuNm" column="MENU_NM"/>
+ <result property="menuOrdr" column="MENU_ORDR"/>
+ <result property="menuDc" column="MENU_DC"/>
+ <result property="relateImage" column="RELATE_IMAGE"/>
+ <result property="progrGb" column="PROGR_GB"/>
+ <result property="menuGb" column="MENU_GB"/>
+ <result property="useYn" column="USE_YN"/>
+ <collection property="menuProgramList" ofType="MenuProgramInfoVO">
+ <result property="menuNo" column="PRO_MENU_NO"/>
+ <result property="proId" column="PRO_ID"/>
+ <result property="progrUrl" column="PROGR_URL"/>
+ <result property="progrUrlNm" column="PROGR_URL_NM"/>
+ <result property="defaultYn" column="DEFAULT_YN"/>
+ </collection>
+ </resultMap>
+
+ <!-- 메뉴 정보 삭제 -->
+ <delete id="deleteMenuInfo" parameterType="MenuInfoVO">
+ DELETE FROM TNMENUINFO
+ WHERE 1 = 1
+ AND MENU_NO = #{menuNo}
+ </delete>
+
+ <!-- 메뉴 프로그램 정보 삭제 -->
+ <delete id="deleteMenuProgramInfo" parameterType="MenuProgramInfoVO">
+ DELETE FROM TNMENUPROGRAMINFO
+ WHERE 1 = 1
+ <choose>
+ <when test="progrUrl != '' and progrUrl != null">
+ AND MENU_NO = #{menuNo}
+ AND PROGR_URL = #{progrUrl}
+ </when>
+ <otherwise>
+ AND MENU_NO = #{menuNo}
+ </otherwise>
+ </choose>
+ </delete>
+
+ <!-- 메뉴 프로그램 이동 시 수정 -->
+ <update id="moveMenuInfo" parameterType="MenuInfoVO">
+ UPDATE TNMENUINFO
+ SET UPPER_MENU_NO = #{upperMenuNo}
+ , MENU_ORDR = #{menuOrdr}::integer
+ WHERE 1 = 1
+ AND MENU_NO = #{menuNo}
+ </update>
+
+ <!-- 트리에서 메뉴 추가 시 등록 -->
+ <insert id="insertTreeMenuInfo" parameterType="MenuInfoVO">
+ INSERT INTO TNMENUINFO (
+ MENU_NO
+ , UPPER_MENU_NO
+ , MENU_NM
+ , MENU_ORDR
+ , MENU_GB
+ , FRST_REGISTER_ID
+ , FRST_REGIST_PNTTM
+ ) VALUES (
+ #{menuNo}
+ , #{upperMenuNo}
+ , #{menuNm}
+ , (
+ SELECT COUNT(B.MENU_NO)+1 AS MENU_ORDR
+ FROM TNMENUINFO B
+ WHERE 1 = 1
+ AND B.UPPER_MENU_NO = #{upperMenuNo}
+ )
+ , #{menuGb}
+ , #{frstRegisterId}
+ , NOW()
+ )
+ </insert>
+
+ <!-- 트리에서 메뉴 명 변경 시 수정 -->
+ <update id="updateNewnNameTreeMenuInfo" parameterType="MenuInfoVO">
+ UPDATE TNMENUINFO
+ SET MENU_NM = #{menuNm}
+ WHERE 1 = 1
+ AND MENU_NO = #{menuNo}
+ </update>
+
+ <select id="selectMenuInfo" parameterType="MenuInfoVO" resultMap="menuInfoMap">
+ SELECT A.MENU_NO
+ , A.UPPER_MENU_NO
+ , A.MENU_NM
+ , A.MENU_ORDR
+ , A.MENU_DC
+ , A.RELATE_IMAGE
+ , A.PROGR_GB
+ , A.MENU_GB
+ , A.USE_YN
+ , B.MENU_NO AS PRO_MENU_NO
+ , B.PROGR_URL
+ , B.PROGR_URL_NM
+ , B.DEFAULT_YN
+ FROM TNMENUINFO A
+ LEFT OUTER JOIN TNMENUPROGRAMINFO B
+ ON B.MENU_NO = A.MENU_NO
+ WHERE 1 = 1
+ AND A.MENU_NO = #{menuNo}
+ ORDER BY A.MENU_ORDR
+ , (
+ CASE B.DEFAULT_YN WHEN 'Y' THEN 1
+ ELSE 2
+ END
+ )
+ </select>
+
+ <!-- 프로그램 메뉴 등록 -->
+ <insert id="insertMenuInfo" parameterType="MenuInfoVO">
+ INSERT INTO TNMENUINFO (
+ MENU_NO
+ , UPPER_MENU_NO
+ , MENU_NM
+ , MENU_ORDR
+ , MENU_DC
+ , RELATE_IMAGE
+ , PROGR_GB
+ , MENU_GB
+ , FRST_REGISTER_ID
+ , FRST_REGIST_PNTTM
+ , LAST_UPDUSR_ID
+ , LAST_UPDT_PNTTM
+ ) VALUES (
+ #{menuNo}
+ , #{upperMenuNo}
+ , #{menuNm}
+ , #{menuOrdr}::integer
+ , #{menuDc}
+ , #{relateImage}
+ , #{progrGb}
+ , #{menuGb}
+ , #{frstRegisterId}
+ , NOW()
+ , #{lastUpdusrId}
+ , NOW()
+ )
+ </insert>
+
+ <!-- 프로그램 Url 등록 -->
+ <insert id="insertMenuProgramInfo" parameterType="MenuProgramInfoVO">
+ INSERT INTO TNMENUPROGRAMINFO (
+ MENU_NO
+ , PROGR_URL
+ , PROGR_URL_NM
+ , DEFAULT_YN
+ , FRST_REGISTER_ID
+ , FRST_REGIST_PNTTM
+ , LAST_UPDUSR_ID
+ , LAST_UPDT_PNTTM
+ )
+ VALUES(
+ #{menuNo}
+ , #{progrUrl}
+ , #{progrUrlNm}
+ , #{defaultYn}
+ , #{frstRegisterId}
+ , NOW()
+ , #{lastUpdusrId}
+ , NOW()
+ )
+ ON CONFLICT (menu_no, progr_url)
+ DO UPDATE
+ SET (PROGR_URL_NM, DEFAULT_YN, LAST_UPDUSR_ID, LAST_UPDT_PNTTM) = (#{progrUrlNm}, #{defaultYn}, #{lastUpdusrId}, NOW())
+ </insert>
+
+ <!-- 프로그램 메뉴 수정 -->
+ <update id="updateMenuInfo" parameterType="MenuInfoVO">
+ UPDATE TNMENUINFO
+ SET MENU_NM = #{menuNm}
+ , MENU_ORDR = #{menuOrdr}::integer
+ , MENU_DC = #{menuDc}
+ , RELATE_IMAGE = #{relateImage}
+ , PROGR_GB = #{progrGb}
+ , MENU_GB = #{menuGb}
+ , USE_YN = #{useYn}
+ , LAST_UPDUSR_ID = #{lastUpdusrId}
+ , LAST_UPDT_PNTTM = NOW()
+ WHERE 1 = 1
+ AND MENU_NO = #{menuNo}
+ </update>
+
+ <!-- 게시판 목록을 조회 -->
+ <select id="selectBbsList" parameterType="egovframework.com.cmm.ComDefaultVO" resultType="egovframework.com.cop.bbs.service.BoardVO">
+ <![CDATA[
+ SELECT
+ a.BBS_ID,
+ a.BBS_NM,
+ a.BBS_INTRCN,
+ a.BBS_TY_CODE
+ FROM
+ COMTNBBSMASTER a
+ WHERE 1 = 1
+ AND a.BBS_NM LIKE CONCAT('%', #{searchKeyword}, '%')
+ ORDER BY a.FRST_REGIST_PNTTM DESC
+ LIMIT #{recordCountPerPage} OFFSET #{firstIndex}
+ ]]>
+ </select>
+
+ <!-- 게시판 목록 수를 조회 -->
+ <select id="selectBbsListTotCnt" parameterType="egovframework.com.cmm.ComDefaultVO" resultType="java.lang.Integer">
+ <![CDATA[
+ SELECT COUNT(*) AS totcnt
+ FROM COMTNBBSMASTER A
+ WHERE A.BBS_NM like CONCAT('%', #{searchKeyword}, '%')
+ AND A.USE_AT = 'Y'
+ ]]>
+ </select>
+</mapper>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/mapper/com/menu/Progrm_SQL_postgres.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 (revision 9)
+++ base3.10/src/main/resources/egovframework/mapper/config/mapper-config.xml (revision 10)
@@ -7,7 +7,8 @@
<!-- 전통적인 데이터베이스 컬럼명 형태인 A_COLUMN을 CamelCase형태의 자바 프로퍼티명 형태인 aColumn으로 자동으로 매핑하도록 함 -->
<setting name="mapUnderscoreToCamelCase" value="true"></setting>
<!-- 파라미터에 Null 값이 있을 경우 에러 처리 -->
- <setting name="jdbcTypeForNull" value="VARCHAR"></setting>
+<!-- <setting name="jdbcTypeForNull" value="VARCHAR"></setting> -->
+ <setting name="jdbcTypeForNull" value="NULL"></setting>
</settings>
<!-- Type Aliases 설정-->
@@ -16,6 +17,7 @@
<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" />
+ <package name="egovframework.com"/>
</typeAliases>
</configuration>
\ No newline at end of file
Index: base3.10/src/main/resources/egovframework/egovProps/globals.properties
===================================================================
--- base3.10/src/main/resources/egovframework/egovProps/globals.properties (revision 9)
+++ base3.10/src/main/resources/egovframework/egovProps/globals.properties (revision 10)
@@ -23,7 +23,7 @@
# 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
+Globals.Auth = session
# MainPage Setting
Globals.MainPage = /EgovContent.do
Index: base3.10/src/main/resources/egovframework/message/com/site/message_ko.properties
===================================================================
--- base3.10/src/main/resources/egovframework/message/com/site/message_ko.properties (nonexistent)
+++ base3.10/src/main/resources/egovframework/message/com/site/message_ko.properties (revision 10)
@@ -0,0 +1,18 @@
+#\uc2dc\uc2a4\ud15c\uad00\ub9ac
+com.system.title=\uc2dc\uc2a4\ud15c \uad00\ub9ac
+com.system.title.sysNm=\uc2dc\uc2a4\ud15c\uba85
+com.system.title.sysNm.placeholder=\uc2dc\uc2a4\ud15c\uba85\uc744 \uc785\ub825\ud558\uc138\uc694
+com.system.title.coLogo=\ub85c\uace0
+com.system.title.coLogo.placeholder=\ub85c\uace0 \uc774\ubbf8\uc9c0\ub97c \ub4f1\ub85d\ud574\uc8fc\uc138\uc694
+com.system.title.coAddr=\uc8fc\uc18c
+com.system.title.coAddr.placeholder=\uc8fc\uc18c\ub97c \uc785\ub825\ud558\uc138\uc694
+com.system.title.coTel=\uc804\ud654\ubc88\ud638
+com.system.title.coTel.placeholder=\uc804\ud654\ubc88\ud638\ub97c \uc785\ub825\ud558\uc138\uc694
+com.system.title.coFax=\ud329\uc2a4
+com.system.title.coFax.placeholder=\ud329\uc2a4 \ubc88\ud638\ub97c \uc785\ub825\ud558\uc138\uc694
+com.system.title.copyright=\uc800\uc791\uad8c \ubb38\uad6c
+com.system.title.copyright.placeholder=\uc800\uc791\uad8c \ubb38\uad6c\ub97c \uc785\ub825\ud558\uc138\uc694(\uc608: 'copyright (c) [\ud68c\uc0ac\uba85]. all rights reserved')
+com.system.title.coFavicon=Favicon
+com.system.title.coFavicon.placeholder=Favicon \uc544\uc774\ucf58\uc744 \ub4f1\ub85d\ud574\uc8fc\uc138\uc694
+com.system.title.inspectAt=\uc810\uac80 \uc5ec\ubd80
+com.system.title.inspectAt.placeholder=\uc810\uac80 \uc5ec\ubd80\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694.
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/message/com/site/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 (revision 9)
+++ base3.10/src/main/resources/egovframework/message/com/message-common_en.properties (revision 10)
@@ -42,6 +42,7 @@
button.notUsed=Not used
button.inquire=inquire
button.update=update
+button.newCreate=new
button.create=create
button.delete=delete
button.deleteDatabase=Wiping
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 (revision 9)
+++ base3.10/src/main/resources/egovframework/message/com/message-common_ko.properties (revision 10)
@@ -42,6 +42,7 @@
button.notUsed=\uc0ac\uc6a9\uc911\uc9c0
button.inquire=\uc870\ud68c
button.update=\uc218\uc815
+button.newCreate=\uc2e0\uaddc\ub4f1\ub85d
button.create=\ub4f1\ub85d
button.delete=\uc0ad\uc81c
button.deleteDatabase=\uc644\uc804\uc0ad\uc81c
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 (revision 9)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-editor.xml (nonexistent)
@@ -1,18 +0,0 @@
-<?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
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 (revision 9)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-bbs.xml (nonexistent)
@@ -1,44 +0,0 @@
-<?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
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 (revision 9)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-File.xml (revision 10)
@@ -2,17 +2,17 @@
<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">
+ <!-- 에디터 파일 -->
+ <bean name="editorFileIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
<property name="dataSource" ref="egov.dataSource" />
- <property name="strategy" ref="fileStrategy" />
+ <property name="strategy" ref="editorFileIdStrategy" />
<property name="blockSize" value="10"/>
<property name="table" value="COMTECOPSEQ"/>
- <property name="tableName" value="FILE_ID"/>
+ <property name="tableName" value="EDITOR_FILE_ID"/>
</bean>
- <bean name="fileStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
- <property name="prefix" value="FILE_" />
- <property name="cipers" value="15" />
+ <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
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-AuthoListManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-AuthoListManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-AuthoListManage.xml (revision 10)
@@ -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">
+
+ <!-- SiteManage... START-->
+ <bean name="egovAuthoListIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="authoListStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="AUTHO_LIST_ID"/>
+ </bean>
+ <bean name="authoListStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="AUTHO_" />
+ <property name="cipers" value="12" />
+ <property name="fillChar" value="0" />
+ </bean>
+ <!-- SiteManage... END-->
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-AuthoListManage.xml
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-ProgrListManage.xml
===================================================================
--- base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-ProgrListManage.xml (nonexistent)
+++ base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-ProgrListManage.xml (revision 10)
@@ -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">
+
+ <!-- SiteManage... START-->
+ <bean name="egovProgrListIdGnrService" class="egovframework.rte.fdl.idgnr.impl.EgovTableIdGnrServiceImpl" destroy-method="destroy">
+ <property name="dataSource" ref="egov.dataSource" />
+ <property name="strategy" ref="progrListStrategy" />
+ <property name="blockSize" value="10"/>
+ <property name="table" value="COMTECOPSEQ"/>
+ <property name="tableName" value="PROGR_LIST_ID"/>
+ </bean>
+ <bean name="progrListStrategy" class="egovframework.rte.fdl.idgnr.impl.strategy.EgovIdGnrStrategyImpl">
+ <property name="prefix" value="PROGR_" />
+ <property name="cipers" value="12" />
+ <property name="fillChar" value="0" />
+ </bean>
+ <!-- SiteManage... END-->
+
+</beans>
\ No newline at end of file
Property changes on: base3.10/src/main/resources/egovframework/spring/com/idgn/context-idgn-ProgrListManage.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 (revision 9)
+++ base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-access.xml (revision 10)
@@ -22,23 +22,23 @@
- 로그인 페이지 등 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"
- />
+<!-- <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/**
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 (revision 9)
+++ base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-interceptor.xml (revision 10)
@@ -11,7 +11,43 @@
<mvc:interceptors>
<!-- IP 정보 기록 인터셉터를 등록한다. -->
<bean class="egovframework.com.cmm.interceptor.IpObtainInterceptor" />
- </mvc:interceptors>
+ <mvc:interceptor>
+ <mvc:mapping path="/**/*.do" />
+ <mvc:exclude-mapping path="/**/streaming.do" />
+ <mvc:exclude-mapping path="/**/imageview.do" />
+ <mvc:exclude-mapping path="/**/download.do" />
+ <mvc:exclude-mapping path="/**/multiDownload.do" />
+ <mvc:exclude-mapping path="/**/multiImageview.do" />
+ <mvc:exclude-mapping path="/**/tempDownload.do" />
+ <mvc:exclude-mapping path="/**/imagePrint/*.do" />
+ <!-- 인덱스 -->
+ <mvc:exclude-mapping path="/index.do" />
+ <!-- validator -->
+ <mvc:exclude-mapping path="/validator.do" />
+ <!-- 로그인 페이지 -->
+ <mvc:exclude-mapping path="/uat/uia/egovLoginUsr.do" />
+ <!-- 로그인 처리 -->
+ <mvc:exclude-mapping path="/uat/uia/actionLogin.do" />
+ <!-- 로그아웃 처리 -->
+ <mvc:exclude-mapping path="/uat/uia/actionLogout.do" />
+ <!-- Ajax 요청 제외 -->
+ <mvc:exclude-mapping path="/**/*Json.do" />
+ <!-- import 부분 제외 -->
+ <mvc:exclude-mapping path="/editor/fileListView.do" />
+ <mvc:exclude-mapping path="/cop/cmt/*/selectArticleCommentList.do" />
+ <mvc:exclude-mapping path="/menu/program/ProgrmListTreeSelect.do" />
+ <bean class="egovframework.com.cmm.interceptor.AuthenticInterceptor" />
+ </mvc:interceptor>
+ </mvc:interceptors>
+
+ <!-- 파일 업로드 인터셉터 등록 -->
+ <mvc:interceptors>
+ <mvc:interceptor>
+ <mvc:mapping path="/editor/*.do" />
+ <mvc:mapping path="/uploadFile.do" />
+ <bean class="egovframework.com.cmm.interceptor.FileUploadInterceptor" />
+ </mvc:interceptor>
+ </mvc:interceptors>
</beans>
<!-- 세션(Session) 방식 인증시에만 AuthenticInterceptor 동작 -->
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 (revision 9)
+++ base3.10/src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml (revision 10)
@@ -37,7 +37,20 @@
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
- <bean id="egovWebLogInterceptor" class="egovframework.com.sym.log.wlg.web.EgovWebLogInterceptor" />
+ <bean id="egovWebLogInterceptor" class="egovframework.com.sym.log.wlg.web.EgovWebLogInterceptor">
+ <!-- 웹 로그 등록 제외 시킬 pattern list -->
+ <property name="patternList">
+ <list>
+ <value>/editor/**</value>
+ <value>/**/*Json.do</value>
+ <value>/cop/cmt/*/selectArticleCommentList.do</value>
+ <value>/menu/program/ProgrmListTreeSelect.do</value>
+ <value>/uat/uia/actionLogin.do</value>
+ <value>/uat/uia/actionLogout.do</value>
+ <value>/validator.do</value>
+ </list>
+ </property>
+ </bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors">
Index: base3.10/src/main/webapp/WEB-INF/tiles/template/adminMenu.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/tiles/template/adminMenu.jsp (revision 9)
+++ base3.10/src/main/webapp/WEB-INF/tiles/template/adminMenu.jsp (revision 10)
@@ -3,6 +3,7 @@
<%@ 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" %>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<c:set value="${sessionScope.menuVO}" var="menuList"/>
<c:set value="${sessionScope.menuNaviVO}" var="menuNaviList"/>
<c:set value="${sessionScope.menuDepthVO}" var="menuDepthList" />
@@ -72,8 +73,10 @@
<c:choose>
<c:when test="${loginVO != null}">
<li><span><b>${loginVO.name }</b></span> 님 환영합니다.</li>
+ <li><spring:message code="comCmm.top.leftSessionTime"/> - <span id="leftTimeInfo">00:00:00</span><!-- 세션만료 남은시간 --></li>
+ <li><a id="clickInfo" class="btn02" href="#"><spring:message code="comCmm.top.incSessionTime"/></a><!-- 시간연장 --></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>
+ <li class="icon_logout"><a href="<c:url value="/uat/uia/actionLogout.do"/>">logout</a></li>
</c:when>
<c:otherwise>
<li class="icon_home"><a href="<c:url value="/admin/index.do"/>">home</a></li>
@@ -149,6 +152,123 @@
</div>
<script>
+$(function() {
+ 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();
+
+ 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;
+ }
+
+ // 시간연장 이벤트
+ $('#clickInfo').on('click', reqTimeAjax);
+
+ // 세션만료 초기화
+ init();
+});
$(".left_menu ul p.main_menui ").click(function(){
$(".sub_menu").slideUp();
$(this).next("ul").stop().slideToggle();
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/site/SystemManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/site/SystemManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/site/SystemManage.jsp (revision 10)
@@ -0,0 +1,265 @@
+
+<%
+ /**
+ * @Class Name : EgovSystemManage.jsp
+ * @Description : EgovSystemManage 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ------- -------- ---------------------------
+ * @ 2020.04.14 김기윤 최초 생성
+ * @author (주)케이엔정보기술
+ * @since 2020.04.14
+ * @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="sysNmPlaceHolder">
+ <spring:message code='com.system.title.sysNm.placeholder' />
+</c:set>
+<c:set var="coLogoPlaceHolder">
+ <spring:message code='com.system.title.coLogo.placeholder' />
+</c:set>
+<c:set var="coAddrPlaceHolder">
+ <spring:message code='com.system.title.coAddr.placeholder' />
+</c:set>
+<c:set var="coTelPlaceHolder">
+ <spring:message code='com.system.title.coTel.placeholder' />
+</c:set>
+<c:set var="coFaxPlaceHolder">
+ <spring:message code='com.system.title.coFax.placeholder' />
+</c:set>
+<c:set var="copyrightPlaceHolder">
+ <spring:message code='com.system.title.copyright.placeholder' />
+</c:set>
+<c:set var="faviconPlaceHolder">
+ <spring:message code='com.system.title.coFavicon.placeholder' />
+</c:set>
+<c:set var="inspectAtPlaceHolder">
+ <spring:message code='com.system.title.inspectAt.placeholder' />
+</c:set>
+<c:set var="confirmSaveWord">
+ <spring:message code='common.save.msg' />
+</c:set>
+<script type="text/javascript">
+ $(function() {
+ var msg = "<c:out value='${msg}' />";
+ if (!isEmpty(msg)) {
+ alert(msg);
+ }
+ });
+
+ function fn_form_validator(form) {
+ if (form.sysNm.value == "" || form.sysNm.value == null) {
+ alert("${sysNmPlaceHolder}");
+ form.sysNm.focus();
+ return false;
+ }
+/*
+ if ($('#coLogo').val() == "" || $('#coLogo').val() == null) {
+ alert("${coLogoPlaceHolder}");
+ return false;
+ }
+
+ if ($('#coFavicon').val() == "" || $('#coFavicon').val() == null) {
+ alert("${faviconPlaceHolder}");
+ return false;
+ }
+ */
+ if (form.coAddr.value == "" || form.coAddr.value == null) {
+ alert("${coAddrPlaceHolder}");
+ form.coAddr.focus();
+ return false;
+ }
+
+ if (form.coTel.value == "" || form.coTel.value == null) {
+ alert("${coTelPlaceHolder}");
+ form.coTel.focus();
+ return false;
+ }
+
+ if (form.coFax.value == "" || form.coFax.value == null) {
+ alert("${coFaxPlaceHolder}");
+ form.coFax.focus();
+ return false;
+ }
+
+ if (form.copyright.value == "" || form.copyright.value == null) {
+ alert("${copyrightPlaceHolder}");
+ form.copyright.focus();
+ return false;
+ }
+
+ if (form.inspectAt.value == "" || form.inspectAt.value == null) {
+ alert("${inspectAtPlaceHolder}");
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 시스템 기본정보 등록
+ *
+ */
+ function fn_save_system(form) {
+ var sysId = "<c:out value='${sysVO.sysId}' />";
+ if (sysId != "" && sysId != null) {
+ form.action = "<c:url value='/site/updateSystemInfo.do'/>";
+ }
+ if (fn_form_validator(form) && confirm("${confirmSaveWord}")) {
+ form.submit();
+ }
+ }
+ // 파일업로드
+ $(function() {
+ var defaultsDom = function(html) {
+ var fileIcon = fileExtIcon(html.fileExtsn);
+ var fileSize = fileSizeConvert(html.fileSize);
+
+ var dom = '<div class="file_list file_img mt5" id=' + html.fileId + '>';
+ dom += '<ul>';
+ dom += '<li>';
+ dom += '<p class="file_name">';
+ dom += '<img alt="배너 이미지" src="' + html.link + '" >';
+ dom += '</p>';
+ dom += '<div class="btn">';
+ dom += '<a class="btn_sq_s btn_delete" href="javascript:void(0)" title="삭제"><span class="blind">삭제</span></a>';
+ dom += '<a class="btn_sq_s btn_filedown" href="' + html.link + '" title="다운로드"><span class="blind">다운로드</span></a>';
+ dom += '</div>';
+ dom += '</li>';
+ dom += '</ul>';
+ dom += '</div>';
+ return dom;
+ }
+ // logo
+ var options = {
+ fileListDivId : 'logoFileList',
+ inputFileId : 'logo',
+ hiddenFileName : 'coLogo',
+ progress : 'progress',
+ maxSize : 1, // 첨부파일 등록개수
+ fileAllowedTypes : ['jpg', 'jpeg', 'png', 'svg'
+ ], // 확장자 체크 ['png', 'pdf']
+ fileMaxSize : 1
+ // 첨부파일 사이즈
+ }
+ $.initFileUpload(options, defaultsDom);
+
+ // favicon
+ var options = {
+ fileListDivId : 'faviconFileList',
+ inputFileId : 'favicon',
+ hiddenFileName : 'coFavicon',
+ progress : 'progress',
+ maxSize : 1, // 첨부파일 등록개수
+ fileAllowedTypes : ['ico'
+ ], // 확장자 체크 ['png', 'pdf']
+ fileMaxSize : 1
+ // 첨부파일 사이즈
+ }
+ $.initFileUpload(options, defaultsDom);
+ });
+</script>
+<!-- javascript warning tag -->
+<noscript class="noScriptTitle">
+ <spring:message code="common.noScriptTitle.msg" />
+</noscript>
+<div class="board_header">
+ <h3><spring:message code="com.system.title" /></h3>
+</div>
+<form id="systemVOForm" name="systemVOForm" action="<c:url value='/site/insertSystemInfo.do'/>" method="post" onSubmit="fn_save_system(this); return false;">
+ <div class="board_body">
+ <input type="hidden" name="coFavicon" id="coFavicon" value="${sysVO.coFavicon }" /> <input type="hidden" name="coLogo" id="coLogo" value="${sysVO.coLogo }" />
+ <!-- 등록폼 -->
+ <table class="table_write">
+ <colgroup>
+ <col class="width200" />
+ <col />
+ </colgroup>
+ <tbody>
+ <tr>
+ <th scope="row"><spring:message code='com.system.title.sysNm' /></th>
+ <td><input name="sysNm" type="text" title="<spring:message code='com.system.title.sysNm' /> <spring:message code='input.input' />" class="inputText width100p" placeholder="${sysNmPlaceHolder }" value="${sysVO.sysNm}" /></td>
+ </tr>
+ <tr>
+ <th scope="row"><spring:message code='com.system.title.coLogo' /></th>
+ <td>
+ <!-- attached file Start -->
+ <div class="file_up">
+ <label for="logo">파일선택</label>
+ <input class="upload-name blind" disabled="disabled">
+ <input type="file" id="logo" class="upload-hidden">
+ </div>
+ <em class="exp filenote">※ 파일당 10MB까지 첨부 가능합니다.</em>
+ <div id="progress" class="progress mt-3" style="display: none;">
+ <div class="progress-bar" style="width: 0%;">0%</div>
+ </div>
+ <div id="logoFileList" style="display: none;"></div>
+ <!-- attached file End -->
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><spring:message code='com.system.title.coFavicon' /></th>
+ <td>
+ <div class="file_up">
+ <label for="favicon">파일선택</label>
+ <input class="upload-name blind" >
+ <input type="file" id="favicon" class="upload-hidden"/>
+ </div>
+ <em class="exp filenote">※ 파일당 10MB까지 첨부 가능합니다.</em>
+ <div id="progress" class="progress mt-3" style="display: none;">
+ <div class="progress-bar" style="width: 0%;">0%</div>
+ </div>
+ <div id="faviconFileList" style="display: none;"></div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><spring:message code='com.system.title.coAddr' /></th>
+ <td><input name="coAddr" type="text" title="<spring:message code='com.system.title.coAddr' /> <spring:message code='input.input' />" class="inputText width100p" placeholder="${coAddrPlaceHolder }" value="${sysVO.coAddr}" /></td>
+ </tr>
+ <tr>
+ <th scope="row"><spring:message code='com.system.title.coTel' /></th>
+ <td><input name="coTel" type="text" title="<spring:message code='com.system.title.coTel' /> <spring:message code='input.input' />" class="inputText width100p" placeholder="${coTelPlaceHolder }" value="${sysVO.coTel}" /></td>
+ </tr>
+ <tr>
+ <th scope="row"><spring:message code='com.system.title.coFax' /></th>
+ <td><input name="coFax" type="text" title="<spring:message code='com.system.title.coFax' /> <spring:message code='input.input' />" class="inputText width100p" placeholder="${coFaxPlaceHolder }" value="${sysVO.coFax}" /></td>
+ </tr>
+ <tr>
+ <th scope="row"><spring:message code='com.system.title.copyright' /></th>
+ <td><input name="copyright" type="text" title="<spring:message code='com.system.title.copyright' /> <spring:message code='input.input' />" class="inputText width100p" placeholder="${copyrightPlaceHolder }" value="${sysVO.copyright}" /></td>
+ </tr>
+ <tr>
+ <th scope="row"><spring:message code='com.system.title.inspectAt' /></th>
+ <td><select id="inspectAt" name="inspectAt" class="width150 select" title="<spring:message code='com.system.title.inspectAt' /> <spring:message code='input.input' />">
+ <option value="" <c:if test="${empty sysVO.sysId}">selected</c:if>>선택하세요</option>
+ <option value="Y" <c:if test="${sysVO.inspectAt eq 'Y'}">selected</c:if>>Y</option>
+ <option value="N" <c:if test="${sysVO.inspectAt eq 'N'}">selected</c:if>>N</option>
+ </select></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <!-- 하단 버튼 -->
+ <div class="board_footer">
+ <div class="fr bottom_wrap">
+ <button class="btn_s" type="submit" title="<spring:message code="button.save" /> <spring:message code="input.button" />">
+ <spring:message code="button.save" />
+ </button>
+ </div>
+ </div>
+ <c:if test="${empty sysVO.sysId }">
+ <input name="sysId" type="hidden" value="1" />
+ </c:if>
+ <c:if test="${not empty sysVO.sysId }">
+ <input name="sysId" type="hidden" value="${sysVO.sysId }" />
+ </c:if>
+</form>
+
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/site/SystemManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgrmListTree.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgrmListTree.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgrmListTree.jsp (revision 10)
@@ -0,0 +1,594 @@
+<%--
+ /**
+ * @Class Name : EgovProgrmListTree.jsp
+ * @Description : 프로그램관리 Tree 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ----------- -------- ---------------------------
+ * @ 2020.04.08 송영호 최초 생성
+ *
+ * @author
+ * @since 2020.04.08
+ * @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 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"%>
+<jsp:useBean id="today" class="java.util.Date" />
+<fmt:formatDate value="${today}" pattern="yyyyMMddHHmm" var="nowDate"/>
+<%
+ //String imagePath_icon = "/images/egovframework/com/sym/mnu/mpm/icon/";
+ //String imagePath_button = "/images/egovframework/com/sym/mnu/mpm/button/";
+%>
+<script type="text/javascript" src="<c:url value="/validator.do" />"></script>
+
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/zTree/css/demo.css'><c:param name="dt" value="${nowDate}"/></c:url>"/>
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/zTree/css/zTreeStyle/zTreeStyle.css'><c:param name="dt" value="${nowDate}"/></c:url>"/>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.core.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.excheck.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.exedit.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<script type="text/javascript">
+ var setting = {
+ view: {
+ expandSpeed: "normal",
+ addHoverDom: addHoverDom,
+ removeHoverDom: removeHoverDom,
+ selectedMulti: false
+ },
+ edit: {
+ drag:{
+ isCopy : false,
+ isMove: true
+ },
+ enable: true,
+ showRemoveBtn: showRemoveBtn, //노드 오른쪽에 삭제버튼 false -> defult true
+ showRenameBtn: setRenameBtn
+ },
+ data: {
+ simpleData: {
+ enable: true
+ }
+ },
+ callback: {
+ beforeDrop: beforeDrop,
+ onDrop: onDrop, //노드 드래그 앤 드롭 전 이벤트 -> 반환값에 따르 tree 드롭 노드 허용여부 결정(defylt - null) #노드를 놓아둔 위치가 올바르지 않으면 원상태 복원
+ beforeRemove: beforeRemove,
+ beforeRename: beforeRename,
+ beforeClick: beforeClick,
+ onClick: onClick
+ }
+ };
+
+ //최상위 메뉴 버튼 사용 X
+ function setRenameBtn(treeId, treeNode) {
+ return !treeNode.level == 0;
+ }
+
+ //최상위 메뉴 버튼 사용 X
+ function showRemoveBtn(treeId, treeNode) {
+ return !treeNode.level == 0;
+ }
+
+ //노드가 드래그되기전 함수 호출
+ function beforeDrop(treeId, treeNodes, targetNode, moveType) {
+ if( targetNode == null) {
+ alert("이동할 메뉴 대상이 없습니다.");
+ return false;
+ }
+ else if( targetNode.level == 0) {
+ if(moveType != "inner") return false;
+ }
+ }
+
+ //노드가 드랍되었을 때 함수 호출
+ function onDrop(event, treeId, treeNodes, targetNode, moveType) {
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ /* for (var i = 0; i < treeNodes.length; i++) {
+ if( treeNodes[i].pId == null) return false;
+ } */
+ if( targetNode == null) return false;
+ else {
+ var sort = new Array();
+ for (var j = 0; j < treeNodes.length; j++) {
+ for (var l = 0; l < treeNodes[j].getParentNode().children.length; l++) {
+ treeNodes[j].getParentNode().children[l].menuOrdr = l+1;
+ sort[l] = treeNodes[j].getParentNode().children[l];
+ }
+ }
+
+ var menuNo = '';
+ for (var i = 0; i < treeNodes.length; i++) {
+ menuNo = treeNodes[i].menuNo
+ }
+
+ var upperMenuNo;
+ if (moveType == 'inner') {
+ upperMenuNo = targetNode.menuNo;
+ } else {
+ upperMenuNo = targetNode.upperMenuNo;
+ }
+
+ var param = {};
+ param['menuNo'] = menuNo;
+ for (var i = 0; i < sort.length; i++) {
+ param['menuInfoList[' + i + '].menuNo'] = sort[i].menuNo;
+ param['menuInfoList[' + i + '].upperMenuNo'] = upperMenuNo;
+ param['menuInfoList[' + i + '].menuOrdr'] = sort[i].menuOrdr;
+
+ // 이동 후 노드 정보 수정
+ var node = zTree.getNodeByParam("id", sort[i].id, null);
+ node.upperMenuNo = upperMenuNo;
+ node.menuOrdr = sort[i].menuOrdr;
+ zTree.updateNode(node);
+ }
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/program/MenuInfoMove.do' />",
+ data : param,
+ dataType : 'json',
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ success : function(result){
+ viewTable(result);
+ },
+ complete:function(){
+ $.unblockUI();
+ },
+ error:function(request,error) {
+ console.log("트리에서 노드 이동 시 수정 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+ }
+ //targetNode - 드롭되는 노드가 해당 타겟이 되는 노드의 앞, 뒤, 상속받는 주체 노드
+ //moveType - prev(노드 이전), next(노드 뒤), inner(트리삽입)
+ }
+
+ var newCount = 1;
+ function addHoverDom(treeId, treeNode) {
+ if (treeNode.level == 0) {
+ return false;
+ }
+
+ var sObj = $("#" + treeNode.tId + "_span");
+ if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
+ var addStr = "<span class='button add' name='button' id='addBtn_" + treeNode.tId
+ + "' title='추가' onfocus='this.blur();'></span>";
+ sObj.after(addStr);
+ var btn = $("#addBtn_"+treeNode.tId);
+ if (btn) btn.bind("click", function(){
+ var add = {
+ menuNm : '메뉴명' + newCount,
+ upperMenuNo : treeNode.menuNo,
+ menuGb : treeNode.menuGb
+ }
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/program/MenuInfoTreeInsert.do' />",
+ data : add,
+ dataType : 'json',
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ success : function(result){
+ //추가 시 DB 저장 후 노드 생성
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ zTree.addNodes(treeNode, { id:result.result.menuNo, pId:treeNode.id,
+ name:"메뉴명" + (newCount++), menuNo:result.result.menuNo, upperMenuNo:result.result.upperMenuNo });
+ //id 데이터 가져온 후 node 검색
+ var node = zTree.getNodeByParam("id", result.result.menuNo, null);
+ //node 이름 변경
+ zTree.editName(node);
+ viewTable(result);
+
+ //node 선택
+ return zTree.selectNode(node);
+ },
+ complete:function(){
+ $.unblockUI();
+ },
+ error:function(request,error) {
+ console.log("트리에서 노드 추가 시 등록 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+ });
+ }
+
+ //이름변경
+ function beforeRename(treeId, treeNode, newName) {
+ if (newName.length == 0) {
+ alert("메뉴 명을 입력해주세요.");
+ return false;
+ }
+
+ var param = {
+ menuNo : treeNode.menuNo,
+ menuNm : newName
+ };
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/program/MenuInfoTreeNewName.do' />",
+ data : param,
+ dataType : 'json',
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ success : function(result){
+ viewTable(result);
+ },
+ complete:function(){
+ $.unblockUI();
+ },
+ error:function(request,error) {
+ console.log("이름 변경 시 수정 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+
+ return true;
+ }
+
+ //삭제 이벤트 전 실행
+ function beforeRemove(treeId, treeNode) {
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ if(!treeNode.children || treeNode.children.length == 0 || treeNode.children == undefined) {
+ if(confirm("삭제하시겠습니까?")) {
+ zTree.selectNode(treeNode);
+ var param = {
+ menuNo : treeNode.menuNo,
+ upperMenuNo : treeNode.upperMenuNo
+ };
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/program/MenuInfoDelete.do' />",
+ data : param,
+ dataType : 'json',
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ success : function(result){
+ viewTable(result);
+
+ //추가 시 DB 저장 후 노드 생성
+ var node = zTree.getNodeByParam("id", result.result.menuNo, null);
+ zTree.selectNode(node);
+ },
+ complete:function(){
+ $.unblockUI();
+ },
+ error:function(request,error) {
+ console.log("노드 삭제 시 데이터 조회 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+ } else {
+ return false;
+ }
+ } else {
+ alert("하위 메뉴 먼저 삭제하여 주십시오.");
+ return false;
+ }
+ }
+
+ //삭제버튼에 마우스가 호버되었을때
+ function removeHoverDom(treeId, treeNode) {
+ $("#addBtn_"+treeNode.tId).unbind().remove();
+ }
+
+ function beforeClick(treeId, treeNode) {
+ return !treeNode.level == 0;
+ }
+
+ //노드 클릭 시
+ function onClick(event, treeId, treeNode) {
+// var gubun = jQuery(event.target).attr('id').split('_')[2];
+// if( gubun == 'span' ) {
+ //노드 클릭 시 정보 변경
+
+ var param = {
+ menuNo : treeNode.menuNo
+ };
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/program/MenuInfoTreeSelect.do' />",
+ data : param,
+ dataType : 'json',
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ success : function(result){
+ viewTable(result);
+ },
+ complete:function(){
+ $.unblockUI();
+ },
+ error:function(request,error) {
+ console.log("노드 클릭 시 데이터 조회 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+// }
+ }
+
+ //수정 후 테이블에 정보 표현
+ function viewTable(data) {
+ //메뉴구분
+ if (data.result.menuGb == undefined || data.result.menuGb == "") {
+ jQuery('input[name="menuGb"]').eq(0).prop("checked", true);
+ } else {
+ jQuery('input[name="menuGb"]').each(function (i) {
+ var val = $(this).val();
+ if (val == data.result.menuGb) {
+ $(this).prop("checked", true);
+ } else {
+ $(this).prop("checked", false);
+ }
+ });
+ }
+
+ //메뉴구분 선택 가능여부
+ if (data.result.upperMenuNo == 'ROOT') {
+ jQuery('input[name="menuGb"]').each(function (i) {
+ $(this).removeAttr("onclick");
+ });
+ } else {
+ jQuery('input[name="menuGb"]').each(function (i) {
+ $(this).attr("onclick", "return (false);");
+ });
+ }
+
+ //메뉴 번호
+ jQuery('input[name="menuNo"]').val(data.result.menuNo);
+ //메뉴 순서
+ jQuery('input[name="menuOrdr"]').val(data.result.menuOrdr);
+ //메뉴 명
+ jQuery('input[name="menuNm"]').val(data.result.menuNm);
+ //상위 메뉴 번호
+ jQuery('input[name="upperMenuNo"]').val(data.result.upperMenuNo);
+ //관련 이미지
+ jQuery('input[name="relateImage"]').val(data.result.relateImage);
+ //메뉴 설명
+ jQuery('textarea[name="menuDc"]').val(data.result.menuDc);
+ //프로그램 구분
+ if (data.result.progrGb == undefined || data.result.progrGb == "") {
+ jQuery('input[name="progrGb"]').eq(0).prop("checked", true);
+ } else {
+ jQuery('input[name="progrGb"]').each(function (i) {
+ var val = $(this).val();
+ if (val == data.result.progrGb) {
+ $(this).prop("checked", true);
+ } else {
+ $(this).prop("checked", false);
+ }
+
+ });
+ }
+ //사용유무 구분
+ if (data.result.useYn == undefined || data.result.useYn == "") {
+ jQuery('input[name="useYn"]').eq(0).prop("checked", true);
+ } else {
+ jQuery('input[name="useYn"]').each(function (i) {
+ var val = $(this).val();
+ if (val == data.result.useYn) {
+ $(this).prop("checked", true);
+ } else {
+ $(this).prop("checked", false);
+ }
+
+ });
+ }
+
+ //URL 설정정보
+ var tbody = jQuery('.progUrl').find('tbody');
+ tbody.empty();
+ var progUrl = data.result.menuProgramList;
+ var dom = '';
+ var radioNum = '';
+ var checked = '';
+
+ if (progUrl.length > 0) {
+ for (var i = 0; i < progUrl.length; i++) {
+ if (progUrl[i].defaultYn == 'Y') {
+ checked = 'checked="checked"';
+ } else {
+ checked = '';
+ }
+
+ radioNum = 'menuProgramList.defaultYn' + i;
+ dom += '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox"' + checked + '/>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="' + progUrl[i].progrUrlNm + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="' + progUrl[i].progrUrl + '" class="width100p inputText" readonly="readonly">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'remove\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+ }
+ } else {
+ checked = 'checked="checked"';
+ radioNum = 'menuProgramList.defaultYn0';
+ dom += '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox"' + checked + '/>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'add\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+ }
+
+ jQuery(dom).appendTo(tbody);
+ }
+
+ //노드 선택 시
+ function nodeSearch(treeId, treeNode) {
+ //노드 클릭 시 정보 변경
+ var param = {
+ menuNo : String(treeNode.menuNo)
+ };
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/program/MenuInfoTreeSelect.do' />",
+ data : param,
+ dataType : 'json',
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ success : function(result){
+ viewTable(result);
+ },
+ complete:function(){
+ $.unblockUI();
+ },
+ error:function(request,error) {
+ console.log("최초 노드 선택 시 데이터 조회 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+ }
+
+ function setEdit() {
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+
+ var removeTitle = "삭제";
+ var renameTitle = "변경";
+
+ zTree.setting.edit.removeTitle = removeTitle;
+ zTree.setting.edit.renameTitle = renameTitle;
+ }
+
+ $(document).ready(function(){
+ var zNode;
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/menuTreeList.do' />",
+ dataType : 'json',
+ async: false,
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ success : function(data){
+ zNode = data;
+ },
+ complete:function(){
+ $.unblockUI();
+ },
+ error:function(request,error) {
+ console.log("트리 데이터 조회 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+
+ $.fn.zTree.init($("#tree"), setting, zNode);
+ setEdit();
+
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ var node = zTree.getNodeByParam("id", "<c:url value="${menuInfoVO.menuNo}"/>", null);
+ if (node != null) {
+ if(node.id != 'ROOT') {
+ zTree.selectNode(node);
+ if(node.children != null) zTree.expandNode(node, true, false, true);
+
+ //최초 메뉴 뷰 조회
+ nodeSearch("tree", node);
+ } else {
+ zTree.expandNode(node, true, false, true);
+ }
+ } else {
+ node = zTree.getNodeByParam("id", "ROOT", null);
+ zTree.expandNode(node, true, false, true);
+ }
+
+ //전체 expand
+// zTree.expandAll(true);
+ });
+</script>
+
+<style type="text/css">
+ .ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position:-144px 0; vertical-align:top; *vertical-align:middle}
+ .ztree li span.button.pIcon01_ico_open{margin-right:2px; background: url(/resource/zTree/css/zTreeStyle/img/diy/1_open.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
+ .ztree li span.button.pIcon01_ico_close{margin-right:2px; background: url(/resource/zTree/css/zTreeStyle/img/diy/1_close.png) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
+
+ #tree input[type="text"] {
+ height: 15px !important;
+ }
+</style>
+<noscript class="noScriptTitle">
+ <spring:message code="common.noScriptTitle.msg" />
+</noscript>
+
+<div class="admin_sub_left_top" >
+ <input type="hidden" name="req_RetrunPath" value="/sym/mnu/mpm/EgovMenuList">
+ <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}|${result.chkURL}|">
+ </c:forEach>
+
+ <ul id="tree" class="ztree"></ul>
+</div>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgrmListTree.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgrmList.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgrmList.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgrmList.jsp (revision 10)
@@ -0,0 +1,636 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<%--
+ /**
+ * @Class Name : EgovMenuList.jsp
+ * @Description : 메뉴목록 화면
+ * @Modification Information
+ * @
+ * @ 수정일 수정자 수정내용
+ * @ ----------- -------- ---------------------------
+ * @ 2009.03.10 이용 최초 생성
+ * @ 2013.10.04 이기하 메뉴트리 위치 변경
+ *
+ * @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="pageTitle">메뉴리스트관리</c:set>
+<%
+ //String imagePath_icon = "/images/egovframework/com/sym/mnu/mpm/icon/";
+ //String imagePath_button = "/images/egovframework/com/sym/mnu/mpm/button/";
+%>
+<script type="text/javascript" src="<c:url value="/validator.do" />"></script>
+
+<script type="text/javascript">
+ //상세 URL 추가
+ function addUrl(obj) {
+ var tbody = jQuery(obj).closest('table').find('tbody');
+ var lastRadio = tbody.find('tr').last().find('input[type="radio"]');
+ var radioNum = lastRadio.attr('id');
+ if (radioNum == undefined) {
+ radioNum = 'menuProgramList.defaultYn0';
+ } else {
+ radioNum = radioNum.replace('menuProgramList.defaultYn', '');
+ radioNum = Number(radioNum)+1;
+ radioNum = "menuProgramList.defaultYn" + radioNum;
+ }
+
+ var dom = '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox"/>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'add\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+
+ jQuery(dom).appendTo(tbody);
+ }
+
+ // 상세 URL 삭제
+ function removeUrl(obj, removeGb) {
+ if (removeGb == "remove") {
+ var form = jQuery('form[name="menuInfoVO"]');
+ var tr = jQuery(obj).closest('tr');
+ var val = tr.find('input[name="menuProgramList.progrUrl"]').val();
+ dom = '<input name="deleteProgramList.progrUrl" type="text" value="' + val + '">';
+ jQuery(dom).appendTo(form);
+ }
+ jQuery(obj).closest('tr').remove();
+ }
+
+ /* ********************************************************
+ * 입력값 validator 함수
+ ******************************************************** */
+ function fn_validatorMenuList() {
+
+ if(document.menuManageVO.menuOrdr.value == ""){alert("메뉴순서는 Not Null 항목입니다."); return false;}
+ if(!checkNumber(document.menuManageVO.menuOrdr.value)){alert("메뉴순서는 숫자만 입력 가능합니다."); return false;}
+
+ if(document.menuManageVO.upperMenuId.value == ""){alert("상위메뉴번호는 Not Null 항목입니다."); return false;}
+ if(!checkNumber(document.menuManageVO.upperMenuId.value)){alert("상위메뉴번호는 숫자만 입력 가능합니다."); return false;}
+
+ if(document.menuManageVO.menuNm.value == ""){alert("메뉴명은 Not Null 항목입니다."); return false;}
+
+ return true;
+ }
+
+ /* ********************************************************
+ * 메뉴이동 화면 호출 함수
+ ******************************************************** */
+ function mvmnMenuList() {
+ window.open("<c:url value='/sym/mnu/mpm/EgovMenuListSelectMvmn.do' />",'Pop_Mvmn','scrollbars=yes,width=617,height=600');
+ }
+
+ /* ********************************************************
+ * 메뉴등록 처리 함수
+ ******************************************************** */
+ function insertMenuList() {
+ $('input[name="menuProgramList.defaultYn"]').each(function(i) {
+ fncRename(this, i);
+ });
+
+ $('input[name="menuProgramList.progrUrl"]').each(function(i) {
+ fncRename(this, i);
+ });
+
+ $('input[name="menuProgramList.progrUrlNm"]').each(function(i) {
+ fncRename(this, i);
+ });
+
+ $('input[name="deleteProgramList.progrUrl"]').each(function(i) {
+ fncRename(this, i);
+ });
+
+ var form = jQuery('form[name="menuInfoVO"]');
+ form.attr('action', '<c:url value="/menu/program/MenuInfoInsert.do"/>');
+ form.submit();
+ }
+
+ /* ********************************************************
+ * 메뉴삭제 처리 함수
+ ******************************************************** */
+ function deleteMenuList() {
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ var nodes = zTree.getSelectedNodes();
+
+ if( !nodes[0].children) {
+ if(confirm("삭제하시겠습니까?")) {
+ zTree.selectNode(nodes[0]);
+ var param = {
+ menuNo : nodes[0].menuNo,
+ upperMenuNo : nodes[0].upperMenuNo
+ };
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/program/MenuInfoDelete.do' />",
+ data : param,
+ dataType : 'json',
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ success : function(result){
+ //노드 삭제
+ zTree.removeNode(nodes[0]);
+ viewTable(result);
+
+ //추가 시 DB 저장 후 노드 생성
+ var node = zTree.getNodeByParam("id", result.result.menuNo, null);
+ zTree.selectNode(node);
+ },
+ complete:function(){
+ $.unblockUI();
+ },
+ error:function(request,error) {
+ console.log("노드 삭제 시 데이터 조회 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+ } else {
+ return false;
+ }
+ } else {
+ alert("하위 메뉴 먼저 삭제하여 주십시오.");
+ return false;
+ }
+ }
+
+ function insertTreeMenuList() {
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ var nodes = zTree.getSelectedNodes();
+
+ if (nodes == "" || nodes == null || nodes == undefined || ( nodes != null && typeof nodes == "object" && !Object.keys(nodes).length ) ) {
+ alert("메뉴를 선택해주세요.");
+ return false;
+ }
+
+ var add = {
+ menuNm : '메뉴명' + newCount,
+ upperMenuNo : nodes[0].menuNo,
+ menuGb : nodes[0].menuGb
+ }
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/program/MenuInfoTreeInsert.do' />",
+ data : add,
+ dataType : 'json',
+ success : function(result){
+ //추가 시 DB 저장 후 노드 생성
+ zTree.addNodes(nodes[0], { id:result.result.menuNo , pId:nodes[0].id, name:"메뉴명" + (newCount++),
+ menuNo:result.result.menuNo, upperMenuNo:result.result.upperMenuNo });
+ //id 데이터 가져온 후 node 검색
+ var node = zTree.getNodeByParam("id", result.result.menuNo, null);
+ //node 이름 변경
+ zTree.editName(node);
+ viewTable(result);
+
+ //node 선택
+ return zTree.selectNode(node);
+ },
+ error:function(request,error) {
+ console.log("트리에서 노드 추가 시 등록 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+ }
+
+ function fncUrlContrl(obj) {
+ var tbody = jQuery('.progUrl').find('tbody');
+ //프로그램 URL 초기화
+
+ //프로그램 구분 이동시 데이터가 있으면 삭제처리
+ tbody.find('input[name="menuProgramList.progrUrl"]').each(function(i) {
+ if ($(this).val().trim() != '') {
+ var val = $(this).val();
+ var form = jQuery('form[name="menuInfoVO"]');
+ var tr = jQuery(obj).closest('tr');
+ var dom = "";
+ dom += '<input name="deleteProgramList.progrUrl" type="text" value="' + val + '">';
+ jQuery(dom).appendTo(form);
+ }
+ });
+
+ tbody.empty();
+
+ var conVal = jQuery(obj).val();
+ if (conVal == 'P') {
+ jQuery(obj).closest('td').find('button[class="btn_board"]').attr('style', 'display:none');
+
+ var menuNm = jQuery('input[name="menuNm"]').val();
+ menuNm = menuNm + "_메인";
+
+ var radioNum = "menuProgramList.defaultYn1";
+ var dom = '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox" checked="checked"/>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'add\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+ } else if (conVal == 'B') {
+ jQuery(obj).closest('td').find('button[class="btn_board"]').removeAttr( 'style' );
+ } else if (conVal == 'D') {
+ jQuery(obj).closest('td').find('button[class="btn_board"]').attr('style', 'display:none');
+
+ var menuNm = jQuery('input[name="menuNm"]').val();
+ menuNm = menuNm + "_디렉토리";
+
+ var radioNum = "menuProgramList.defaultYn1";
+ var dom = '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox" checked="checked"/><label for="' + radioNum + '"><span></span></label>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="' + menuNm + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="dir" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'add\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+ }
+
+ jQuery(dom).appendTo(tbody);
+ }
+
+ /* ********************************************************
+ * 컨텐츠 선택팝업
+ ******************************************************** */
+ function fncPopup(obj) {
+ var GB = jQuery(obj).closest('td').find('input[name="progrGb"]:checked').val();
+
+ var url = "";
+ var status = "width=860,height=780,top=100,left=100, scrollbars=yes";
+ if (GB == 'B') {
+ url = "<c:url value='/menu/program/ProgramBbsListSearch.do'/>";
+ }
+
+ window.open(url, 'popup', status);
+ }
+
+ function getReturnValue(obj) {
+ var tbody = jQuery('.progUrl').find('tbody');
+ tbody.empty();
+
+ if (obj.returnGb == "C") {
+ var menuNm = jQuery('input[name="menuNm"]').val();
+ menuNm = menuNm + "_메인";
+
+ var radioNum = "menuProgramList.defaultYn1";
+ var dom = '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox" checked="checked"/>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="' + menuNm + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="' + obj.url + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'add\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+ } else if (obj.returnGb == "B") {
+ var dom = "";
+ var radioNum = "";
+ var menuNm = jQuery('input[name="menuNm"]').val();
+
+ var prefix = '';
+ if(obj.authorType == 'admin'){
+ prefix = '/manage';
+ }
+
+ //목록
+ radioNum = "menuProgramList.defaultYn1";
+ dom += '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox" checked="checked"/>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="' + menuNm + '_목록' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="' + '/cop/bbs'+prefix+'/' + obj.bbsId + '/selectArticleList.do' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'add\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+
+ //상세
+ radioNum = "menuProgramList.defaultYn2";
+ dom += '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox"/>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="' + menuNm + '_상세' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="' + '/cop/bbs'+prefix+'/' + obj.bbsId + '/selectArticleDetail.do' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'add\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+
+ //등록
+ radioNum = "menuProgramList.defaultYn3";
+ dom += '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox"/>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="' + menuNm + '_등록' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="' + '/cop/bbs'+prefix+'/' + obj.bbsId + '/insertArticleView.do' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'add\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+
+ //수정
+ radioNum = "menuProgramList.defaultYn3";
+ dom += '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox"/>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="' + menuNm + '_수정' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="' + '/cop/bbs'+prefix+'/' + obj.bbsId + '/updateArticleView.do' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'add\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+
+ //답글 등록
+ radioNum = "menuProgramList.defaultYn4";
+ dom += '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox"/>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="' + menuNm + '_답글 등록' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="' + '/cop/bbs'+prefix+'/' + obj.bbsId + '/replyArticleView.do' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'add\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+
+ //익명게시판 비밀번호 확인
+ if (obj.bbsTyCode == "BBST05") {
+ radioNum = "menuProgramList.defaultYn5";
+ dom += '<tr>';
+ dom += '<td style="text-align:center;">';
+ dom += '<input type="radio" name="menuProgramList.defaultYn" id="' + radioNum + '" value="Y" class="checkbox"/>';
+ dom += '<label for="' + radioNum + '" class="input-label radio"><span></span></label>';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrlNm" type="text" value="' + menuNm + '_비밀번호 확인' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td>';
+ dom += '<input name="menuProgramList.progrUrl" type="text" value="' + '/cop/bbs/' + obj.bbsId + '/anonymousUpdate.do' + '" class="width100p inputText">';
+ dom += '</td>';
+ dom += '<td style="text-align:center;">';
+ dom += '<a href="#!" onclick="removeUrl(this, \'add\')"><button class="btn_m" type="button">삭제</button></a>';
+ dom += '</td>';
+ dom += '</tr>';
+ }
+ }
+
+ jQuery(dom).appendTo(tbody);
+ }
+</script>
+<noscript class="noScriptTitle">
+ <spring:message code="common.noScriptTitle.msg" />
+</noscript>
+
+<div class="board_header">
+ <h3>${pageTitle }</h3>
+</div>
+<form name="menuInfoVO" action="" method="post" style="height:100%;">
+ <div class="board_body pd0">
+ <div class="body_left">
+ <c:import url="/menu/program/ProgrmListTreeSelect.do">
+ <c:param name="menuType" value="progrm" />
+ </c:import>
+ </div>
+ <div class="body_right">
+ <p class="must_text"><em>*</em>는 필수 입력사항입니다.</p>
+ <table class="table_write">
+ <caption>프로그램 리스트 - 메뉴구분, 메뉴No, 메뉴순서, 메뉴명, 상위메뉴No, 관련이미지, 메뉴설명, 프로그램 구분, 사용유무로 구성</caption>
+ <colgroup>
+ <col class="width200">
+ <col/>
+ </colgroup>
+ <tbody>
+ <tr>
+ <th scope="row" class="must"><label for="menuGb">메뉴구분</label></th>
+ <td>
+ <ul class="check_auto">
+ <c:forEach var="menuGbList" items="${menuGbList }" varStatus="status">
+ <li>
+ <c:set var="checked" value=" "/>
+ <c:choose>
+ <c:when test="${empty menuInfo.menuGb }">
+
+ <c:choose>
+ <c:when test="${status.index eq 0 }">
+ <c:set var="checked" value="checked='checked'"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="checked" value=" "/>
+ </c:otherwise>
+ </c:choose>
+ </c:when>
+ <c:otherwise>
+ <c:if test="${menuInfo.menuGb eq menuGbList.code }">
+ <c:set var="checked" value="checked='checked'"/>
+ </c:if>
+ </c:otherwise>
+ </c:choose>
+ <input type="radio" name="menuGb" id="menuGb<c:out value="${status.index }"/>" value="<c:out value="${menuGbList.code }"/>" class="checkbox" <c:out value="${checked }"/>/>
+ <label for="menuGb<c:out value="${status.index }"/>" class="input-label radio"><c:out value="${menuGbList.codeNm }"/></label>
+ </li>
+ </c:forEach>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row" class="must"><label for="menuNo">메뉴No</label></th>
+ <td>
+ <input name="menuNo" type="text" size="10" value="" maxlength="10" title="메뉴No" class="width100p inputText" readonly="readonly">
+ </td>
+ </tr>
+ <tr>
+ <th scope="row" class="must"><label for="menuOrdr">메뉴순서</label></th>
+ <td><input name="menuOrdr" type="text" size="10" value="" maxlength="10" title="메뉴순서" class="width100p inputText">
+ </td>
+ </tr>
+ <tr>
+ <th scope="row" class="must"><label for="menuNm">메뉴명</label></th>
+ <td><input name="menuNm" type="text" size="60" value="" maxlength="60" title="메뉴명" class="width100p inputText">
+ </td>
+ </tr>
+ <tr>
+ <th scope="row" class="must"><label for="upperMenuNo">상위메뉴No</label></th>
+ <td><input name="upperMenuNo" type="text" size="10" value="" maxlength="10" title="상위메뉴No" class="width100p inputText" readonly="readonly">
+ </td>
+ </tr>
+ <tr>
+ <th scope="row" class="must"><label for="relateImage">관련이미지</label><span class="pilsu">*</span></th>
+ <td><input name="relateImage" type="text" size="30" value="" maxlength="30" title="관련이미지명" class="width100p inputText">
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><label for="menuDc">메뉴설명</label></th>
+ <td class="lh0"><textarea name="menuDc" class="textArea height100 width100p" cols="45" rows="8" style="width: 350px;" title="메뉴설명"></textarea>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><label for="menuDc">프로그램 구분</label></th>
+ <td>
+ <ul class="check_auto">
+ <li>
+ <input type="radio" name="progrGb" id="progrGb2" value="P" class="checkbox" checked="checked" onclick="fncUrlContrl(this);"/>
+ <label for="progrGb2" class="input-label radio">프로그램</label>
+ </li>
+ <li>
+ <input type="radio" name="progrGb" id="progrGb3" value="B" class="checkbox" onclick="fncUrlContrl(this);"/>
+ <label for="progrGb3" class="input-label radio">게시판</label>
+ </li>
+ <li>
+ <input type="radio" name="progrGb" id="progrGb4" value="D" class="checkbox" onclick="fncUrlContrl(this);"/>
+ <label for="progrGb4" class="input-label radio">디렉토리</label>
+ </li>
+ <li>
+ <button class="btn_s" type="button" onClick="fncPopup(this);">조회</button>
+ </li>
+ </ul>
+
+ </td>
+ </tr>
+ <tr>
+ <th scope="row">
+ <label for="useYn">사용유무</label>
+ </th>
+ <td>
+ <ul class="check_auto">
+ <li>
+ <input type="radio" name="useYn" id="useYn1" value="Y" class="checkbox" checked="checked"/>
+ <label for="useYn1" class="input-label radio">사용</label>
+ </li>
+ <li>
+ <input type="radio" name="useYn" id="useYn2" value="N" class="checkbox"/>
+ <label for="useYn2" class="input-label radio">미사용</label>
+ </li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="space40"></div>
+ <table class="table_write progUrl">
+ <caption>URL 설정 - 대표URL 설정, 프로그램 URL 명, 프로그램 URL, 추가버튼으로 구성</caption>
+ <colgroup>
+ <col style="width:10%;">
+ <col style="width:35%;">
+ <col style="">
+ <col class="width80">
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col" >대표 URL 설정</th>
+ <th scope="col" >프로그램 URL 명</th>
+ <th scope="col" >프로그램 URL</th>
+ <th scope="col" >
+ <a href="#!" onclick="addUrl(this);"><button class="btn_s bgcolor03" type="button">추가</button></a>
+ </th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td style="text-align:center;">
+ <input type="radio" name="menuProgramList.defaultYn" id="menuProgramList.defaultYn1" value="Y" class="checkbox" checked="checked"/>
+ <label for="menuProgramList.defaultYn1" class="input-label radio"><span></span></label>
+ </td>
+ <td>
+ <input name="menuProgramList.progrUrlNm" type="text" class="width100p inputText">
+ </td>
+ <td>
+ <input name="menuProgramList.progrUrl" type="text" class="width100p inputText">
+ </td>
+ <td style="text-align:center;">
+ <%-- <a href="#!"><image src="<c:url value="/images/temp/remove_action.png"/>" />" height="20px;"></a> --%>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <div class="board_footer">
+ <div class="bottom_wrap fr">
+ <button class="btn_s" type="button" onclick="insertTreeMenuList(); return false;" title="<spring:message code="button.save" /> <spring:message code="input.button" />">
+ <spring:message code="button.newCreate" />
+ </button>
+ <button class="btn_s" type="button" onclick="deleteMenuList(); return false;" title="<spring:message code="button.delete" /> <spring:message code="input.button" />">
+ <spring:message code="button.delete" />
+ </button>
+ <button class="btn_s" type="button" onclick="insertMenuList(); return false;" title="<spring:message code="button.save" /> <spring:message code="input.button" />">
+ <spring:message code="button.save" />
+ </button>
+ </div>
+ </div>
+</form>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgrmList.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgramBbsListSearch.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgramBbsListSearch.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgramBbsListSearch.jsp (revision 10)
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<%@ 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 prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<%@ 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
+ *
+ */
+%>
+<title>${pageTitle }</title>
+<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=yes" />
+<!--main-->
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/admin/style.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/admin/board.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/admin/admin.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+<link rel="stylesheet" type="text/css" href="<c:url value='/css/admin/popup.css'><c:param name="dt" value="${nowDate}"/></c:url>" />
+<script type="text/javaScript">
+/* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function linkPage(pageNo) {
+ document.progrmManageForm.pageIndex.value = pageNo;
+ document.progrmManageForm.action = "<c:url value='/menu/program/ProgramBbsListSearch.do'/>";
+ document.progrmManageForm.submit();
+}
+
+/* ********************************************************
+ * 조회 처리 함수
+ ******************************************************** */
+function selectProgramListSearch() {
+ document.progrmManageForm.pageIndex.value = 1;
+ document.progrmManageForm.action = "<c:url value='/menu/program/ProgramBbsListSearch.do'/>";
+ document.progrmManageForm.submit();
+}
+
+/* ********************************************************
+ * 프로그램목록 선택 처리 함수
+ ******************************************************** */
+function choisBbsListSearch(bbsId, bbsTyCode, authorType) {
+
+ bbsId = bbsId.replace('BBSMSTR_', '');
+ var returnValue = {
+ bbsId : bbsId,
+ returnGb : "B",
+ bbsTyCode : bbsTyCode,
+ authorType : authorType
+ }
+
+ window.opener.getReturnValue(returnValue);
+ window.close();
+}
+</script>
+<c:set var="pageTitle">게시판조회</c:set>
+<div class="popup_content">
+ <form name="progrmManageForm" action="<c:url value='/menu/program/ProgramBbsListSearch.do'/>" method="post">
+ <div class="popup_header">
+ <h3 class="fl popup_title">${pageTitle }</h3>
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />" style="margin-top: 10px; margin-right: 10px;">
+ <select name="searchCondition" id="searchCondition" class="selectText fl width150" title="검색조건">
+ <option value="0"><spring:message code="comCopBbs.articleVO.list.nttSj" /></option>
+ </select>
+ <input class="inputText" id="searchKeyword" 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">
+ <button type="button" class="btn_board" onclick="selectProgramListSearch();return false;" title="<spring:message code="title.inquire" /> <spring:message code="input.button" />"><spring:message code="button.inquire" /></button>
+ </div>
+ </div>
+ <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>" />
+ <div class="popup_body">
+ <table class="table_list">
+ <caption>게시판조회 - <spring:message code="comCopBbs.boardMasterVO.detail.bbsNm" />, <spring:message code="comCopBbs.boardMasterVO.detail.bbsIntrcn" />, 사용자, 관리자로 구성</caption>
+ <colgroup>
+ <col style="width: auto;">
+ <col style="width: auto;">
+ <col style="width: 10%;">
+ <col style="width: 10%;">
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col"><spring:message code="comCopBbs.boardMasterVO.detail.bbsNm" /></th>
+ <th scope="col"><spring:message code="comCopBbs.boardMasterVO.detail.bbsIntrcn" /></th>
+ <th scope="col">사용자</th>
+ <th scope="col">관리자</th>
+ <!--글 제목 -->
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="result" items="${list_Contents}" varStatus="status">
+ <tr>
+ <td><span class="link"> <strong><c:out value="${result.bbsNm}" /></strong>
+ </span></td>
+ <td><c:out value="${result.bbsIntrcn }" /></td>
+ <td>
+ <button onclick="choisBbsListSearch('<c:out value="${result.bbsId}"/>', '<c:out value="${result.bbsTyCode}"/>', 'user'); return false;">선택</button>
+ </td>
+ <td>
+ <button onclick="choisBbsListSearch('<c:out value="${result.bbsId}"/>', '<c:out value="${result.bbsTyCode}"/>', 'admin'); return false;">선택</button>
+ </td>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+ </div>
+ <div class="popup_footer alignC">
+ <!-- paging navigation -->
+ <div class="page" role="group" aria-label="...">
+ <ul>
+ <ui:pagination paginationInfo="${paginationInfo}" type="admin" jsFunction="fnLinkPage" />
+ </ul>
+ </div>
+ </div>
+ </form>
+</div>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/program/EgovProgramBbsListSearch.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovFunctionUserCreat.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovFunctionUserCreat.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovFunctionUserCreat.jsp (revision 10)
@@ -0,0 +1,321 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<%@ 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 prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<jsp:useBean id="today" class="java.util.Date" />
+<fmt:formatDate value="${today}" pattern="yyyyMMddHHmm" var="nowDate"/>
+<%
+ /**
+ * @Class Name : EgovMenuCreat.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/mcm/icon/";
+ // String imagePath_button = "/images/egovframework/com/sym/mnu/mcm/button/";
+%>
+<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'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/zTree/css/demo.css'><c:param name="dt" value="${nowDate}"/></c:url>"/>
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/zTree/css/zTreeStyle/zTreeStyle.css'><c:param name="dt" value="${nowDate}"/></c:url>"/>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.core.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.excheck.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.exedit.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/multijs/multi.css'><c:param name="dt" value="${nowDate}"/></c:url>"/>
+<script type="text/javascript" src="<c:url value='/resource/multijs/multi.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<script language="javascript1.2" type="text/javaScript">
+ //사용자 권한 생성
+ function fInsertMenuCreat() {
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ var nodes = zTree.getSelectedNodes();
+
+ if (nodes == "") {
+ alert("메뉴를 선택해주세요.");
+ return false;
+ }
+
+ var table = jQuery('.sub_contents_box').find('table');
+
+ var param = {};
+ table.each(function (i) {
+ var functionCode = jQuery(this).find('input[name="functionCode"]').val();
+ var menuNo = jQuery(this).find('input[name="menuNo"]').val();
+ param['functionList[' + i + '].functionCode'] = functionCode;
+ param['functionList[' + i + '].menuNo.menuNo'] = menuNo;
+ var userId = jQuery(this).find('select[name="userAutho"]').val();
+ if (userId != null && userId != "" && userId != undefined) {
+ for (var j = 0; j < userId.length; j++) {
+ param['functionList[' + i + '].functionList[' + j + '].userId'] = userId[j];
+ param['functionList[' + i + '].functionList[' + j + '].functionCode'] = functionCode;
+ param['functionList[' + i + '].functionList[' + j + '].menuNo.menuNo'] = menuNo;
+ }
+ }
+ });
+
+ //저장
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/autho/insertUserFuntionInfo.do' />",
+ data : param,
+ dataType : 'json',
+ success : function(result){
+ if (result.result == "SUCCESS") {
+ alert("기능권한을 생성하였습니다.");
+ }
+ },
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ complete:function(){
+ $.unblockUI();
+ },
+ error:function(request,error) {
+ console.log("메뉴별 사용자 권한 등록 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+ }
+
+
+ var setting = {
+ view: {
+ selectedMulti: false
+ },
+ check: {
+ enable: false
+ },
+ data: {
+ simpleData: {
+ enable: true
+ }
+ },
+ callback: {
+ beforeClick: beforeClick,
+ onClick: onClick
+ }
+ };
+
+ //노드 필터
+ function filter(node) {
+ return (node.functionCode != "" && node.functionCode != undefined);
+ }
+
+ //노드 클릭 전 이벤트
+ function beforeClick(treeId, treeNode, clickFlag) {
+ var flag = false;
+ if (treeNode.functionCode == "") {
+ if (treeNode.children != undefined) {
+ for (var i = 0; i < treeNode.children.length; i++) {
+ if (treeNode.children[i].functionCode != "" && treeNode.children[i].functionCode != undefined) {
+ flag = true;
+ }
+ }
+ }
+ } else {
+ flag = true;
+ }
+
+ if (!flag) {
+ alert("해당 메뉴에는 기능이 정의되지 않았습니다.");
+ return false;
+ }
+ };
+
+ //노드 클릭 시
+ function onClick(event, treeId, treeNode) {
+ //노드 클릭 시 정보 변경
+ var div = jQuery('.sub_contents_box');
+ div.find('table').remove();
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/autho/selectUserInfo.do' />",
+ dataType : 'json',
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ success : function(result) {
+ //multiSelect 생성
+ createMultiSelect(treeNode, div, result);
+ },
+ error:function(request,error) {
+ console.log("노드 클릭 시 데이터 조회 :"+request.status+"\n"+"error:"+error);
+ }
+ }).done(function() {
+ $.unblockUI();
+ });
+
+ }
+
+ //multiSelect 생성
+ function createMultiSelect(treeNode, div, result) {
+ console.log(treeNode);
+ var children = treeNode.children;
+ var fncList = "";
+ if (treeNode.functionCode != "") {
+ fncList = [{
+ menuNo : treeNode.menuNo,
+ functionCode : treeNode.functionCode,
+ name : treeNode.functionNm
+ }];
+ } else {
+ fncList = new Array();
+ for (var i = 0; i < children.length; i++) {
+ if (children[i].functionCode != "") {
+ fncList.push({
+ menuNo : children[i].menuNo,
+ functionCode : children[i].functionCode,
+ name : children[i].functionNm
+ });
+ }
+ }
+ }
+
+ var param;
+ for (var i = 0; i < fncList.length; i++) {
+ select = "";
+ //노드 클릭 시 정보 변경
+ param = {
+ 'functionCode' : fncList[i].functionCode,
+ 'menuNo.menuNo' : fncList[i].menuNo
+ };
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/autho/selectUserFunctionInfo.do' />",
+ data : param,
+ dataType : 'json',
+ async:false,
+ success : function( data, textStatus, jqXHR ) {
+ var dom = "";
+ dom += '<table class="table_write">';
+ dom += '<tbody>';
+ dom += '<tr>';
+ dom += '<th scope="col" >';
+ dom += fncList[i].name + " ( " + fncList[i].functionCode + " )";
+ dom += '<input type="hidden" name="functionCode" value="' + fncList[i].functionCode + '">';
+ dom += '<input type="hidden" name="menuNo" value="' + fncList[i].menuNo + '">';
+ dom += '</th>';
+ dom += '</tr>';
+ dom += '<tr>';
+ dom += '<td>';
+ dom += '<select multiple="multiple" name="userAutho" style="display: none;">';
+ for (var j = 0; j < result.length; j++) {
+ var selected = "";
+ for (var l = 0; l < data.length; l++) {
+ if (data[l].userId == result[j].esntlId) {
+ selected = 'selected="selected"';
+ }
+ }
+ dom += '<option value="' + result[j].esntlId + '" ' + selected + '>' + result[j].userId + " : " + result[j].userNm + '</option>';
+ }
+ dom += '</select>';
+ dom += '</td>';
+ dom += '</tr>';
+ dom += '</tbody>';
+ dom += '</table>';
+
+ jQuery(dom).appendTo(div);
+
+ select = document.getElementsByName("userAutho")[i];
+ //multi_select
+ multi(select, {
+ 'non_selected_header': '사용자 목록',
+ 'selected_header': '권한부여된 사용자 목록',
+ 'search_placeholder' : '사용자 검색'
+ });
+ },
+ error:function(request,error) {
+ console.log("노드 클릭 시 데이터 조회 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+ }
+ }
+
+ var zNodes = [
+ <c:forEach var="list" items="${menuInfoList }" varStatus="status">
+ { id:"${list.id }", pId:"${list.pId }", menuNo:"${list.menuNo }", upperMenuNo:"${list.upperMenuNo }", name:"${list.menuNm }", open:true, functionCode:""},
+ <c:forEach items="${list.menuFunctionList}" var="fList" varStatus="fStatus">
+ { id:"${fStatus.count }_${fStatus.count}", pId:"${fList.funcId }", menuNo:"${fList.menuNo }", functionCode:"${fList.functionCode}", functionNm:"${fList.functionNm }", name:"${fList.functionNm } (★)", icon:'<c:url value="/resource/zTree/css/zTreeStyle/img/diy/3.png"/>"/>', open:true},
+ </c:forEach>
+ </c:forEach>
+ ];
+
+ $(document).ready(function(){
+ $.fn.zTree.init($("#tree"), setting, zNodes);
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ var allNodes = zTree.getNodesByFilter(filter); // search the array of the nodes
+
+ for (var i = 0; i < allNodes.length; i++) {
+ var pNode = zTree.getNodeByParam("id", allNodes[i].pId, null);
+ zTree.moveNode(pNode.children[0], allNodes[i], "prev");
+ }
+ });
+</script>
+<noscript class="noScriptTitle">자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다.</noscript>
+<div class="board_header">
+ <h3>사용자 기능권한 생성</h3>
+</div>
+<form name="menuAuthInfoVO" action="" method="post">
+ <div class="board_body pd0">
+ <div class="body_left">
+ <ul id="tree" class="ztree"></ul>
+ </div>
+ <div class="body_right sub_contents_box">
+ <table class="table_write">
+ <caption>메뉴별 사용자 기능권한 생성을 위한 표</caption>
+ <colgroup>
+ <col style="">
+ </colgroup>
+ <tbody>
+ <tr>
+ <th scope="col">
+ 메뉴를 선택해주세요.
+ </th>
+ </tr>
+ <tr>
+ <td>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <div class="board_footer">
+ <div class="bottom_wrap fr">
+ <button class="btn_s" type="button" onclick="fInsertMenuCreat(); return false;" title="<spring:message code="button.save" /> <spring:message code="input.button" />">
+ <spring:message code="button.save" />
+ </button>
+ </div>
+ </div>
+</form>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovFunctionUserCreat.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuAutoCreat.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuAutoCreat.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuAutoCreat.jsp (revision 10)
@@ -0,0 +1,203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<%@ 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 prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<jsp:useBean id="today" class="java.util.Date" />
+<fmt:formatDate value="${today}" pattern="yyyyMMddHHmm" var="nowDate"/>
+<%
+ /**
+ * @Class Name : EgovMenuCreat.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/mcm/icon/";
+ // String imagePath_button = "/images/egovframework/com/sym/mnu/mcm/button/";
+%>
+<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'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/zTree/css/demo.css'><c:param name="dt" value="${nowDate}"/></c:url>"/>
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/zTree/css/zTreeStyle/zTreeStyle.css'><c:param name="dt" value="${nowDate}"/></c:url>"/>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.core.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.excheck.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.exedit.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<script language="javascript1.2" type="text/javaScript">
+/* ********************************************************
+ * 멀티입력 처리 함수
+ ******************************************************** */
+function fInsertMenuCreat() {
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ var nodes = zTree.getCheckedNodes(true);
+ var param = {};
+ var authorCode = jQuery('select[name="authorCode"]').val();
+ param['authorCode'] = authorCode;
+ var cnt = 0;
+ for (var i = 0; i < nodes.length; i++) {
+ if (nodes[i].progrUrl != "" && nodes[i].progrUrl != undefined) {
+ param['authoInfoList[' + cnt + '].authorCode'] = authorCode;
+ param['authoInfoList[' + cnt + '].menuNo.menuNo'] = nodes[i].menuNo;
+ param['authoInfoList[' + cnt + '].progrUrl.progrUrl'] = nodes[i].progrUrl;
+ cnt++;
+ }
+ }
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/autho/insertAuthoInfo.do' />",
+ data : param,
+ dataType : 'json',
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ success : function(result){
+ if (result.result == "SUCCESS") {
+ alert("메뉴권한을 생성하였습니다.");
+ }
+ },
+ complete:function(){
+ $.unblockUI();
+ },
+ error:function(request,error) {
+ console.log("권한별 메뉴정보 권한 등록 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+}
+
+/* ********************************************************
+ * 권한 변경 시 권한정보 변경
+ ******************************************************** */
+function fncAuthoList(obj) {
+ document.menuCreatManageForm.authorCode.value = obj.value;
+ document.menuCreatManageForm.action="<c:url value='/menu/autho/authoManage.do'/>";
+ document.menuCreatManageForm.submit();
+}
+
+/* ********************************************************
+ * 메뉴생성관리 화면 호출
+ ******************************************************** */
+function fCreatManageSelect(){
+ document.menuCreatManageForm.action="<c:url value='/menu/autho/EgovMenuCreatManageSelect.do'/>";
+ document.menuCreatManageForm.submit();
+}
+
+ var setting = {
+ check: {
+ enable: true
+ },
+ data: {
+ simpleData: {
+ enable: true
+ }
+ },
+ callback: {
+ onClick: onClick
+ }
+ };
+
+ //노드 필터
+ function filter(node) {
+ return (node.progrUrl != "dir" && node.progrUrl != "");
+ }
+
+ function onClick(event, treeId, treeNode) {
+ }
+
+ var zNodes = [
+ <c:forEach var="list" items="${menuInfoList }" varStatus="status">
+ { id:"${list.id }", pId:"${list.pId}", upperMenuNo:"${list.upperMenuNo }", menuNo:"${list.menuNo }", name:"${list.menuNm }", progrUrl:"", open:true},
+ <c:forEach var="proGrmList" items="${list.menuProgramList }" varStatus="proStatus">
+ { id:"${status.count }_${proStatus.count }", pId:"${proGrmList.proId }", menuNo:"${proGrmList.menuNo }", name:"${proGrmList.progrUrlNm }", progrUrl:"${proGrmList.progrUrl }", open:true},
+ </c:forEach>
+ </c:forEach>
+ ];
+
+ $(document).ready(function(){
+ $.fn.zTree.init($("#tree"), setting, zNodes);
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ var nodes = zTree.getNodesByParam("progrUrl", "dir", null);
+ for (var i = 0; i < nodes.length; i++) {
+ var node = zTree.getNodeByParam("id", nodes[i].pId, null);
+ node.progrUrl = "dir";
+ zTree.updateNode(node);
+ zTree.removeNode(nodes[i]);
+ }
+
+ var chkNodes = new Array();
+ <c:forEach items="${authoInfoList}" var="list">
+ chkNodes.push({
+ "authorSeq" : "${list.authorSeq}",
+ "authorCode" : "${list.authorCode}",
+ "menuNo" : {
+ menuNo : "${list.menuNo.menuNo}"
+ },
+ "progrUrl" : {
+ "progrUrl" :"${list.progrUrl.progrUrl}"
+ }
+ });
+ </c:forEach>
+
+ var allNodes = zTree.getNodesByFilter(filter); // search the array of the nodes
+ //Tree init시 노드 체크
+ for (var i = 0; i < allNodes.length; i++) {
+ for (var j = 0; j < chkNodes.length; j++) {
+ if (chkNodes[j].progrUrl.progrUrl != "dir") {
+ if (allNodes[i].menuNo == chkNodes[j].menuNo.menuNo) {
+ if (allNodes[i].progrUrl == chkNodes[j].progrUrl.progrUrl) {
+ zTree.checkNode(allNodes[i], true, true);
+ }
+ }
+ }
+ }
+ }
+ });
+
+
+</script>
+<noscript class="noScriptTitle">자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다.</noscript>
+<div class="board_header">
+ <h3>롤 권한생성</h3>
+ <div class="search_box" title="<spring:message code="common.searchCondition.msg" />">
+ <select class="select width250" name="authorCode" title="<spring:message code="title.search" /> <spring:message code="input.input" />" onchange="fncAuthoList(this);">
+ <c:forEach var="list" items="${authoList }">
+ <option value="${list.authorCode }" <c:if test="${resultVO.authorCode eq list.authorCode}">selected="selected"</c:if>><c:out value="${list.authorNm }"></c:out> </option>
+ </c:forEach>
+ </select>
+ <button type="button" class="btn_board" style="margin-left: 3px;" onclick="fInsertMenuCreat(); return false;">메뉴생성</button>
+ <button type="button" class="btn_board" style="margin-right: 3px;" onclick="fCreatManageSelect(); return false;">목록</button>
+ </div>
+</div>
+<form name="menuCreatManageForm" action="<c:url value='/menu/autho/authoManage.do' />" method="post" class="height100p">
+ <input type="hidden" name="authorCode" value="${resultVO.authorCode }">
+ <input type="hidden" name="pageIndex" value="${resultVO.pageIndex }">
+ <div class="board_body pd0 full">
+ <div class="body_left onlyleft width400">
+ <div class="ztree_wrap">
+ <ul id="tree" class="ztree"></ul>
+ </div>
+ </div>
+ </div>
+</form>
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuAutoCreat.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuCreatManage.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuCreatManage.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuCreatManage.jsp (revision 10)
@@ -0,0 +1,103 @@
+<!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"%>
+<c:set var="pageTitle">메뉴권한관리</c:set>
+<%
+ /**
+ * @Class Name : EgovMenuCreatManage.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/mcm/icon/";
+ String imagePath_button = "/images/egovframework/com/sym/mnu/mcm/button/";
+%>
+<script type="text/javaScript" language="javascript">
+<!--
+/* ********************************************************
+ * 페이징 처리 함수
+ ******************************************************** */
+function linkPage(pageNo){
+ document.menuCreatManageForm.pageIndex.value = pageNo;
+ 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='/menu/autho/authoManage.do'/>";
+ document.menuCreatManageForm.submit();
+}
+ <c:if test="${!empty resultMsg}">alert("${resultMsg}");</c:if>
+ -->
+</script>
+<noscript class="noScriptTitle">
+ <spring:message code="common.noScriptTitle.msg" />
+</noscript>
+<div class="board_header">
+ <h3>${pageTitle }</h3>
+</div>
+
+<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="board_body">
+ <table class="table_list" summary="<spring:message code="common.summary.list" arguments="${pageTitle }" />">
+ <caption>메뉴생성관리 조회 - 권한코드, 권한명, 권한설명, 메뉴생성여부, 메뉴생성으로 구성</caption>
+ <colgroup>
+ <col style="width: 30%;">
+ <col style="width: 30%;">
+ <col style="width: 15%;">
+ <col style="width: 10%;">
+ <col class="width100">
+ </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 class="ov">
+ <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 class="left">
+ <button type="button" class="btn_s" onclick="selectMenuCreat('<c:out value="${result.authorCode}"/>');return false;">메뉴생성</button>
+ </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>
+ <input type="hidden" name="req_menuNo">
+</form>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuCreatManage.jsp
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuUserCreat.jsp
===================================================================
--- base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuUserCreat.jsp (nonexistent)
+++ base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuUserCreat.jsp (revision 10)
@@ -0,0 +1,342 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<%@ 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 prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<jsp:useBean id="today" class="java.util.Date" />
+<fmt:formatDate value="${today}" pattern="yyyyMMddHHmm" var="nowDate"/>
+<%
+ /**
+ * @Class Name : EgovMenuCreat.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/mcm/icon/";
+ // String imagePath_button = "/images/egovframework/com/sym/mnu/mcm/button/";
+%>
+<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'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/zTree/css/demo.css'><c:param name="dt" value="${nowDate}"/></c:url>"/>
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/zTree/css/zTreeStyle/zTreeStyle.css'><c:param name="dt" value="${nowDate}"/></c:url>"/>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.core.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.excheck.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+<script type="text/javascript" src="<c:url value='/resource/zTree/js/jquery.ztree.exedit.min.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<link rel="stylesheet" type="text/css" href="<c:url value='/resource/multijs/multi.css'><c:param name="dt" value="${nowDate}"/></c:url>"/>
+<script type="text/javascript" src="<c:url value='/resource/multijs/multi.js'><c:param name="dt" value="${nowDate}"/></c:url>"></script>
+
+<script language="javascript1.2" type="text/javaScript">
+/* ********************************************************
+ * 멀티입력 처리 함수
+ ******************************************************** */
+function fInsertMenuCreat() {
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ var nodes = zTree.getSelectedNodes();
+
+ if (nodes == "") {
+ alert("메뉴를 선택해주세요.");
+ return false;
+ }
+
+ var table = jQuery('.sub_contents_box').find('table');
+
+ var param = {};
+ table.each(function (i) {
+ var menuNo = jQuery(this).find('input[name="menuNo"]').val();
+ var progrUrl = jQuery(this).find('input[name="progrUrl"]').val();
+ param['authoInfoList[' + i + '].menuNo.menuNo'] = menuNo;
+ param['authoInfoList[' + i + '].progrUrl.progrUrl'] = progrUrl;
+
+ var userId = jQuery(this).find('select[name="userAutho"]').val();
+ if (userId != null && userId != "" && userId != undefined) {
+ for (var j = 0; j < userId.length; j++) {
+ param['authoInfoList[' + i + '].authoInfoList[' + j + '].userId'] = userId[j];
+ param['authoInfoList[' + i + '].authoInfoList[' + j + '].menuNo.menuNo'] = menuNo;
+ param['authoInfoList[' + i + '].authoInfoList[' + j + '].progrUrl.progrUrl'] = progrUrl;
+ }
+ }
+ });
+
+ //저장
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/autho/insertUserAuthoInfo.do' />",
+ data : param,
+ dataType : 'json',
+ success : function(result){
+ if (result.result == "SUCCESS") {
+ alert("메뉴권한을 생성하였습니다.");
+ }
+ },
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ complete:function(){
+ $.unblockUI();
+ },
+ error:function(request,error) {
+ console.log("메뉴별 사용자 권한 등록 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+}
+
+/* ********************************************************
+ * 메뉴생성관리 화면 호출
+ ******************************************************** */
+function fCreatManageSelect(){
+ document.menuCreatManageForm.action="<c:url value='/menu/autho/EgovMenuCreatManageSelect.do'/>";
+ document.menuCreatManageForm.submit();
+}
+
+ var setting = {
+ view: {
+ selectedMulti: false
+ },
+ check: {
+ enable: false
+ },
+ data: {
+ simpleData: {
+ enable: true
+ }
+ },
+ callback: {
+ beforeClick: beforeClick,
+ onClick: onClick
+ }
+ };
+
+ //노드 필터
+ function filter(node) {
+ return (node.progrUrl != "dir" && node.progrUrl != "");
+ }
+
+ //노드 클릭 전 이벤트
+ function beforeClick(treeId, treeNode, clickFlag) {
+ /* if (treeNode.progrUrl == "") {
+ alert("메뉴에 대한 URL이 없는 디렉토리 입니다. \nURL이 존재하는 메뉴를 선택해주세요.");
+ onNullClick(treeId, treeNode, clickFlag);
+ } */
+// return (treeNode.progrUrl != "");
+ };
+
+ //노드 클릭 시
+ function onClick(event, treeId, treeNode) {
+ //노드 클릭 시 정보 변경
+ var div = jQuery('.sub_contents_box');
+ div.find('table').remove();
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/autho/selectUserInfo.do' />",
+ dataType : 'json',
+ beforeSend:function(){
+ $.blockUI({
+ message : '<i class="fa fa-refresh fa-spin orange" style="font-size:600%"></i>',
+ css : {
+ backgroundColor : 'rgba(0,0,0,0,0)',
+ color : '#000000', border : '0px solid #a00'
+ }
+ });
+ },
+ success : function(result) {
+ //multiSelect 생성
+ createMultiSelect(treeNode, div, result);
+ },
+ error:function(request,error) {
+ console.log("노드 클릭 시 데이터 조회 :"+request.status+"\n"+"error:"+error);
+ }
+ }).done(function() {
+ $.unblockUI();
+ });
+
+ }
+
+ //multiSelect 생성
+ function createMultiSelect(treeNode, div, result) {
+ var children = treeNode.children;
+ if (treeNode.progrUrl != "") {
+ children = [{
+ menuNo : treeNode.menuNo,
+ progrUrl : treeNode.progrUrl,
+ name : treeNode.name
+ }];
+ }
+
+ var param;
+ for (var i = 0; i < children.length; i++) {
+ select = "";
+ //노드 클릭 시 정보 변경
+ param = {
+ 'menuNo.menuNo' : children[i].menuNo,
+ 'progrUrl.progrUrl' : children[i].progrUrl
+ };
+
+ $.ajax({
+ type : "POST",
+ url : "<c:url value='/menu/autho/selectUserAuthoInfo.do' />",
+ data : param,
+ dataType : 'json',
+ async:false,
+ success : function( data, textStatus, jqXHR ) {
+ var dom = "";
+ dom += '<table class="table_write">';
+ dom += '<tbody>';
+ dom += '<tr>';
+ dom += '<th scope="col" >';
+ dom += children[i].name;
+ dom += '<input type="hidden" name="menuNo" value="' + children[i].menuNo + '">';
+ dom += '<input type="hidden" name="progrUrl" value="' + children[i].progrUrl + '">';
+ dom += '</th>';
+ dom += '</tr>';
+ dom += '<tr>';
+ dom += '<td>';
+ dom += '<select multiple="multiple" name="userAutho" style="display: none;">';
+ for (var j = 0; j < result.length; j++) {
+ var selected = "";
+ for (var l = 0; l < data.length; l++) {
+ if (data[l].userId == result[j].esntlId) {
+ selected = 'selected="selected"';
+ }
+ }
+ dom += '<option value="' + result[j].esntlId + '" ' + selected + '>' + result[j].userId + " : " + result[j].userNm + '</option>';
+ }
+ dom += '</select>';
+ dom += '</td>';
+ dom += '</tr>';
+ dom += '</tbody>';
+ dom += '</table>';
+
+ jQuery(dom).appendTo(div);
+
+ select = document.getElementsByName("userAutho")[i];
+ //multi_select
+ multi(select, {
+ 'non_selected_header': '사용자 목록',
+ 'selected_header': '권한부여된 사용자 목록',
+ 'search_placeholder' : '사용자 검색'
+ });
+ },
+ error:function(request,error) {
+ console.log("노드 클릭 시 데이터 조회 :"+request.status+"\n"+"error:"+error);
+ }
+ });
+ }
+ }
+
+ var zNodes = [
+ <c:forEach var="list" items="${menuInfoList }" varStatus="status">
+ { id:"${list.id }", pId:"${list.pId }", menuNo:"${list.menuNo }", upperMenuNo:"${list.upperMenuNo }", name:"${list.menuNm }", progrUrl:"", open:true},
+ <c:forEach var="proGrmList" items="${list.menuProgramList }" varStatus="proStatus">
+ <c:set var="defaultYn" value=""/>
+ <c:choose>
+ <c:when test="${proGrmList.defaultYn eq 'Y'}">
+ <c:set var="defaultYn" value=" (★)"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="defaultYn" value=""/>
+ </c:otherwise>
+ </c:choose>
+ { id:"${status.count }_${proStatus.count }", pId:"${proGrmList.proId }", menuNo:"${proGrmList.menuNo }", name:"${proGrmList.progrUrlNm } ${defaultYn}", progrUrl:"${proGrmList.progrUrl }", open:true},
+ </c:forEach>
+ </c:forEach>
+ ];
+
+
+ $(document).ready(function(){
+ $.fn.zTree.init($("#tree"), setting, zNodes);
+ var zTree = $.fn.zTree.getZTreeObj("tree");
+ var nodes = zTree.getNodesByParam("progrUrl", "dir", null);
+ for (var i = 0; i < nodes.length; i++) {
+ var node = zTree.getNodeByParam("id", nodes[i].pId, null);
+ node.progrUrl = "dir";
+ zTree.updateNode(node);
+ zTree.removeNode(nodes[i]);
+ }
+
+ /* var chkNodes = new Array();
+ <c:forEach items="${authoInfoList}" var="list">
+ chkNodes.push({
+ "authorSeq" : "${list.authorSeq}",
+ "authorCode" : "${list.authorCode}",
+ "menuNo" : {
+ menuNo : "${list.menuNo.menuNo}"
+ },
+ "progrUrl" : {
+ "progrUrl" :"${list.progrUrl.progrUrl}"
+ }
+ });
+ </c:forEach>
+
+ var allNodes = zTree.getNodesByFilter(filter); // search the array of the nodes
+ //Tree init시 노드 체크
+ for (var i = 0; i < allNodes.length; i++) {
+ for (var j = 0; j < chkNodes.length; j++) {
+ if (chkNodes[j].progrUrl.progrUrl != "dir") {
+ if (allNodes[i].menuNo == chkNodes[j].menuNo.menuNo) {
+ if (allNodes[i].progrUrl == chkNodes[j].progrUrl.progrUrl) {
+ zTree.checkNode(allNodes[i], true, true);
+ }
+ }
+ }
+ }
+ } */
+ });
+</script>
+<noscript class="noScriptTitle">자바스크립트를 지원하지 않는 브라우저에서는 일부 기능을 사용하실 수 없습니다.</noscript>
+<div class="board_header">
+ <h3>사용자 권한 생성</h3>
+</div>
+<form name="menuAuthInfoVO" action="" method="post">
+ <div class="board_body pd0">
+ <div class="body_left">
+ <ul id="tree" class="ztree"></ul>
+ </div>
+ <div class="body_right sub_contents_box">
+ <table class="table_write">
+ <caption>메뉴별 사용자 기능권한 생성을 위한 표</caption>
+ <colgroup>
+ <col style="">
+ </colgroup>
+ <tbody>
+ <tr>
+ <th scope="col">메뉴를 선택해주세요.</th>
+ </tr>
+ <tr>
+ <td></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <div class="board_footer">
+ <div class="fr bottom_wrap">
+ <button class="btn_s" type="button" onclick="fInsertMenuCreat(); return false;" title="<spring:message code="button.save" /> <spring:message code="input.button" />">
+ <spring:message code="button.save" />
+ </button>
+ </div>
+ </div>
+</form>
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/WEB-INF/jsp/egovframework/com/menu/autho/EgovMenuUserCreat.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 (revision 9)
+++ base3.10/src/main/webapp/WEB-INF/jsp/index.jsp (revision 10)
@@ -1,4 +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
+<%-- <jsp:forward page="WEB-INF/jsp/egovframework/com/cmm/EgovUnitMain.jsp"/> --%>
+<jsp:forward page="/EgovUnitMain.do"/>
\ No newline at end of file
Index: base3.10/src/main/webapp/resource/multijs/multi.css
===================================================================
--- base3.10/src/main/webapp/resource/multijs/multi.css (nonexistent)
+++ base3.10/src/main/webapp/resource/multijs/multi.css (revision 10)
@@ -0,0 +1,84 @@
+.multi-wrapper {
+
+ border-radius: 3px;
+ width: 100%;
+ box-sizing:border-box;
+ height:calc(100vh - 333px);
+}
+
+.multi-wrapper .non-selected-wrapper,
+.multi-wrapper .selected-wrapper {
+ box-sizing: border-box;
+ display: inline-block;
+ height: calc(100% - 50px);
+ padding: 0;
+ vertical-align: top;
+ width: calc(50% - 5px);
+ border-radius: 3px;
+ border: 1px solid #ccc;
+}
+
+.multi-wrapper .non-selected-wrapper {
+ background: #fafafa;
+ margin:10px 10px 0 0;
+ overflow-y: auto;
+}
+
+.multi-wrapper .selected-wrapper {
+ background: #fff;
+ margin:10px 0 0 0;
+ overflow-y: auto;
+}
+
+.multi-wrapper .header {
+ color: #4f4f4f;
+ cursor: default;
+ width:100%; box-sizing:border-box;
+ font-weight: bold;
+ background:#f1f1f1;
+ font-size:1.1em;
+ margin-bottom: 5px;
+ padding: 12px 10px 10px;
+ border-bottom:1px solid #ccc;
+}
+
+.multi-wrapper .item {
+ cursor: pointer;
+ display: block;
+ padding: 5px 10px;
+}
+
+.multi-wrapper .item:hover {
+ background: #ececec;
+ border-radius: 2px;
+}
+
+.multi-wrapper .search-input {
+
+ display: block;
+ font-size: 1em;
+ margin: 0;
+ outline: 0;
+ padding:5px 10px;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.admin_contents .multi-wrapper .inputText, .admin_contents .multi-wrapper input[type="text"] { height:50px !important; border: 1px solid #ccc; }
+
+
+.multi-wrapper .non-selected-wrapper .item.selected {
+ opacity: 0.5;
+}
+
+.multi-wrapper .non-selected-wrapper .item.disabled,
+.multi-wrapper .selected-wrapper .item.disabled {
+ opacity: 0.5;
+ text-decoration: line-through;
+}
+
+.multi-wrapper .non-selected-wrapper .item.disabled:hover,
+.multi-wrapper .selected-wrapper .item.disabled:hover {
+ background: inherit;
+ cursor: inherit;
+}
Property changes on: base3.10/src/main/webapp/resource/multijs/multi.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/multijs/multi.js
===================================================================
--- base3.10/src/main/webapp/resource/multijs/multi.js (nonexistent)
+++ base3.10/src/main/webapp/resource/multijs/multi.js (revision 10)
@@ -0,0 +1,341 @@
+/**
+ * multi.js
+ * A user-friendly replacement for select boxes with multiple attribute enabled.
+ *
+ * Author: Fabian Lindfors
+ * License: MIT
+ */
+var multi = (function() {
+
+ // Helper function to trigger an event on an element
+ var trigger_event = function( type, el ) {
+ var e = document.createEvent( 'HTMLEvents' );
+ e.initEvent( type, false, true );
+ el.dispatchEvent( e );
+ };
+
+ // Toggles the target option on the select
+ var toggle_option = function ( select, event ) {
+ var option = select.options[ event.target.getAttribute( 'multi-index' ) ];
+
+ if ( option.disabled ) {
+ return;
+ }
+
+ option.selected = !option.selected;
+ trigger_event( 'change', select );
+ };
+
+
+ /**
+ *
+ * Sets the options of the select based on an array of options.
+ *
+ * The options parameter must be an array with all its elements implementing
+ * the following interface:
+ *
+ * @param {string} value Value mapped to the value attribute
+ * @param {string} label Value mapped to the innerText property
+ * @param {boolean} selected Wether the option is selected by default or not
+ * @param {boolean} disabled Wether the option is disabled by default or not
+ *
+ * interface SelectOption {
+ * value?: String;
+ * label: String;
+ * selected?: boolean;
+ * disabled?: boolean;
+ * }
+ *
+ * @param {HTMLSelectElement} $select Select element to set options.
+ * @param {SelectOption[]} options List of Options to be added to the select
+ * @param {boolean} append Wether the options will replace the current
+ * option set or augment it
+ */
+ var set_options = function ( $select, options, append ) {
+
+ if ( !append ) {
+ $select.innerHTML = '';
+ }
+
+ options
+ .map( function ( option ) {
+
+ var $option = document.createElement( 'option' );
+
+ $option.value = option.value;
+ $option.innerText = option.label;
+
+ $option.disabled = !!option.disabled;
+ $option.selected = !!option.selected;
+
+ return $option;
+
+ } )
+ .forEach( function ( $option ) {
+ $select.appendChild( $option );
+ } );
+ return $select;
+
+ };
+
+
+ // Refreshes an already constructed multi.js instance
+ var refresh_select = function( select, settings ) {
+ // Clear columns
+ select.wrapper.selected.innerHTML = '';
+ select.wrapper.non_selected.innerHTML = '';
+
+ // Add headers to columns
+ if (settings.non_selected_header && settings.selected_header) {
+ var non_selected_header = document.createElement("div");
+ var selected_header = document.createElement("div");
+
+ non_selected_header.className = "header";
+ selected_header.className = "header";
+
+ non_selected_header.innerText = settings.non_selected_header;
+ selected_header.innerText = settings.selected_header;
+
+ select.wrapper.non_selected.appendChild(non_selected_header);
+ select.wrapper.selected.appendChild(selected_header);
+ }
+
+ // Get search value
+ if ( select.wrapper.search ) {
+ var query = select.wrapper.search.value;
+ }
+
+ // Loop over select options and add to the non-selected and selected columns
+ for ( var i = 0; i < select.options.length; i++ ) {
+
+ var option = select.options[i];
+
+ var value = option.value;
+ var label = option.textContent || option.innerText;
+
+ var row = document.createElement( 'a' );
+ row.tabIndex = 0;
+ row.className = 'item';
+ row.innerHTML = label;
+ row.setAttribute( 'role', 'button' );
+ row.setAttribute( 'data-value', value );
+ row.setAttribute( 'multi-index', i );
+
+ if ( option.disabled ) {
+ row.className += ' disabled';
+ }
+
+ // Add row to selected column if option selected
+ if ( option.selected ) {
+
+ row.className += ' selected';
+ var clone = row.cloneNode( true );
+ select.wrapper.selected.appendChild( clone );
+
+ }
+
+ // Apply search filtering
+ if ( !query || query && label.toLowerCase().indexOf( query.toLowerCase() ) > -1 ) {
+ select.wrapper.non_selected.appendChild( row );
+ }
+
+ }
+
+ };
+
+
+ var setup = function ( select, settings ) {
+ // Hide select
+ select.style.display = 'none';
+ select.setAttribute( 'data-multijs', true );
+
+ // Start constructing selector
+ var wrapper = document.createElement( 'div' );
+ wrapper.className = 'multi-wrapper';
+
+
+ // Add search bar
+ if ( settings.enable_search ) {
+ var search = document.createElement( 'input' );
+ search.className = 'search-input';
+ search.type = 'text';
+ search.setAttribute( 'placeholder', settings.search_placeholder );
+
+ search.addEventListener( 'input', function() {
+ refresh_select( select, settings );
+ });
+
+ wrapper.appendChild( search );
+ wrapper.search = search;
+ }
+
+
+ // Add columns for selected and non-selected
+ var non_selected = document.createElement( 'div' );
+ non_selected.className = 'non-selected-wrapper';
+
+ var selected = document.createElement( 'div' );
+ selected.className = 'selected-wrapper';
+
+
+ // Add click handler to toggle the selected status
+ wrapper.addEventListener( 'click', function ( event ) {
+
+ if ( event.target.getAttribute( 'multi-index' ) ) {
+ toggle_option( select, event );
+ }
+
+ });
+
+
+ // Add keyboard handler to toggle the selected status
+ wrapper.addEventListener( 'keypress', function ( event ) {
+
+ var is_action_key = event.keyCode === 32 || event.keyCode === 13;
+ var is_option = event.target.getAttribute( 'multi-index' );
+
+ if ( is_option && is_action_key ) {
+
+ // Prevent the default action to stop scrolling when space is pressed
+ event.preventDefault();
+ toggle_option( select, event );
+
+ }
+
+ });
+
+
+ wrapper.appendChild( non_selected );
+ wrapper.appendChild( selected );
+
+ wrapper.non_selected = non_selected;
+ wrapper.selected = selected;
+
+ select.wrapper = wrapper;
+
+ // Add multi.js wrapper after select element
+ select.parentNode.insertBefore( wrapper, select.nextSibling );
+
+
+ // Initialize selector with values from select element
+ refresh_select( select, settings );
+
+ // Refresh selector when select values change
+ select.addEventListener( 'change', function() {
+ refresh_select( select, settings );
+ });
+ };
+
+
+ // Intializes and constructs an multi.js instance
+ var init = function( select, settings ) {
+
+
+ // Check if already initalized
+ if ( select.dataset.multijs != null ) {
+ return;
+ }
+
+ // Make sure element is select and multiple is enabled
+ if ( select.nodeName != 'SELECT' || ! select.multiple ) {
+ return;
+ }
+
+
+ /**
+ * Set up settings (optional parameter) and its default values
+ *
+ * Default values:
+ * enable_search : true
+ * search_placeholder : 'Search...'
+ */
+ settings = typeof settings !== 'undefined' ? settings : {};
+
+ settings['enable_search'] = typeof settings['enable_search'] !== 'undefined' ? settings['enable_search'] : true;
+ settings['search_placeholder'] = typeof settings['search_placeholder'] !== 'undefined' ? settings['search_placeholder'] : 'Search...';
+
+
+ /**
+ *
+ * @param {AjaxOptions} settings.ajax Options to handle the automatic
+ * fetch of options.
+ *
+ * @param {string} endpoint Url where the options will be fetched from
+ * @param {TransformFunction} transform Intermediate function that allows
+ * the user to transform the data returned by the endpoint. This
+ * function should return an array of objects compatible with the
+ * SelectOption interface.
+ * @param {boolean} append Wether the options will replace the current
+ * option set or augment it.
+ *
+ * interface AjaxOptions {
+ * endpoint: string;
+ * transform?: TransformFunction;
+ * append?: boolean;
+ * }
+ *
+ * @param {any} data Data returned by the endpoint
+ *
+ * @return {SelectOption[]} List of options that should match the
+ * structure of a SelectOption
+ *
+ * declare function TransformFunction ( data: any ): SelectOption[]
+ *
+ */
+ if ( typeof settings.ajax === 'object' &&
+ typeof settings.ajax.endpoint === 'string' ) {
+
+ fetch( settings.ajax.endpoint )
+ // Transform the response to JSON
+ .then( function ( response ) {
+ return response.json();
+ } )
+ // Apply the transform function if provided
+ .then( function ( data ) {
+ return ( typeof settings.ajax.transform === 'function' ) ?
+ settings.ajax.transform( data ):
+ data;
+ } )
+ // Append the fetched options to the select and initialize the
+ // component
+ .then( function ( options ) {
+ select = set_options( select, options, !!settings.ajax.append );
+ setup( select, settings );
+ } )
+ .catch( function ( error ) {
+ throw error;
+ });
+
+ } else {
+ setup( select, settings );
+ }
+
+
+ };
+
+
+ return init;
+
+}());
+
+
+// Add jQuery wrapper if jQuery is present
+if ( typeof jQuery !== 'undefined' ) {
+ (function($) {
+
+ $.fn.multi = function( settings ) {
+
+ settings = typeof settings !== 'undefined' ? settings : {};
+
+ return this.each( function() {
+
+ var $select = $(this);
+
+ multi( $select.get(0), settings );
+
+ });
+
+ }
+
+ })(jQuery);
+}
Property changes on: base3.10/src/main/webapp/resource/multijs/multi.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/css/demo.css
===================================================================
--- base3.10/src/main/webapp/resource/zTree/css/demo.css (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/css/demo.css (revision 10)
@@ -0,0 +1,27 @@
+
+.ztree a {color:#3C6E31;text-decoration: underline;}
+.ztree a:hover {background-color:#ccc; color:black;}
+.ztree input.radio {margin: 0 2px 0 8px;}
+.ztree input.radio.first {margin-left:0;}
+.ztree input.empty {color: lightgray;}
+.ztree code {color: #2f332a;}
+.highlight_red {color:#A60000;}
+.highlight_green {color:#A7F43D;}
+.ztree li {list-style: circle;font-size: 12px;}
+.ztree li.title {list-style: none;}
+.ztree ul.list {margin-left: 17px;}
+
+
+div.content_wrap div.left{float: left;width: 250px;}
+div.content_wrap div.right{float: right;width: 340px;}
+div.zTreeDemoBackground {width:250px;height:362px;text-align:left;}
+
+ul.ztree { width:100%; height:100%; display:block; box-sizing:border-box;}
+ul.log {border: 1px solid #617775;background: #f0f6e4;width:300px;height:170px;overflow: hidden;}
+ul.log.small {height:45px;}
+ul.log li {color: #666666;list-style: none;padding-left: 10px;}
+ul.log li.dark {background-color: #E3E3E3;}
+
+/* ruler */
+div.ruler {height:20px; width:220px; background-color:#f0f6e4;border: 1px solid #333; margin-bottom: 5px; cursor: pointer}
+div.ruler div.cursor {height:20px; width:30px; background-color:#3C6E31; color:white; text-align: right; padding-right: 5px; cursor: pointer}
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/css/demo.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/css/metroStyle/img/line_conn.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/metroStyle/img/line_conn.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/metroStyle/img/loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/metroStyle/img/loading.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/metroStyle/img/metro.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/metroStyle/img/metro.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/metroStyle/img/metro.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/metroStyle/img/metro.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/metroStyle/metroStyle.css
===================================================================
--- base3.10/src/main/webapp/resource/zTree/css/metroStyle/metroStyle.css (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/css/metroStyle/metroStyle.css (revision 10)
@@ -0,0 +1,96 @@
+/*-------------------------------------
+zTree Style
+
+version: 3.4
+author: Hunter.z
+email: hunter.z@263.net
+website: http://code.google.com/p/jquerytree/
+
+-------------------------------------*/
+
+.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}
+.ztree {margin:0; padding:5px; color:#333}
+.ztree li{padding:0; margin:0; list-style:none; line-height:17px; text-align:left; white-space:nowrap; outline:0}
+.ztree li ul{ margin:0; padding:0 0 0 18px}
+.ztree li ul.line{ background:url(./img/line_conn.png) 0 0 repeat-y;}
+
+.ztree li a {padding-right:3px; margin:0; cursor:pointer; height:21px; color:#333; background-color: transparent; text-decoration:none; vertical-align:top; display: inline-block}
+.ztree li a:hover {text-decoration:underline}
+.ztree li a.curSelectedNode {padding-top:0px; background-color:#e5e5e5; color:black; height:21px; opacity:0.8;}
+.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#e5e5e5; color:black; height:21px; border:1px #666 solid; opacity:0.8;}
+.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#aaa; color:white; height:21px; border:1px #666 solid;
+ opacity:0.8; filter:alpha(opacity=80)}
+.ztree li a.tmpTargetNode_prev {}
+.ztree li a.tmpTargetNode_next {}
+.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;
+ font-size:12px; border:1px #585956 solid; *border:0px}
+.ztree li span {line-height:21px; margin-right:2px}
+.ztree li span.button {line-height:0; margin:0; padding: 0; width:21px; height:21px; display: inline-block; vertical-align:middle;
+ border:0 none; cursor: pointer;outline:none;
+ background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
+ background-image:url("./img/metro.png"); *background-image:url("./img/metro.gif")}
+
+.ztree li span.button.chk {width:13px; height:13px; margin:0 2px; cursor: auto}
+.ztree li span.button.chk.checkbox_false_full {background-position: -5px -5px;}
+.ztree li span.button.chk.checkbox_false_full_focus {background-position: -5px -26px;}
+.ztree li span.button.chk.checkbox_false_part {background-position: -5px -48px;}
+.ztree li span.button.chk.checkbox_false_part_focus {background-position: -5px -68px;}
+.ztree li span.button.chk.checkbox_false_disable {background-position: -5px -89px;}
+.ztree li span.button.chk.checkbox_true_full {background-position: -26px -5px;}
+.ztree li span.button.chk.checkbox_true_full_focus {background-position: -26px -26px;}
+.ztree li span.button.chk.checkbox_true_part {background-position: -26px -48px;}
+.ztree li span.button.chk.checkbox_true_part_focus {background-position: -26px -68px;}
+.ztree li span.button.chk.checkbox_true_disable {background-position: -26px -89px;}
+.ztree li span.button.chk.radio_false_full {background-position: -47px -5px;}
+.ztree li span.button.chk.radio_false_full_focus {background-position: -47px -26px;}
+.ztree li span.button.chk.radio_false_part {background-position: -47px -47px;}
+.ztree li span.button.chk.radio_false_part_focus {background-position: -47px -68px;}
+.ztree li span.button.chk.radio_false_disable {background-position: -47px -89px;}
+.ztree li span.button.chk.radio_true_full {background-position: -68px -5px;}
+.ztree li span.button.chk.radio_true_full_focus {background-position: -68px -26px;}
+.ztree li span.button.chk.radio_true_part {background-position: -68px -47px;}
+.ztree li span.button.chk.radio_true_part_focus {background-position: -68px -68px;}
+.ztree li span.button.chk.radio_true_disable {background-position: -68px -89px;}
+
+.ztree li span.button.switch {width:21px; height:21px}
+.ztree li span.button.root_open{background-position:-105px -63px}
+.ztree li span.button.root_close{background-position:-126px -63px}
+.ztree li span.button.roots_open{background-position: -105px 0;}
+.ztree li span.button.roots_close{background-position: -126px 0;}
+.ztree li span.button.center_open{background-position: -105px -21px;}
+.ztree li span.button.center_close{background-position: -126px -21px;}
+.ztree li span.button.bottom_open{background-position: -105px -42px;}
+.ztree li span.button.bottom_close{background-position: -126px -42px;}
+.ztree li span.button.noline_open{background-position: -105px -84px;}
+.ztree li span.button.noline_close{background-position: -126px -84px;}
+.ztree li span.button.root_docu{ background:none;}
+.ztree li span.button.roots_docu{background-position: -84px 0;}
+.ztree li span.button.center_docu{background-position: -84px -21px;}
+.ztree li span.button.bottom_docu{background-position: -84px -42px;}
+.ztree li span.button.noline_docu{ background:none;}
+
+.ztree li span.button.ico_open{margin-right:2px; background-position: -147px -21px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.ico_close{margin-right:2px; margin-right:2px; background-position: -147px 0; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.ico_docu{margin-right:2px; background-position: -147px -42px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.edit {margin-left:2px; margin-right: -1px; background-position: -189px -21px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.edit:hover {
+ background-position: -168px -21px;
+}
+.ztree li span.button.remove {margin-left:2px; margin-right: -1px; background-position: -189px -42px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.remove:hover {
+ background-position: -168px -42px;
+}
+.ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position: -189px 0; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.add:hover {
+ background-position: -168px 0;
+}
+.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
+
+ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}
+
+span.tmpzTreeMove_arrow {width:16px; height:21px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;
+ background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
+ background-position:-168px -84px; background-image:url("./img/metro.png"); *background-image:url("./img/metro.gif")}
+
+ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}
+.ztreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}
Property changes on: base3.10/src/main/webapp/resource/zTree/css/metroStyle/metroStyle.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/zTreeStandard.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/zTreeStandard.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/loading.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/5.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/5.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/6.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/6.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/7.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/7.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/1_open.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/1_open.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/8.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/8.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/9.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/9.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/1_close.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/1_close.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/2.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/2.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/3.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/3.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/4.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/diy/4.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/zTreeStandard.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/zTreeStandard.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/line_conn.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/img/line_conn.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/zTreeStyle.css
===================================================================
--- base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/zTreeStyle.css (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/zTreeStyle.css (revision 10)
@@ -0,0 +1,164 @@
+/*-------------------------------------
+zTree Style
+
+version: 3.5.19
+author: Hunter.z
+email: hunter.z@263.net
+website: http://code.google.com/p/jquerytree/
+
+-------------------------------------*/
+body { overflow-y:hidden; }
+* { box-sizing:border-box; }
+.ztree * {padding:0; margin:0; font-size:12px;}
+.ztree {margin:0; padding:10px 0; color:#333;}
+.ztree li{ width:auto; padding:0 0 0 10px; position:relative; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0}
+.ztree li ul{ margin:0 0 0px 0; padding:3px 0 3px 0;}
+.ztree li ul.line { padding:5px 0 5px 10px; background:url(../../../../images/custom/icon_tree_line.png) 5px 0px repeat-y; }
+.ztree li > ul { padding:0 0 10px 0px; }
+.ztree li a { position:absolute; padding:0px 5px 0 5px; width:auto; margin:0; cursor:pointer; height:26px; font-weight:400; color:#333; background-color: transparent;
+ text-decoration:none; vertical-align:top; display: inline-block; border:1px solid transparent; border-radius:2px; }
+.ztree li a:hover { text-decoration:none; background:#f6f6f6; border:1px #dadada solid; }
+.ztree li a.curSelectedNode {padding-top:0px; position:absolute; z-index:1; background-color:#dbe0f5; color:black; height:26px; border:1px #b8c3e6 solid; opacity:0.8;}
+.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#dbe0f5; color:black; height:26px; border:1px #b8c3e6 solid; opacity:0.8;}
+.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#dbe0f5; color:black; height:26px; border:1px #b8c3e6 solid; opacity:0.8; filter:alpha(opacity=80)}
+.ztree li a.tmpTargetNode_prev {}
+.ztree li a.tmpTargetNode_next {}
+.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;
+ font-size:12px; border:1px #7EC4CC solid; *border:0px}
+.ztree li span {line-height:26px; margin-right:2px; }
+.ztree li span.button {line-height:0; margin:0; width:16px; height:24px; background-size:contain; display: inline-block; vertical-align:middle;
+ border:0 none; cursor: pointer;outline:none; background-size:contain !important;
+ background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
+ background-image:url("/resource/zTree/css/zTreeStyle/img/zTreeStandard.png"); *background-image:url("/resource/zTree/css/zTreeStyle/img/zTreeStandard.gif")}
+.ztree li:hover { }
+.ztree li a:hover { position:absolute; z-index:1; }
+
+.ztree li span.button.chk {width:14px; height:16px; margin:0 3px 0 3px; cursor: auto}
+.ztree li span.button.chk.checkbox_false_full {background:url(../../../../images/custom/icon_tree_checkbox.svg) 50% 50% no-repeat; opacity:0.3; background-size:contain;}
+.ztree li span.button.chk.checkbox_false_full_focus {background:url(../../../../images/custom/icon_tree_checkbox.svg) 50% 50% no-repeat; opacity:1; background-size:contain;}
+.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px}
+.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px}
+.ztree li span.button.chk.checkbox_false_disable {background:url(../../../../images/custom/icon_tree_checkbox_false_disable.svg) 50% 50% no-repeat; background-size:contain;}
+
+.ztree li span.button.chk.checkbox_true_full {background:url(../../../../images/custom/icon_tree_checkbox_full.svg) 50% 50% no-repeat; opacity:1; background-size:contain;}
+.ztree li span.button.chk.checkbox_true_full_focus {background:url(../../../../images/custom/icon_tree_checkbox_full.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.chk.checkbox_true_part {background:url(../../../../images/custom/icon_tree_checkbox_true_part.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.chk.checkbox_true_part_focus {background:url(../../../../images/custom/icon_tree_checkbox_full.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.chk.checkbox_true_disable {background:url(../../../../images/custom/icon_tree_checkbox_true_part.svg) 50% 50% no-repeat; background-size:contain;}
+
+.ztree li span.button.chk.radio_false_full {background:url(../../../../images/custom/icon_tree_radio.svg) 50% 50% no-repeat; opacity:0.3; background-size:contain;}
+.ztree li span.button.chk.radio_false_full_focus {background:url(../../../../images/custom/icon_tree_radio.svg) 50% 50% no-repeat; opacity:1; background-size:contain;}
+.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}
+.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px}
+.ztree li span.button.chk.radio_false_disable {background:url(../../../../images/custom/icon_tree_radio_false_disable.svg) 50% 50% no-repeat; background-size:contain;}
+
+.ztree li span.button.chk.radio_true_full {background:url(../../../../images/custom/icon_tree_radio_full.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.chk.radio_true_full_focus {background:url(../../../../images//custom/icon_tree_radio_full.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.chk.radio_true_part {background:url(../../../../images/custom/icon_tree_radio_true_part.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.chk.radio_true_part_focus {background:url(../../../../images/custom/icon_tree_radio_true_part.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.chk.radio_true_disable {background:url(../../../../images/custom/icon_tree_radio_false_disable.svg) 50% 50% no-repeat; background-size:contain;}
+
+.ztree li span.button.switch {width:14px; height:26px; margin-right:5px; background:url(../../../../images/custom/icon_tree_P.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.root_open{background:url(../../../../images/custom/icon_tree_m.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.root_close{background:url(../../../../images/custom/icon_tree_p.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.roots_open{background:url(../../../../images/custom/icon_tree_m.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.roots_close{background:url(../../../../images/custom/icon_tree_p.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.center_open{background:url(../../../../images/custom/icon_tree_m.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.center_close{background:url(../../../../images/custom/icon_tree_p.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.bottom_open{background:url(../../../../images/custom/icon_tree_m.svg) 50% 50% no-repeat; background-size:contain; }
+.ztree li span.button.bottom_close{background:url(../../../../images/custom/icon_tree_p.svg) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.noline_open{background-position:-92px -72px}
+.ztree li span.button.noline_close{background-position:-74px -72px}
+.ztree li span.button.root_docu{ background:url(../../../../images/custom/icon_tree_logo.png) 50% 50% no-repeat; background-size:contain; }
+.ztree li span.button.roots_docu{ background:url(../../../../images/custom/icon_tree_logo.png) 50% 50% no-repeat; background-size:contain;}
+.ztree li span.button.center_docu{background:url(../../../../images/custom/icon_tree_line_center.png) 5px 0px no-repeat;}
+.ztree li span.button.bottom_docu{ background:url(../../../../images/custom/icon_tree_line_bottom.png) 5px -1px no-repeat; }
+.ztree li span.button.noline_docu{ background:none;}
+
+.ztree li span.button.ico_open{margin-right:3px; background:url(../../../../images/custom/icon_tree_open.svg) 50% 50% no-repeat !important; background-position:50% 50% !important; background-size:contain !important; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.ico_close{margin-right:3px; background:url(../../../../images/custom/icon_tree.svg) 50% 50% no-repeat !important; background-position:50% 50% !important; background-size:contain !important; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.ico_docu{margin-right:2px; background:url(../../../../images/custom/icon_tree_child.svg) 50% 50% no-repeat !important; background-position:50% 50% !important; background-size:12px !important; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.add {opacity:0.7;margin:0px 0px 0px 7px !important; background:url(../../../../images/custom/icon_tree_add.svg) 50% 50% no-repeat !important; background-size:15px !important; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.edit {opacity:0.7;margin-left:5px; background:url(../../../../images/custom/icon_tree_modify.svg) 50% 50% no-repeat; background-size:contain; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.remove {opacity:0.7;margin-left:5px; background:url(../../../../images/custom/icon_tree_del.svg) 50% 50% no-repeat; background-size:12px !important; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.edit:hover, .ztree li span.button.add:hover, .ztree li span.button.remove:hover { opacity:1; }
+.ztree li ul li.level2 span.button.switch { margin-right:3px; }
+
+/*
+.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto}
+.ztree li span.button.chk.checkbox_false_full {background-position:0 0}
+.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px}
+.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px}
+.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px}
+.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px}
+.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0}
+.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px}
+.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px}
+.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px}
+.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px}
+.ztree li span.button.chk.radio_false_full {background-position:-28px 0}
+.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px}
+.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}
+.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px}
+.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px}
+.ztree li span.button.chk.radio_true_full {background-position:-42px 0}
+.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px}
+.ztree li span.button.chk.radio_true_part {background-position:-42px -28px}
+.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px}
+.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px}
+
+.ztree li span.button.switch {width:18px; height:18px}
+.ztree li span.button.root_open{background-position:-92px -54px}
+.ztree li span.button.root_close{background-position:-74px -54px}
+.ztree li span.button.roots_open{background-position:-92px 0}
+.ztree li span.button.roots_close{background-position:-74px 0}
+.ztree li span.button.center_open{background-position:-92px -18px}
+.ztree li span.button.center_close{background-position:-74px -18px}
+.ztree li span.button.bottom_open{background-position:-92px -36px}
+.ztree li span.button.bottom_close{background-position:-74px -36px}
+.ztree li span.button.noline_open{background-position:-92px -72px}
+.ztree li span.button.noline_close{background-position:-74px -72px}
+.ztree li span.button.root_docu{ background:none;}
+.ztree li span.button.roots_docu{background-position:-56px 0}
+.ztree li span.button.center_docu{background-position:-56px -18px}
+.ztree li span.button.bottom_docu{background-position:-56px -36px}
+.ztree li span.button.noline_docu{ background:none;}
+
+.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle}
+.ztree li span.button.ico_loading{margin-right:2px; background:url(/resource/zTree/css/zTreeStyle/img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
+*/
+.ztree li span.button.ico_loading{margin-right:2px; background:url(../../../../images/custom/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
+
+ul.tmpTargetzTree {background-color:#e4edd4; opacity:0.8; filter:alpha(opacity=80);}
+
+span.tmpzTreeMove_arrow {width:16px; height:16px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;
+ background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
+ z-index:100000;
+ background-position:-110px -80px; background-image:url("/resource/zTree/css/zTreeStyle/img/zTreeStandard.png"); *background-image:url("/resource/zTree/css/zTreeStyle/img/zTreeStandard.gif")
+ }
+
+ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; z-index:99999; filter:alpha(opacity=80)
+}
+.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}
+
+/* level style*/
+/*.ztree li span.button.level0 {
+ display:none;
+}
+.ztree li ul.level0 {
+ padding:0;
+ background:none;
+}*/
+
+/*ie에서 작동*/
+@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none){
+.ztree li span.button.ico_open{background-size:14px 14px !important; }
+.ztree li span.button.ico_close{ background-size:contain !important; }
+.ztree li span.button.ico_docu{ background-size:11px 11px !important; }
+.ztree li span.button.add {background-size:15px !important; }
+
+}
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/css/zTreeStyle/zTreeStyle.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/img/loading.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/img/loading.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Index: base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/awesome.less
===================================================================
--- base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/awesome.less (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/awesome.less (revision 10)
@@ -0,0 +1,146 @@
+/*-------------------------------------
+zTree Style using fontawesome instead of images
+
+version: 1.1
+author: Mike King
+email: mikkelking @ hotmail . com
+website: http://code.google.com/p/jquerytree/
+
+-------------------------------------*/
+
+/* Definitions ----------------------*/
+@font-size: 12px;
+// Regular icon and text color is white, which suits any medium -> dark background
+@color-normal: white;
+// Background color
+@color-bg: #af0000;
+// Highlight color
+@color-highlight: yellow;
+// Partially selected (checkboxes, radio buttons)
+@color-partial: #aaaaaa;
+// Partially selected and focused (checkboxes, radio buttons)
+@color-partfocus: #cad96c;
+// Disabled altogether
+@color-disabled: #808080;
+// Editing color
+@color-edit: yellow;
+@w: 15px;
+@h: 17px;
+@pad-left: 2px;
+@pad-top: 10px;
+/* End of Definitions ---------------*/
+
+/* Imports -------------------------*/
+@import "fa.less";
+/* End of Imports ------------------*/
+
+.ztree * {padding:0; margin:0; font-size:@font-size; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif; background-color: @color-bg;}
+.ztree {
+ margin:0; padding:5px; color:@color-normal; background-color: @color-bg;
+ li {
+ padding:0; margin:0; list-style:none; line-height:17px; text-align:left; white-space:nowrap; outline:0;
+ ul {
+ margin: 0px; padding:0 0 0 18px;
+ }
+ ul.line { }
+ a {padding-right:3px; margin:0; cursor:pointer; height:@h; color:@color-normal; background-color: transparent;
+ text-decoration:none; vertical-align:top; display: inline-block;
+ input.rename {height:14px; width:80px; padding:0; margin:0;
+ color: @color-bg; background-color: @color-normal;
+ font-size:@font-size; border:1px #585956 solid; *border:0px}
+ }
+ a:hover {text-decoration:underline}
+ a.curSelectedNode {padding-top:0px; background-color:#af4040; color:@color-highlight; height:@h; opacity:0.8;}
+ a.curSelectedNode_Edit {padding-top:0px; background-color:transparent; color:@color-highlight; height:@h; border:1px #666 solid; opacity:0.8;}
+ a.tmpTargetNode_inner {padding-top:0px; background-color:#aaa; color:@color-highlight; height:@h; border:1px #666 solid;
+ opacity:0.8; filter:alpha(opacity=80)}
+ a.tmpTargetNode_prev {}
+ a.tmpTargetNode_next {}
+ span {line-height:@h; margin-right:2px; background-color:transparent;}
+ span.button {line-height:0; margin:0; padding: 0; width:@w; height:@h; display: inline-block; vertical-align:top;
+ border:0px solid; cursor: pointer;outline:none;
+ background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
+
+ &::before{color: @color-normal; font-family: FontAwesome; padding-top:@pad-top;}
+ &.chk { margin:0px; cursor: auto; width: 12px;
+ display: inline-block;padding-top:@pad-top;padding-left:@pad-left;
+
+ &.checkbox_false_full::before {content: @fa-square-o;}
+ &.checkbox_false_full_focus::before {content: @fa-square-o; color:@color-highlight;}
+ &.checkbox_false_part::before {content: @fa-square-o;color: @color-partial;}
+ &.checkbox_false_part_focus::before {content: @fa-square-o; color:@color-partfocus;}
+ &.checkbox_false_disable::before {content: @fa-square-o; color:@color-disabled;}
+ &.checkbox_true_full::before {content: @fa-check-square-o;}
+ &.checkbox_true_full_focus::before {content: @fa-check-square-o;}
+ &.checkbox_true_part::before {content: @fa-check-square;}
+ &.checkbox_true_part_focus::before {content: @fa-check-square; color: @color-highlight}
+ &.checkbox_true_full_focus::before {content: @fa-check-square-o; color: @color-highlight}
+ &.checkbox_true_part::before {content: @fa-check-square-o;color: @color-partial}
+ &.checkbox_true_part_focus::before {content: @fa-check-square-o;color: @color-partfocus;}
+ &.checkbox_true_disable::before {content: @fa-check-square-o;color: @color-disabled}
+
+ &.radio_false_full::before {content: @fa-circle-o;}
+ &.radio_false_full_focus::before {content: @fa-circle-o;color: @color-highlight}
+ &.radio_false_part::before {content: @fa-circle-o;color: @color-partial}
+ &.radio_false_part_focus::before {content: @fa-circle-o;color: @color-highlight}
+ &.radio_false_disable::before {content: @fa-circle-thin;color: @color-disabled}
+ &.radio_true_full::before {content: @fa-dot-circle-o;}
+ &.radio_true_full_focus::before {content: @fa-dot-circle-o;color: @color-highlight}
+ &.radio_true_part::before {content: @fa-dot-circle-o;color: @color-partial}
+ &.radio_true_part_focus::before {content: @fa-dot-circle-o;color: @color-partial;}
+ &.radio_true_disable::before {content: @fa-circle-thin;color: @color-disabled}
+
+ }
+ &.switch {width:@w; height:@h}
+ &.root_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}
+ &.root_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}
+ &.roots_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}
+ &.roots_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}
+ &.center_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}
+ &.center_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}
+ &.bottom_open::before{content: @fa-chevron-down;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}
+ &.bottom_close::before{content: @fa-chevron-right;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;}
+ &.noline_open{}
+ &.noline_close{}
+ &.root_docu{ background:none;}
+ &.roots_docu::before{content: @fa-list-alt;padding-left:@pad-left;display: inline-block;color:@color-normal;}
+ &.center_docu::before{padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}
+ &.bottom_docu::before{padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}
+ &.noline_docu{ background:none;}
+
+ &.ico_open::before {content: @fa-folder-open-o;font-family: FontAwesome;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}
+ &.ico_close::before {content: @fa-folder-o;font-family: FontAwesome;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}
+ &.ico_docu::before{content: @fa-list-alt;font-family: FontAwesome;padding-top:@pad-top;padding-left:@pad-left;display: inline-block;color:@color-normal;}
+
+ &.edit {margin-left:4px; margin-right: -1px; vertical-align:top; *vertical-align:middle;padding-top:@pad-top;}
+ &.edit::before{content: @fa-pencil-square-o;font-family: FontAwesome;}
+
+ &.remove {margin-left:4px; margin-right: -1px; vertical-align:top; *vertical-align:middle;padding-top:@pad-top;}
+ &.remove::before{content: @fa-trash;font-family: FontAwesome;}
+
+
+ &.add {margin-left:4px; margin-right: -1px; vertical-align:top; *vertical-align:middle;padding-top:@pad-top;}
+ &.add::before{content: @fa-plus;font-family: FontAwesome;}
+
+ &.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}
+ }
+
+ }
+}
+
+
+ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}
+
+// this is the arrow that moves
+span.tmpzTreeMove_arrow{width:16px; height:@h; display: inline-block;
+ padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;
+ background-color:transparent; background-attachment: scroll;
+ }
+span.tmpzTreeMove_arrow::before{content: @fa-play;font-family: FontAwesome;color: @color-highlight;
+ }
+// outline
+
+ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden;
+ background-color:#cfcfcf; border:1px @color-highlight dotted; opacity:0.8; filter:alpha(opacity=80)}
+.ztreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}
+
Index: base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/awesome.css
===================================================================
--- base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/awesome.css (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/awesome.css (revision 10)
@@ -0,0 +1,386 @@
+/*-------------------------------------
+zTree Style using fontawesome instead of images
+
+version: 1.1
+author: Mike King
+email: mikkelking @ hotmail . com
+website: http://code.google.com/p/jquerytree/
+
+-------------------------------------*/
+/* Definitions ----------------------*/
+/* End of Definitions ---------------*/
+/* Imports -------------------------*/
+/* End of Imports ------------------*/
+.ztree * {
+ padding: 0;
+ margin: 0;
+ font-size: 12px;
+ font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif;
+ background-color: #af0000;
+}
+.ztree {
+ margin: 0;
+ padding: 5px;
+ color: #ffffff;
+ background-color: #af0000;
+}
+.ztree li {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ line-height: 17px;
+ text-align: left;
+ white-space: nowrap;
+ outline: 0;
+}
+.ztree li ul {
+ margin: 0px;
+ padding: 0 0 0 18px;
+}
+.ztree li a {
+ padding-right: 3px;
+ margin: 0;
+ cursor: pointer;
+ height: 17px;
+ color: #ffffff;
+ background-color: transparent;
+ text-decoration: none;
+ vertical-align: top;
+ display: inline-block;
+}
+.ztree li a input.rename {
+ height: 14px;
+ width: 80px;
+ padding: 0;
+ margin: 0;
+ color: #af0000;
+ background-color: #ffffff;
+ font-size: 12px;
+ border: 1px #585956 solid;
+ *border: 0px;
+}
+.ztree li a:hover {
+ text-decoration: underline;
+}
+.ztree li a.curSelectedNode {
+ padding-top: 0px;
+ background-color: #af4040;
+ color: #ffff00;
+ height: 17px;
+ opacity: 0.8;
+}
+.ztree li a.curSelectedNode_Edit {
+ padding-top: 0px;
+ background-color: transparent;
+ color: #ffff00;
+ height: 17px;
+ border: 1px #666 solid;
+ opacity: 0.8;
+}
+.ztree li a.tmpTargetNode_inner {
+ padding-top: 0px;
+ background-color: #aaa;
+ color: #ffff00;
+ height: 17px;
+ border: 1px #666 solid;
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+.ztree li span {
+ line-height: 17px;
+ margin-right: 2px;
+ background-color: transparent;
+}
+.ztree li span.button {
+ line-height: 0;
+ margin: 0;
+ padding: 0;
+ width: 15px;
+ height: 17px;
+ display: inline-block;
+ vertical-align: top;
+ border: 0px solid;
+ cursor: pointer;
+ outline: none;
+ background-color: transparent;
+ background-repeat: no-repeat;
+ background-attachment: scroll;
+}
+.ztree li span.button::before {
+ color: #ffffff;
+ font-family: FontAwesome;
+ padding-top: 10px;
+}
+.ztree li span.button.chk {
+ margin: 0px;
+ cursor: auto;
+ width: 12px;
+ display: inline-block;
+ padding-top: 10px;
+ padding-left: 2px;
+}
+.ztree li span.button.chk.checkbox_false_full::before {
+ content: "\f096";
+}
+.ztree li span.button.chk.checkbox_false_full_focus::before {
+ content: "\f096";
+ color: #ffff00;
+}
+.ztree li span.button.chk.checkbox_false_part::before {
+ content: "\f096";
+ color: #aaaaaa;
+}
+.ztree li span.button.chk.checkbox_false_part_focus::before {
+ content: "\f096";
+ color: #cad96c;
+}
+.ztree li span.button.chk.checkbox_false_disable::before {
+ content: "\f096";
+ color: #808080;
+}
+.ztree li span.button.chk.checkbox_true_full::before {
+ content: "\f046";
+}
+.ztree li span.button.chk.checkbox_true_full_focus::before {
+ content: "\f046";
+}
+.ztree li span.button.chk.checkbox_true_part::before {
+ content: "\f14a";
+}
+.ztree li span.button.chk.checkbox_true_part_focus::before {
+ content: "\f14a";
+ color: #ffff00;
+}
+.ztree li span.button.chk.checkbox_true_full_focus::before {
+ content: "\f046";
+ color: #ffff00;
+}
+.ztree li span.button.chk.checkbox_true_part::before {
+ content: "\f046";
+ color: #aaaaaa;
+}
+.ztree li span.button.chk.checkbox_true_part_focus::before {
+ content: "\f046";
+ color: #cad96c;
+}
+.ztree li span.button.chk.checkbox_true_disable::before {
+ content: "\f046";
+ color: #808080;
+}
+.ztree li span.button.chk.radio_false_full::before {
+ content: "\f10c";
+}
+.ztree li span.button.chk.radio_false_full_focus::before {
+ content: "\f10c";
+ color: #ffff00;
+}
+.ztree li span.button.chk.radio_false_part::before {
+ content: "\f10c";
+ color: #aaaaaa;
+}
+.ztree li span.button.chk.radio_false_part_focus::before {
+ content: "\f10c";
+ color: #ffff00;
+}
+.ztree li span.button.chk.radio_false_disable::before {
+ content: "\f1db";
+ color: #808080;
+}
+.ztree li span.button.chk.radio_true_full::before {
+ content: "\f192";
+}
+.ztree li span.button.chk.radio_true_full_focus::before {
+ content: "\f192";
+ color: #ffff00;
+}
+.ztree li span.button.chk.radio_true_part::before {
+ content: "\f192";
+ color: #aaaaaa;
+}
+.ztree li span.button.chk.radio_true_part_focus::before {
+ content: "\f192";
+ color: #aaaaaa;
+}
+.ztree li span.button.chk.radio_true_disable::before {
+ content: "\f1db";
+ color: #808080;
+}
+.ztree li span.button.switch {
+ width: 15px;
+ height: 17px;
+}
+.ztree li span.button.root_open::before {
+ content: "\f078";
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+}
+.ztree li span.button.root_close::before {
+ content: "\f054";
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+}
+.ztree li span.button.roots_open::before {
+ content: "\f078";
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+}
+.ztree li span.button.roots_close::before {
+ content: "\f054";
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+}
+.ztree li span.button.center_open::before {
+ content: "\f078";
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+}
+.ztree li span.button.center_close::before {
+ content: "\f054";
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+}
+.ztree li span.button.bottom_open::before {
+ content: "\f078";
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+}
+.ztree li span.button.bottom_close::before {
+ content: "\f054";
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+}
+.ztree li span.button.root_docu {
+ background: none;
+}
+.ztree li span.button.roots_docu::before {
+ content: "\f022";
+ padding-left: 2px;
+ display: inline-block;
+ color: #ffffff;
+}
+.ztree li span.button.center_docu::before {
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+ color: #ffffff;
+}
+.ztree li span.button.bottom_docu::before {
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+ color: #ffffff;
+}
+.ztree li span.button.noline_docu {
+ background: none;
+}
+.ztree li span.button.ico_open::before {
+ content: "\f115";
+ font-family: FontAwesome;
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+ color: #ffffff;
+}
+.ztree li span.button.ico_close::before {
+ content: "\f114";
+ font-family: FontAwesome;
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+ color: #ffffff;
+}
+.ztree li span.button.ico_docu::before {
+ content: "\f022";
+ font-family: FontAwesome;
+ padding-top: 10px;
+ padding-left: 2px;
+ display: inline-block;
+ color: #ffffff;
+}
+.ztree li span.button.edit {
+ margin-left: 4px;
+ margin-right: -1px;
+ vertical-align: top;
+ *vertical-align: middle;
+ padding-top: 10px;
+}
+.ztree li span.button.edit::before {
+ content: "\f044";
+ font-family: FontAwesome;
+}
+.ztree li span.button.remove {
+ margin-left: 4px;
+ margin-right: -1px;
+ vertical-align: top;
+ *vertical-align: middle;
+ padding-top: 10px;
+}
+.ztree li span.button.remove::before {
+ content: "\f1f8";
+ font-family: FontAwesome;
+}
+.ztree li span.button.add {
+ margin-left: 4px;
+ margin-right: -1px;
+ vertical-align: top;
+ *vertical-align: middle;
+ padding-top: 10px;
+}
+.ztree li span.button.add::before {
+ content: "\f067";
+ font-family: FontAwesome;
+}
+.ztree li span.button.ico_loading {
+ margin-right: 2px;
+ background: url(./img/loading.gif) no-repeat scroll 0 0 transparent;
+ vertical-align: top;
+ *vertical-align: middle;
+}
+ul.tmpTargetzTree {
+ background-color: #FFE6B0;
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+span.tmpzTreeMove_arrow {
+ width: 16px;
+ height: 17px;
+ display: inline-block;
+ padding: 0;
+ margin: 2px 0 0 1px;
+ border: 0 none;
+ position: absolute;
+ background-color: transparent;
+ background-attachment: scroll;
+}
+span.tmpzTreeMove_arrow::before {
+ content: "\f04b";
+ font-family: FontAwesome;
+ color: #ffff00;
+}
+ul.ztree.zTreeDragUL {
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ width: auto;
+ height: auto;
+ overflow: hidden;
+ background-color: #cfcfcf;
+ border: 1px #ffff00 dotted;
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+.ztreeMask {
+ z-index: 10000;
+ background-color: #cfcfcf;
+ opacity: 0.0;
+ filter: alpha(opacity=0);
+ position: absolute;
+}
Property changes on: base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/awesome.css
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/fa.less
===================================================================
--- base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/fa.less (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/css/awesomeStyle/fa.less (revision 10)
@@ -0,0 +1,480 @@
+@fa-glass: "\f000";
+@fa-music: "\f001";
+@fa-search: "\f002";
+@fa-envelope-o: "\f003";
+@fa-heart: "\f004";
+@fa-star: "\f005";
+@fa-star-o: "\f006";
+@fa-user: "\f007";
+@fa-film: "\f008";
+@fa-th-large: "\f009";
+@fa-th: "\f00a";
+@fa-th-list: "\f00b";
+@fa-check: "\f00c";
+@fa-times: "\f00d";
+@fa-search-plus: "\f00e";
+@fa-search-minus: "\f010";
+@fa-power-off: "\f011";
+@fa-signal: "\f012";
+@fa-cog: "\f013";
+@fa-trash-o: "\f014";
+@fa-home: "\f015";
+@fa-file-o: "\f016";
+@fa-clock-o: "\f017";
+@fa-road: "\f018";
+@fa-download: "\f019";
+@fa-arrow-circle-o-down: "\f01a";
+@fa-arrow-circle-o-up: "\f01b";
+@fa-inbox: "\f01c";
+@fa-play-circle-o: "\f01d";
+@fa-repeat: "\f01e";
+@fa-refresh: "\f021";
+@fa-list-alt: "\f022";
+@fa-lock: "\f023";
+@fa-flag: "\f024";
+@fa-headphones: "\f025";
+@fa-volume-off: "\f026";
+@fa-volume-down: "\f027";
+@fa-volume-up: "\f028";
+@fa-qrcode: "\f029";
+@fa-barcode: "\f02a";
+@fa-tag: "\f02b";
+@fa-tags: "\f02c";
+@fa-book: "\f02d";
+@fa-bookmark: "\f02e";
+@fa-print: "\f02f";
+@fa-camera: "\f030";
+@fa-font: "\f031";
+@fa-bold: "\f032";
+@fa-italic: "\f033";
+@fa-text-height: "\f034";
+@fa-text-width: "\f035";
+@fa-align-left: "\f036";
+@fa-align-center: "\f037";
+@fa-align-right: "\f038";
+@fa-align-justify: "\f039";
+@fa-list: "\f03a";
+@fa-outdent: "\f03b";
+@fa-indent: "\f03c";
+@fa-video-camera: "\f03d";
+@fa-picture-o: "\f03e";
+@fa-pencil: "\f040";
+@fa-map-marker: "\f041";
+@fa-adjust: "\f042";
+@fa-tint: "\f043";
+@fa-pencil-square-o: "\f044";
+@fa-share-square-o: "\f045";
+@fa-check-square-o: "\f046";
+@fa-arrows: "\f047";
+@fa-step-backward: "\f048";
+@fa-fast-backward: "\f049";
+@fa-backward: "\f04a";
+@fa-play: "\f04b";
+@fa-pause: "\f04c";
+@fa-stop: "\f04d";
+@fa-forward: "\f04e";
+@fa-fast-forward: "\f050";
+@fa-step-forward: "\f051";
+@fa-eject: "\f052";
+@fa-chevron-left: "\f053";
+@fa-chevron-right: "\f054";
+@fa-plus-circle: "\f055";
+@fa-minus-circle: "\f056";
+@fa-times-circle: "\f057";
+@fa-check-circle: "\f058";
+@fa-question-circle: "\f059";
+@fa-info-circle: "\f05a";
+@fa-crosshairs: "\f05b";
+@fa-times-circle-o: "\f05c";
+@fa-check-circle-o: "\f05d";
+@fa-ban: "\f05e";
+@fa-arrow-left: "\f060";
+@fa-arrow-right: "\f061";
+@fa-arrow-up: "\f062";
+@fa-arrow-down: "\f063";
+@fa-share: "\f064";
+@fa-expand: "\f065";
+@fa-compress: "\f066";
+@fa-plus: "\f067";
+@fa-minus: "\f068";
+@fa-asterisk: "\f069";
+@fa-exclamation-circle: "\f06a";
+@fa-gift: "\f06b";
+@fa-leaf: "\f06c";
+@fa-fire: "\f06d";
+@fa-eye: "\f06e";
+@fa-eye-slash: "\f070";
+@fa-exclamation-triangle: "\f071";
+@fa-plane: "\f072";
+@fa-calendar: "\f073";
+@fa-random: "\f074";
+@fa-comment: "\f075";
+@fa-magnet: "\f076";
+@fa-chevron-up: "\f077";
+@fa-chevron-down: "\f078";
+@fa-retweet: "\f079";
+@fa-shopping-cart: "\f07a";
+@fa-folder: "\f07b";
+@fa-folder-open: "\f07c";
+@fa-arrows-v: "\f07d";
+@fa-arrows-h: "\f07e";
+@fa-bar-chart: "\f080";
+@fa-twitter-square: "\f081";
+@fa-facebook-square: "\f082";
+@fa-camera-retro: "\f083";
+@fa-key: "\f084";
+@fa-cogs: "\f085";
+@fa-comments: "\f086";
+@fa-thumbs-o-up: "\f087";
+@fa-thumbs-o-down: "\f088";
+@fa-star-half: "\f089";
+@fa-heart-o: "\f08a";
+@fa-sign-out: "\f08b";
+@fa-linkedin-square: "\f08c";
+@fa-thumb-tack: "\f08d";
+@fa-external-link: "\f08e";
+@fa-sign-in: "\f090";
+@fa-trophy: "\f091";
+@fa-github-square: "\f092";
+@fa-upload: "\f093";
+@fa-lemon-o: "\f094";
+@fa-phone: "\f095";
+@fa-square-o: "\f096";
+@fa-bookmark-o: "\f097";
+@fa-phone-square: "\f098";
+@fa-twitter: "\f099";
+@fa-facebook: "\f09a";
+@fa-github: "\f09b";
+@fa-unlock: "\f09c";
+@fa-credit-card: "\f09d";
+@fa-rss: "\f09e";
+@fa-hdd-o: "\f0a0";
+@fa-bullhorn: "\f0a1";
+@fa-bell: "\f0f3";
+@fa-certificate: "\f0a3";
+@fa-hand-o-right: "\f0a4";
+@fa-hand-o-left: "\f0a5";
+@fa-hand-o-up: "\f0a6";
+@fa-hand-o-down: "\f0a7";
+@fa-arrow-circle-left: "\f0a8";
+@fa-arrow-circle-right: "\f0a9";
+@fa-arrow-circle-up: "\f0aa";
+@fa-arrow-circle-down: "\f0ab";
+@fa-globe: "\f0ac";
+@fa-wrench: "\f0ad";
+@fa-tasks: "\f0ae";
+@fa-filter: "\f0b0";
+@fa-briefcase: "\f0b1";
+@fa-arrows-alt: "\f0b2";
+@fa-users: "\f0c0";
+@fa-link: "\f0c1";
+@fa-cloud: "\f0c2";
+@fa-flask: "\f0c3";
+@fa-scissors: "\f0c4";
+@fa-files-o: "\f0c5";
+@fa-paperclip: "\f0c6";
+@fa-floppy-o: "\f0c7";
+@fa-square: "\f0c8";
+@fa-bars: "\f0c9";
+@fa-list-ul: "\f0ca";
+@fa-list-ol: "\f0cb";
+@fa-strikethrough: "\f0cc";
+@fa-underline: "\f0cd";
+@fa-table: "\f0ce";
+@fa-magic: "\f0d0";
+@fa-truck: "\f0d1";
+@fa-pinterest: "\f0d2";
+@fa-pinterest-square: "\f0d3";
+@fa-google-plus-square: "\f0d4";
+@fa-google-plus: "\f0d5";
+@fa-money: "\f0d6";
+@fa-caret-down: "\f0d7";
+@fa-caret-up: "\f0d8";
+@fa-caret-left: "\f0d9";
+@fa-caret-right: "\f0da";
+@fa-columns: "\f0db";
+@fa-sort: "\f0dc";
+@fa-sort-desc: "\f0dd";
+@fa-sort-asc: "\f0de";
+@fa-envelope: "\f0e0";
+@fa-linkedin: "\f0e1";
+@fa-undo: "\f0e2";
+@fa-gavel: "\f0e3";
+@fa-tachometer: "\f0e4";
+@fa-comment-o: "\f0e5";
+@fa-comments-o: "\f0e6";
+@fa-bolt: "\f0e7";
+@fa-sitemap: "\f0e8";
+@fa-umbrella: "\f0e9";
+@fa-clipboard: "\f0ea";
+@fa-lightbulb-o: "\f0eb";
+@fa-exchange: "\f0ec";
+@fa-cloud-download: "\f0ed";
+@fa-cloud-upload: "\f0ee";
+@fa-user-md: "\f0f0";
+@fa-stethoscope: "\f0f1";
+@fa-suitcase: "\f0f2";
+@fa-bell-o: "\f0a2";
+@fa-coffee: "\f0f4";
+@fa-cutlery: "\f0f5";
+@fa-file-text-o: "\f0f6";
+@fa-building-o: "\f0f7";
+@fa-hospital-o: "\f0f8";
+@fa-ambulance: "\f0f9";
+@fa-medkit: "\f0fa";
+@fa-fighter-jet: "\f0fb";
+@fa-beer: "\f0fc";
+@fa-h-square: "\f0fd";
+@fa-plus-square: "\f0fe";
+@fa-angle-double-left: "\f100";
+@fa-angle-double-right: "\f101";
+@fa-angle-double-up: "\f102";
+@fa-angle-double-down: "\f103";
+@fa-angle-left: "\f104";
+@fa-angle-right: "\f105";
+@fa-angle-up: "\f106";
+@fa-angle-down: "\f107";
+@fa-desktop: "\f108";
+@fa-laptop: "\f109";
+@fa-tablet: "\f10a";
+@fa-mobile: "\f10b";
+@fa-circle-o: "\f10c";
+@fa-quote-left: "\f10d";
+@fa-quote-right: "\f10e";
+@fa-spinner: "\f110";
+@fa-circle: "\f111";
+@fa-reply: "\f112";
+@fa-github-alt: "\f113";
+@fa-folder-o: "\f114";
+@fa-folder-open-o: "\f115";
+@fa-smile-o: "\f118";
+@fa-frown-o: "\f119";
+@fa-meh-o: "\f11a";
+@fa-gamepad: "\f11b";
+@fa-keyboard-o: "\f11c";
+@fa-flag-o: "\f11d";
+@fa-flag-checkered: "\f11e";
+@fa-terminal: "\f120";
+@fa-code: "\f121";
+@fa-reply-all: "\f122";
+@fa-star-half-o: "\f123";
+@fa-location-arrow: "\f124";
+@fa-crop: "\f125";
+@fa-code-fork: "\f126";
+@fa-chain-broken: "\f127";
+@fa-question: "\f128";
+@fa-info: "\f129";
+@fa-exclamation: "\f12a";
+@fa-superscript: "\f12b";
+@fa-subscript: "\f12c";
+@fa-eraser: "\f12d";
+@fa-puzzle-piece: "\f12e";
+@fa-microphone: "\f130";
+@fa-microphone-slash: "\f131";
+@fa-shield: "\f132";
+@fa-calendar-o: "\f133";
+@fa-fire-extinguisher: "\f134";
+@fa-rocket: "\f135";
+@fa-maxcdn: "\f136";
+@fa-chevron-circle-left: "\f137";
+@fa-chevron-circle-right: "\f138";
+@fa-chevron-circle-up: "\f139";
+@fa-chevron-circle-down: "\f13a";
+@fa-html5: "\f13b";
+@fa-css3: "\f13c";
+@fa-anchor: "\f13d";
+@fa-unlock-alt: "\f13e";
+@fa-bullseye: "\f140";
+@fa-ellipsis-h: "\f141";
+@fa-ellipsis-v: "\f142";
+@fa-rss-square: "\f143";
+@fa-play-circle: "\f144";
+@fa-ticket: "\f145";
+@fa-minus-square: "\f146";
+@fa-minus-square-o: "\f147";
+@fa-level-up: "\f148";
+@fa-level-down: "\f149";
+@fa-check-square: "\f14a";
+@fa-pencil-square: "\f14b";
+@fa-external-link-square: "\f14c";
+@fa-share-square: "\f14d";
+@fa-compass: "\f14e";
+@fa-caret-square-o-down: "\f150";
+@fa-caret-square-o-up: "\f151";
+@fa-caret-square-o-right: "\f152";
+@fa-eur: "\f153";
+@fa-gbp: "\f154";
+@fa-usd: "\f155";
+@fa-inr: "\f156";
+@fa-jpy: "\f157";
+@fa-rub: "\f158";
+@fa-krw: "\f159";
+@fa-btc: "\f15a";
+@fa-file: "\f15b";
+@fa-file-text: "\f15c";
+@fa-sort-alpha-asc: "\f15d";
+@fa-sort-alpha-desc: "\f15e";
+@fa-sort-amount-asc: "\f160";
+@fa-sort-amount-desc: "\f161";
+@fa-sort-numeric-asc: "\f162";
+@fa-sort-numeric-desc: "\f163";
+@fa-thumbs-up: "\f164";
+@fa-thumbs-down: "\f165";
+@fa-youtube-square: "\f166";
+@fa-youtube: "\f167";
+@fa-xing: "\f168";
+@fa-xing-square: "\f169";
+@fa-youtube-play: "\f16a";
+@fa-dropbox: "\f16b";
+@fa-stack-overflow: "\f16c";
+@fa-instagram: "\f16d";
+@fa-flickr: "\f16e";
+@fa-adn: "\f170";
+@fa-bitbucket: "\f171";
+@fa-bitbucket-square: "\f172";
+@fa-tumblr: "\f173";
+@fa-tumblr-square: "\f174";
+@fa-long-arrow-down: "\f175";
+@fa-long-arrow-up: "\f176";
+@fa-long-arrow-left: "\f177";
+@fa-long-arrow-right: "\f178";
+@fa-apple: "\f179";
+@fa-windows: "\f17a";
+@fa-android: "\f17b";
+@fa-linux: "\f17c";
+@fa-dribbble: "\f17d";
+@fa-skype: "\f17e";
+@fa-foursquare: "\f180";
+@fa-trello: "\f181";
+@fa-female: "\f182";
+@fa-male: "\f183";
+@fa-gittip: "\f184";
+@fa-sun-o: "\f185";
+@fa-moon-o: "\f186";
+@fa-archive: "\f187";
+@fa-bug: "\f188";
+@fa-vk: "\f189";
+@fa-weibo: "\f18a";
+@fa-renren: "\f18b";
+@fa-pagelines: "\f18c";
+@fa-stack-exchange: "\f18d";
+@fa-arrow-circle-o-right: "\f18e";
+@fa-arrow-circle-o-left: "\f190";
+@fa-caret-square-o-left: "\f191";
+@fa-dot-circle-o: "\f192";
+@fa-wheelchair: "\f193";
+@fa-vimeo-square: "\f194";
+@fa-try: "\f195";
+@fa-plus-square-o: "\f196";
+@fa-space-shuttle: "\f197";
+@fa-slack: "\f198";
+@fa-envelope-square: "\f199";
+@fa-wordpress: "\f19a";
+@fa-openid: "\f19b";
+@fa-university: "\f19c";
+@fa-graduation-cap: "\f19d";
+@fa-yahoo: "\f19e";
+@fa-google: "\f1a0";
+@fa-reddit: "\f1a1";
+@fa-reddit-square: "\f1a2";
+@fa-stumbleupon-circle: "\f1a3";
+@fa-stumbleupon: "\f1a4";
+@fa-delicious: "\f1a5";
+@fa-digg: "\f1a6";
+@fa-pied-piper: "\f1a7";
+@fa-pied-piper-alt: "\f1a8";
+@fa-drupal: "\f1a9";
+@fa-joomla: "\f1aa";
+@fa-language: "\f1ab";
+@fa-fax: "\f1ac";
+@fa-building: "\f1ad";
+@fa-child: "\f1ae";
+@fa-paw: "\f1b0";
+@fa-spoon: "\f1b1";
+@fa-cube: "\f1b2";
+@fa-cubes: "\f1b3";
+@fa-behance: "\f1b4";
+@fa-behance-square: "\f1b5";
+@fa-steam: "\f1b6";
+@fa-steam-square: "\f1b7";
+@fa-recycle: "\f1b8";
+@fa-car: "\f1b9";
+@fa-taxi: "\f1ba";
+@fa-tree: "\f1bb";
+@fa-spotify: "\f1bc";
+@fa-deviantart: "\f1bd";
+@fa-soundcloud: "\f1be";
+@fa-database: "\f1c0";
+@fa-file-pdf-o: "\f1c1";
+@fa-file-word-o: "\f1c2";
+@fa-file-excel-o: "\f1c3";
+@fa-file-powerpoint-o: "\f1c4";
+@fa-file-image-o: "\f1c5";
+@fa-file-archive-o: "\f1c6";
+@fa-file-audio-o: "\f1c7";
+@fa-file-video-o: "\f1c8";
+@fa-file-code-o: "\f1c9";
+@fa-vine: "\f1ca";
+@fa-codepen: "\f1cb";
+@fa-jsfiddle: "\f1cc";
+@fa-life-ring: "\f1cd";
+@fa-circle-o-notch: "\f1ce";
+@fa-rebel: "\f1d0";
+@fa-empire: "\f1d1";
+@fa-git-square: "\f1d2";
+@fa-git: "\f1d3";
+@fa-hacker-news: "\f1d4";
+@fa-tencent-weibo: "\f1d5";
+@fa-qq: "\f1d6";
+@fa-weixin: "\f1d7";
+@fa-paper-plane: "\f1d8";
+@fa-paper-plane-o: "\f1d9";
+@fa-history: "\f1da";
+@fa-circle-thin: "\f1db";
+@fa-header: "\f1dc";
+@fa-paragraph: "\f1dd";
+@fa-sliders: "\f1de";
+@fa-share-alt: "\f1e0";
+@fa-share-alt-square: "\f1e1";
+@fa-bomb: "\f1e2";
+@fa-futbol-o: "\f1e3";
+@fa-tty: "\f1e4";
+@fa-binoculars: "\f1e5";
+@fa-plug: "\f1e6";
+@fa-slideshare: "\f1e7";
+@fa-twitch: "\f1e8";
+@fa-yelp: "\f1e9";
+@fa-newspaper-o: "\f1ea";
+@fa-wifi: "\f1eb";
+@fa-calculator: "\f1ec";
+@fa-paypal: "\f1ed";
+@fa-google-wallet: "\f1ee";
+@fa-cc-visa: "\f1f0";
+@fa-cc-mastercard: "\f1f1";
+@fa-cc-discover: "\f1f2";
+@fa-cc-amex: "\f1f3";
+@fa-cc-paypal: "\f1f4";
+@fa-cc-stripe: "\f1f5";
+@fa-bell-slash: "\f1f6";
+@fa-bell-slash-o: "\f1f7";
+@fa-trash: "\f1f8";
+@fa-copyright: "\f1f9";
+@fa-at: "\f1fa";
+@fa-eyedropper: "\f1fb";
+@fa-paint-brush: "\f1fc";
+@fa-birthday-cake: "\f1fd";
+@fa-area-chart: "\f1fe";
+@fa-pie-chart: "\f200";
+@fa-line-chart: "\f201";
+@fa-lastfm: "\f202";
+@fa-lastfm-square: "\f203";
+@fa-toggle-off: "\f204";
+@fa-toggle-on: "\f205";
+@fa-bicycle: "\f206";
+@fa-bus: "\f207";
+@fa-ioxhost: "\f208";
+@fa-angellist: "\f209";
+@fa-cc: "\f20a";
+@fa-ils: "\f20b";
+@fa-meanpath: "\f20c";
+
Index: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exedit.min.js
===================================================================
--- base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exedit.min.js (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exedit.min.js (revision 10)
@@ -0,0 +1 @@
+!function(fe){var Ee={event:{DRAG:"ztree_drag",DROP:"ztree_drop",RENAME:"ztree_rename",DRAGMOVE:"ztree_dragmove"},id:{EDIT:"_edit",INPUT:"_input",REMOVE:"_remove"},move:{TYPE_INNER:"inner",TYPE_PREV:"prev",TYPE_NEXT:"next"},node:{CURSELECTED_EDIT:"curSelectedNode_Edit",TMPTARGET_TREE:"tmpTargetzTree",TMPTARGET_NODE:"tmpTargetNode"}},s={onHoverOverNode:function(e,t){var o=Re.getSetting(e.data.treeId),d=Re.getRoot(o);d.curHoverNode!=t&&s.onHoverOutNode(e),d.curHoverNode=t,be.addHoverDom(o,t)},onHoverOutNode:function(e,t){var o=Re.getSetting(e.data.treeId),d=Re.getRoot(o);d.curHoverNode&&!Re.isSelectedNode(o,d.curHoverNode)&&(be.removeTreeDom(o,d.curHoverNode),d.curHoverNode=null)},onMousedownNode:function(e,t){var o,d,Z=Re.getSetting(e.data.treeId),$=Re.getRoot(Z),J=Re.getRoots();if(2==e.button||!Z.edit.enable||!Z.edit.drag.isCopy&&!Z.edit.drag.isMove)return!0;var r=e.target,n=Re.getRoot(Z).curSelectedList,ee=[];if(Re.isSelectedNode(Z,t))for(o=0,d=n.length;o<d;o++){if(n[o].editNameFlag&&Ie.eqs(r.tagName,"input")&&null!==r.getAttribute("treeNode"+he.id.INPUT))return!0;if(ee.push(n[o]),ee[0].parentTId!==n[o].parentTId){ee=[t];break}}else ee=[t];be.editNodeBlur=!0,be.cancelCurEditNode(Z);var te,oe,de,re,ne,ae=fe(Z.treeObj.get(0).ownerDocument),ie=fe(Z.treeObj.get(0).ownerDocument.body),le=!1,se=Z,l=Z,ce=null,Ne=null,ue=null,ge=he.move.TYPE_INNER,ve=e.clientX,me=e.clientY,pe=(new Date).getTime();function s(e){if(0==$.dragFlag&&Math.abs(ve-e.clientX)<Z.edit.drag.minMoveSize&&Math.abs(me-e.clientY)<Z.edit.drag.minMoveSize)return!0;var t,o,d,r,n;if(ie.css("cursor","pointer"),0==$.dragFlag){if(0==Ie.apply(Z.callback.beforeDrag,[Z.treeId,ee],!0))return Te(e),!0;for(t=0,o=ee.length;t<o;t++)0==t&&($.dragNodeShowBefore=[]),d=ee[t],Re.nodeIsParent(Z,d)&&d.open?(be.expandCollapseNode(Z,d,!d.open),$.dragNodeShowBefore[d.tId]=!0):$.dragNodeShowBefore[d.tId]=!1;$.dragFlag=1,J.showHoverDom=!1,Ie.showIfameMask(Z,!0);var a=!0,i=-1;if(1<ee.length){var l=ee[0].parentTId?Re.nodeChildren(Z,ee[0].getParentNode()):Re.getNodes(Z);for(n=[],t=0,o=l.length;t<o;t++)if(void 0!==$.dragNodeShowBefore[l[t].tId]&&(a&&-1<i&&i+1!==t&&(a=!1),n.push(l[t]),i=t),ee.length===n.length){ee=n;break}}for(a&&(re=ee[0].getPreNode(),ne=ee[ee.length-1].getNextNode()),te=Pe("<ul class='zTreeDragUL'></ul>",Z),t=0,o=ee.length;t<o;t++)(d=ee[t]).editNameFlag=!1,be.selectNode(Z,d,0<t),be.removeTreeDom(Z,d),t>Z.edit.drag.maxShowNodeNum-1||((r=Pe("<li id='"+d.tId+"_tmp'></li>",Z)).append(Pe(d,he.id.A,Z).clone()),r.css("padding","0"),r.children("#"+d.tId+he.id.A).removeClass(he.node.CURSELECTED),te.append(r),t==Z.edit.drag.maxShowNodeNum-1&&(r=Pe("<li id='"+d.tId+"_moretmp'><a> ... </a></li>",Z),te.append(r)));te.attr("id",ee[0].tId+he.id.UL+"_tmp"),te.addClass(Z.treeObj.attr("class")),te.appendTo(ie),(oe=Pe("<span class='tmpzTreeMove_arrow'></span>",Z)).attr("id","zTreeMove_arrow_tmp"),oe.appendTo(ie),Z.treeObj.trigger(he.event.DRAG,[e,Z.treeId,ee])}if(1==$.dragFlag){if(de&&oe.attr("id")==e.target.id&&ue&&e.clientX+ae.scrollLeft()+2>fe("#"+ue+he.id.A,de).offset().left){var s=fe("#"+ue+he.id.A,de);e.target=0<s.length?s.get(0):e.target}else de&&(de.removeClass(he.node.TMPTARGET_TREE),ue&&fe("#"+ue+he.id.A,de).removeClass(he.node.TMPTARGET_NODE+"_"+he.move.TYPE_PREV).removeClass(he.node.TMPTARGET_NODE+"_"+Ee.move.TYPE_NEXT).removeClass(he.node.TMPTARGET_NODE+"_"+Ee.move.TYPE_INNER));ue=de=null,le=!1,se=Z;var c=Re.getSettings();for(var N in c)c[N].treeId&&c[N].edit.enable&&c[N].treeId!=Z.treeId&&(e.target.id==c[N].treeId||0<fe(e.target).parents("#"+c[N].treeId).length)&&(le=!0,se=c[N]);var u=ae.scrollTop(),g=ae.scrollLeft(),v=se.treeObj.offset(),m=se.treeObj.get(0).scrollHeight,p=se.treeObj.get(0).scrollWidth,T=e.clientY+u-v.top,f=se.treeObj.height()+v.top-e.clientY-u,E=e.clientX+g-v.left,I=se.treeObj.width()+v.left-e.clientX-g,h=T<Z.edit.drag.borderMax&&T>Z.edit.drag.borderMin,b=f<Z.edit.drag.borderMax&&f>Z.edit.drag.borderMin,R=E<Z.edit.drag.borderMax&&E>Z.edit.drag.borderMin,P=I<Z.edit.drag.borderMax&&I>Z.edit.drag.borderMin,C=T>Z.edit.drag.borderMin&&f>Z.edit.drag.borderMin&&E>Z.edit.drag.borderMin&&I>Z.edit.drag.borderMin,w=h&&se.treeObj.scrollTop()<=0,M=b&&se.treeObj.scrollTop()+se.treeObj.height()+10>=m,_=R&&se.treeObj.scrollLeft()<=0,O=P&&se.treeObj.scrollLeft()+se.treeObj.width()+10>=p;if(e.target&&Ie.isChildOrSelf(e.target,se.treeId)){for(var D=e.target;D&&D.tagName&&!Ie.eqs(D.tagName,"li")&&D.id!=se.treeId;)D=D.parentNode;var y=!0;for(t=0,o=ee.length;t<o;t++){if(d=ee[t],D.id===d.tId){y=!1;break}if(0<Pe(d,Z).find("#"+D.id).length){y=!1;break}}y&&e.target&&Ie.isChildOrSelf(e.target,D.id+he.id.A)&&(de=fe(D),ue=D.id)}d=ee[0],C&&Ie.isChildOrSelf(e.target,se.treeId)&&(!de&&(e.target.id==se.treeId||w||M||_||O)&&(le||!le&&d.parentTId)&&(de=se.treeObj),h?se.treeObj.scrollTop(se.treeObj.scrollTop()-10):b&&se.treeObj.scrollTop(se.treeObj.scrollTop()+10),R?se.treeObj.scrollLeft(se.treeObj.scrollLeft()-10):P&&se.treeObj.scrollLeft(se.treeObj.scrollLeft()+10),de&&de!=se.treeObj&&de.offset().left<se.treeObj.offset().left&&se.treeObj.scrollLeft(se.treeObj.scrollLeft()+de.offset().left-se.treeObj.offset().left)),te.css({top:e.clientY+u+3+"px",left:e.clientX+g+3+"px"});var k=0,S=0;if(de&&de.attr("id")!=se.treeId){var A=null==ue?null:Re.getNodeCache(se,ue),L=(e.ctrlKey||e.metaKey)&&Z.edit.drag.isMove&&Z.edit.drag.isCopy||!Z.edit.drag.isMove&&Z.edit.drag.isCopy,Y=!(!re||ue!==re.tId),x=!(!ne||ue!==ne.tId),j=d.parentTId&&d.parentTId==ue,z=(L||!x)&&Ie.apply(se.edit.drag.prev,[se.treeId,ee,A],!!se.edit.drag.prev),B=(L||!Y)&&Ie.apply(se.edit.drag.next,[se.treeId,ee,A],!!se.edit.drag.next),H=(L||!j)&&!(se.data.keep.leaf&&!Re.nodeIsParent(Z,A))&&Ie.apply(se.edit.drag.inner,[se.treeId,ee,A],!!se.edit.drag.inner);function F(){de=null,ue="",ge=he.move.TYPE_INNER,oe.css({display:"none"}),window.zTreeMoveTimer&&(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null)}if(z||B||H){var V=fe("#"+ue+he.id.A,de),U=A.isLastNode?null:fe("#"+A.getNextNode().tId+he.id.A,de.next()),G=V.offset().top,X=V.offset().left,q=z?H?.25:B?.5:1:-1,W=B?H?.75:z?.5:0:-1,K=(e.clientY+u-G)/V.height();if((1==q||K<=q&&-.2<=K)&&z?(k=1-oe.width(),S=G-oe.height()/2,ge=he.move.TYPE_PREV):(0==W||W<=K&&K<=1.2)&&B?(k=1-oe.width(),S=null==U||Re.nodeIsParent(Z,A)&&A.open?G+V.height()-oe.height()/2:U.offset().top-oe.height()/2,ge=he.move.TYPE_NEXT):H?(k=5-oe.width(),S=G,ge=he.move.TYPE_INNER):F(),de&&(oe.css({display:"block",top:S+"px",left:X+k+"px"}),V.addClass(he.node.TMPTARGET_NODE+"_"+ge),ce==ue&&Ne==ge||(pe=(new Date).getTime()),A&&Re.nodeIsParent(Z,A)&&ge==he.move.TYPE_INNER)){var Q=!0;window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId!==A.tId?(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null):window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId===A.tId&&(Q=!1),Q&&(window.zTreeMoveTimer=setTimeout(function(){ge==he.move.TYPE_INNER&&A&&Re.nodeIsParent(Z,A)&&!A.open&&(new Date).getTime()-pe>se.edit.drag.autoOpenTime&&Ie.apply(se.callback.beforeDragOpen,[se.treeId,A],!0)&&(be.switchNode(se,A),se.edit.drag.autoExpandTrigger&&se.treeObj.trigger(he.event.EXPAND,[se.treeId,A]))},se.edit.drag.autoOpenTime+50),window.zTreeMoveTargetNodeTId=A.tId)}}else F()}else ge=he.move.TYPE_INNER,de&&Ie.apply(se.edit.drag.inner,[se.treeId,ee,null],!!se.edit.drag.inner)?de.addClass(he.node.TMPTARGET_TREE):de=null,oe.css({display:"none"}),window.zTreeMoveTimer&&(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null);ce=ue,Ne=ge,Z.treeObj.trigger(he.event.DRAGMOVE,[e,Z.treeId,ee])}return!1}function Te(d){if(window.zTreeMoveTimer&&(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null),Ne=ce=null,ae.unbind("mousemove",s),ae.unbind("mouseup",Te),ae.unbind("selectstart",c),ie.css("cursor",""),de&&(de.removeClass(he.node.TMPTARGET_TREE),ue&&fe("#"+ue+he.id.A,de).removeClass(he.node.TMPTARGET_NODE+"_"+he.move.TYPE_PREV).removeClass(he.node.TMPTARGET_NODE+"_"+Ee.move.TYPE_NEXT).removeClass(he.node.TMPTARGET_NODE+"_"+Ee.move.TYPE_INNER)),Ie.showIfameMask(Z,!1),J.showHoverDom=!0,0!=$.dragFlag){var e,t,o;for(e=$.dragFlag=0,t=ee.length;e<t;e++)o=ee[e],Re.nodeIsParent(Z,o)&&$.dragNodeShowBefore[o.tId]&&!o.open&&(be.expandCollapseNode(Z,o,!o.open),delete $.dragNodeShowBefore[o.tId]);te&&te.remove(),oe&&oe.remove();var r=(d.ctrlKey||d.metaKey)&&Z.edit.drag.isMove&&Z.edit.drag.isCopy||!Z.edit.drag.isMove&&Z.edit.drag.isCopy;if(!r&&de&&ue&&ee[0].parentTId&&ue==ee[0].parentTId&&ge==he.move.TYPE_INNER&&(de=null),de){var n=null==ue?null:Re.getNodeCache(se,ue);if(0==Ie.apply(Z.callback.beforeDrop,[se.treeId,ee,n,ge,r],!0))return void be.selectNodes(l,ee);var a=r?Ie.clone(ee):ee;function i(){if(le){if(!r)for(var e=0,t=ee.length;e<t;e++)be.removeNode(Z,ee[e]);ge==he.move.TYPE_INNER?be.addNodes(se,n,-1,a):be.addNodes(se,n.getParentNode(),ge==he.move.TYPE_PREV?n.getIndex():n.getIndex()+1,a)}else if(r&&ge==he.move.TYPE_INNER)be.addNodes(se,n,-1,a);else if(r)be.addNodes(se,n.getParentNode(),ge==he.move.TYPE_PREV?n.getIndex():n.getIndex()+1,a);else if(ge!=he.move.TYPE_NEXT)for(e=0,t=a.length;e<t;e++)be.moveNode(se,n,a[e],ge,!1);else for(e=-1,t=a.length-1;e<t;t--)be.moveNode(se,n,a[t],ge,!1);be.selectNodes(se,a);var o=Pe(a[0],Z).get(0);be.scrollIntoView(Z,o),Z.treeObj.trigger(he.event.DROP,[d,se.treeId,a,n,ge,r])}ge==he.move.TYPE_INNER&&Ie.canAsync(se,n)?be.asyncNode(se,n,!1,i):i()}else be.selectNodes(l,ee),Z.treeObj.trigger(he.event.DROP,[d,Z.treeId,ee,null,null,null])}}function c(){return!1}return Ie.uCanDo(Z)&&ae.bind("mousemove",s),ae.bind("mouseup",Te),ae.bind("selectstart",c),!0}},e={tools:{getAbs:function(e){var t=e.getBoundingClientRect(),o=document.body.scrollTop+document.documentElement.scrollTop,d=document.body.scrollLeft+document.documentElement.scrollLeft;return[t.left+d,t.top+o]},inputFocus:function(e){e.get(0)&&(e.focus(),Ie.setCursorPosition(e.get(0),e.val().length))},inputSelect:function(e){e.get(0)&&(e.focus(),e.select())},setCursorPosition:function(e,t){if(e.setSelectionRange)e.focus(),e.setSelectionRange(t,t);else if(e.createTextRange){var o=e.createTextRange();o.collapse(!0),o.moveEnd("character",t),o.moveStart("character",t),o.select()}},showIfameMask:function(e,t){for(var o=Re.getRoot(e);0<o.dragMaskList.length;)o.dragMaskList[0].remove(),o.dragMaskList.shift();if(t)for(var d=Pe("iframe",e),r=0,n=d.length;r<n;r++){var a=d.get(r),i=Ie.getAbs(a),l=Pe("<div id='zTreeMask_"+r+"' class='zTreeMask' style='top:"+i[1]+"px; left:"+i[0]+"px; width:"+a.offsetWidth+"px; height:"+a.offsetHeight+"px;'></div>",e);l.appendTo(Pe("body",e)),o.dragMaskList.push(l)}}},view:{addEditBtn:function(e,t){if(!(t.editNameFlag||0<Pe(t,he.id.EDIT,e).length)&&Ie.apply(e.edit.showRenameBtn,[e.treeId,t],e.edit.showRenameBtn)){var o=Pe(t,he.id.A,e),d="<span class='"+he.className.BUTTON+" edit' id='"+t.tId+he.id.EDIT+"' title='"+Ie.apply(e.edit.renameTitle,[e.treeId,t],e.edit.renameTitle)+"' treeNode"+he.id.EDIT+" style='display:none;'></span>";o.append(d),Pe(t,he.id.EDIT,e).bind("click",function(){return Ie.uCanDo(e)&&0!=Ie.apply(e.callback.beforeEditName,[e.treeId,t],!0)&&be.editNode(e,t),!1}).show()}},addRemoveBtn:function(e,t){if(!(t.editNameFlag||0<Pe(t,he.id.REMOVE,e).length)&&Ie.apply(e.edit.showRemoveBtn,[e.treeId,t],e.edit.showRemoveBtn)){var o=Pe(t,he.id.A,e),d="<span class='"+he.className.BUTTON+" remove' id='"+t.tId+he.id.REMOVE+"' title='"+Ie.apply(e.edit.removeTitle,[e.treeId,t],e.edit.removeTitle)+"' treeNode"+he.id.REMOVE+" style='display:none;'></span>";o.append(d),Pe(t,he.id.REMOVE,e).bind("click",function(){return Ie.uCanDo(e)&&0!=Ie.apply(e.callback.beforeRemove,[e.treeId,t],!0)&&(be.removeNode(e,t),e.treeObj.trigger(he.event.REMOVE,[e.treeId,t])),!1}).bind("mousedown",function(e){return!0}).show()}},addHoverDom:function(e,t){Re.getRoots().showHoverDom&&(t.isHover=!0,e.edit.enable&&(be.addEditBtn(e,t),be.addRemoveBtn(e,t)),Ie.apply(e.view.addHoverDom,[e.treeId,t]))},cancelCurEditNode:function(e,t,o){var d=Re.getRoot(e),r=d.curEditNode;if(r){var n=d.curEditInput,a=t||(o?Re.nodeName(e,r):n.val());if(!1===Ie.apply(e.callback.beforeRename,[e.treeId,r,a,o],!0))return!1;Re.nodeName(e,r,a),Pe(r,he.id.A,e).removeClass(he.node.CURSELECTED_EDIT),n.unbind(),be.setNodeName(e,r),r.editNameFlag=!1,d.curEditNode=null,d.curEditInput=null,be.selectNode(e,r,!1),e.treeObj.trigger(he.event.RENAME,[e.treeId,r,o])}return d.noSelection=!0},editNode:function(t,e){var o=Re.getRoot(t);if(be.editNodeBlur=!1,Re.isSelectedNode(t,e)&&o.curEditNode==e&&e.editNameFlag)setTimeout(function(){Ie.inputFocus(o.curEditInput)},0);else{e.editNameFlag=!0,be.removeTreeDom(t,e),be.cancelCurEditNode(t),be.selectNode(t,e,!1),Pe(e,he.id.SPAN,t).html("<input type=text class='rename' id='"+e.tId+he.id.INPUT+"' treeNode"+he.id.INPUT+" >");var d=Pe(e,he.id.INPUT,t);d.attr("value",Re.nodeName(t,e)),t.edit.editNameSelectAll?Ie.inputSelect(d):Ie.inputFocus(d),d.bind("blur",function(e){be.editNodeBlur||be.cancelCurEditNode(t)}).bind("keydown",function(e){"13"==e.keyCode?(be.editNodeBlur=!0,be.cancelCurEditNode(t)):"27"==e.keyCode&&be.cancelCurEditNode(t,null,!0)}).bind("click",function(e){return!1}).bind("dblclick",function(e){return!1}),Pe(e,he.id.A,t).addClass(he.node.CURSELECTED_EDIT),o.curEditInput=d,o.noSelection=!1,o.curEditNode=e}},moveNode:function(e,t,o,d,r,n){var a=Re.getRoot(e);if(t!=o&&(!e.data.keep.leaf||!t||Re.nodeIsParent(e,t)||d!=he.move.TYPE_INNER)){var i=o.parentTId?o.getParentNode():a,l=null===t||t==a;l&&null===t&&(t=a),l&&(d=he.move.TYPE_INNER);var s,c,N=t.parentTId?t.getParentNode():a;if(d!=he.move.TYPE_PREV&&d!=he.move.TYPE_NEXT&&(d=he.move.TYPE_INNER),d==he.move.TYPE_INNER&&(l?o.parentTId=null:(Re.nodeIsParent(e,t)||(Re.nodeIsParent(e,t,!0),t.open=!!t.open,be.setNodeLineIcos(e,t)),o.parentTId=t.tId)),l)c=s=e.treeObj;else{if(n||d!=he.move.TYPE_INNER?n||be.expandCollapseNode(e,t.getParentNode(),!0,!1):be.expandCollapseNode(e,t,!0,!1),s=Pe(t,e),c=Pe(t,he.id.UL,e),s.get(0)&&!c.get(0)){var u=[];be.makeUlHtml(e,t,u,""),s.append(u.join(""))}c=Pe(t,he.id.UL,e)}var g=Pe(o,e);g.get(0)?s.get(0)||g.remove():g=be.appendNodes(e,o.level,[o],null,-1,!1,!0).join(""),c.get(0)&&d==he.move.TYPE_INNER?c.append(g):s.get(0)&&d==he.move.TYPE_PREV?s.before(g):s.get(0)&&d==he.move.TYPE_NEXT&&s.after(g);var v,m,p=-1,T=0,f=null,E=null,I=o.level,h=Re.nodeChildren(e,i),b=Re.nodeChildren(e,N),R=Re.nodeChildren(e,t);if(o.isFirstNode)p=0,1<h.length&&((f=h[1]).isFirstNode=!0);else if(o.isLastNode)(f=h[(p=h.length-1)-1]).isLastNode=!0;else for(v=0,m=h.length;v<m;v++)if(h[v].tId==o.tId){p=v;break}if(0<=p&&h.splice(p,1),d!=he.move.TYPE_INNER)for(v=0,m=b.length;v<m;v++)b[v].tId==t.tId&&(T=v);if(d==he.move.TYPE_INNER?(0<(R=R||Re.nodeChildren(e,t,[])).length&&((E=R[R.length-1]).isLastNode=!1),R.splice(R.length,0,o),o.isLastNode=!0,o.isFirstNode=1==R.length):t.isFirstNode&&d==he.move.TYPE_PREV?(b.splice(T,0,o),(E=t).isFirstNode=!1,o.parentTId=t.parentTId,o.isFirstNode=!0,o.isLastNode=!1):t.isLastNode&&d==he.move.TYPE_NEXT?(b.splice(T+1,0,o),(E=t).isLastNode=!1,o.parentTId=t.parentTId,o.isFirstNode=!1,o.isLastNode=!0):(d==he.move.TYPE_PREV?b.splice(T,0,o):b.splice(T+1,0,o),o.parentTId=t.parentTId,o.isFirstNode=!1,o.isLastNode=!1),Re.fixPIdKeyValue(e,o),Re.setSonNodeLevel(e,o.getParentNode(),o),be.setNodeLineIcos(e,o),be.repairNodeLevelClass(e,o,I),!e.data.keep.parent&&h.length<1){Re.nodeIsParent(e,i,!1),i.open=!1;var P=Pe(i,he.id.UL,e),C=Pe(i,he.id.SWITCH,e),w=Pe(i,he.id.ICON,e);be.replaceSwitchClass(i,C,he.folder.DOCU),be.replaceIcoClass(i,w,he.folder.DOCU),P.css("display","none")}else f&&be.setNodeLineIcos(e,f);E&&be.setNodeLineIcos(e,E),e.check&&e.check.enable&&be.repairChkClass&&(be.repairChkClass(e,i),be.repairParentChkClassWithSelf(e,i),i!=o.parent&&be.repairParentChkClassWithSelf(e,o)),n||be.expandCollapseParentNode(e,o.getParentNode(),!0,r)}},removeEditBtn:function(e,t){Pe(t,he.id.EDIT,e).unbind().remove()},removeRemoveBtn:function(e,t){Pe(t,he.id.REMOVE,e).unbind().remove()},removeTreeDom:function(e,t){t.isHover=!1,be.removeEditBtn(e,t),be.removeRemoveBtn(e,t),Ie.apply(e.view.removeHoverDom,[e.treeId,t])},repairNodeLevelClass:function(e,t,o){if(o!==t.level){var d=Pe(t,e),r=Pe(t,he.id.A,e),n=Pe(t,he.id.UL,e),a=he.className.LEVEL+o,i=he.className.LEVEL+t.level;d.removeClass(a),d.addClass(i),r.removeClass(a),r.addClass(i),n.removeClass(a),n.addClass(i)}},selectNodes:function(e,t){for(var o=0,d=t.length;o<d;o++)be.selectNode(e,t[o],0<o)}},event:{},data:{setSonNodeLevel:function(e,t,o){if(o){var d=Re.nodeChildren(e,o);if(o.level=t?t.level+1:0,d)for(var r=0,n=d.length;r<n;r++)d[r]&&Re.setSonNodeLevel(e,o,d[r])}}}};fe.extend(!0,fe.fn.zTree.consts,Ee),fe.extend(!0,fe.fn.zTree._z,e);var t=fe.fn.zTree,Ie=t._z.tools,he=t.consts,be=t._z.view,Re=t._z.data,Pe=(t._z.event,Ie.$);Re.exSetting({edit:{enable:!1,editNameSelectAll:!1,showRemoveBtn:!0,showRenameBtn:!0,removeTitle:"remove",renameTitle:"rename",drag:{autoExpandTrigger:!1,isCopy:!0,isMove:!0,prev:!0,next:!0,inner:!0,minMoveSize:5,borderMax:10,borderMin:-5,maxShowNodeNum:5,autoOpenTime:500}},view:{addHoverDom:null,removeHoverDom:null},callback:{beforeDrag:null,beforeDragOpen:null,beforeDrop:null,beforeEditName:null,beforeRename:null,onDrag:null,onDragMove:null,onDrop:null,onRename:null}}),Re.addInitBind(function(i){var e=i.treeObj,t=he.event;e.bind(t.RENAME,function(e,t,o,d){Ie.apply(i.callback.onRename,[e,t,o,d])}),e.bind(t.DRAG,function(e,t,o,d){Ie.apply(i.callback.onDrag,[t,o,d])}),e.bind(t.DRAGMOVE,function(e,t,o,d){Ie.apply(i.callback.onDragMove,[t,o,d])}),e.bind(t.DROP,function(e,t,o,d,r,n,a){Ie.apply(i.callback.onDrop,[t,o,d,r,n,a])})}),Re.addInitUnBind(function(e){var t=e.treeObj,o=he.event;t.unbind(o.RENAME),t.unbind(o.DRAG),t.unbind(o.DRAGMOVE),t.unbind(o.DROP)}),Re.addInitCache(function(e){}),Re.addInitNode(function(e,t,o,d,r,n,a){o&&(o.isHover=!1,o.editNameFlag=!1)}),Re.addInitProxy(function(e){var t=e.target,o=Re.getSetting(e.data.treeId),d=e.relatedTarget,r="",n=null,a="",i=null,l=null;if(Ie.eqs(e.type,"mouseover")?(l=Ie.getMDom(o,t,[{tagName:"a",attrName:"treeNode"+he.id.A}]))&&(r=Ie.getNodeMainDom(l).id,a="hoverOverNode"):Ie.eqs(e.type,"mouseout")?(l=Ie.getMDom(o,d,[{tagName:"a",attrName:"treeNode"+he.id.A}]))||(r="remove",a="hoverOutNode"):Ie.eqs(e.type,"mousedown")&&(l=Ie.getMDom(o,t,[{tagName:"a",attrName:"treeNode"+he.id.A}]))&&(r=Ie.getNodeMainDom(l).id,a="mousedownNode"),0<r.length)switch(n=Re.getNodeCache(o,r),a){case"mousedownNode":i=s.onMousedownNode;break;case"hoverOverNode":i=s.onHoverOverNode;break;case"hoverOutNode":i=s.onHoverOutNode}return{stop:!1,node:n,nodeEventType:a,nodeEventCallback:i,treeEventType:"",treeEventCallback:null}}),Re.addInitRoot(function(e){var t=Re.getRoot(e),o=Re.getRoots();t.curEditNode=null,t.curEditInput=null,t.curHoverNode=null,t.dragFlag=0,t.dragNodeShowBefore=[],t.dragMaskList=new Array,o.showHoverDom=!0}),Re.addZTreeTools(function(l,e){e.cancelEditName=function(e){Re.getRoot(this.setting).curEditNode&&be.cancelCurEditNode(this.setting,e||null,!0)},e.copyNode=function(e,t,o,d){if(!t)return null;var r=Re.nodeIsParent(l,e);if(e&&!r&&this.setting.data.keep.leaf&&o===he.move.TYPE_INNER)return null;var n=this,a=Ie.clone(t);if(e||(e=null,o=he.move.TYPE_INNER),o==he.move.TYPE_INNER){function i(){be.addNodes(n.setting,e,-1,[a],d)}Ie.canAsync(this.setting,e)?be.asyncNode(this.setting,e,d,i):i()}else be.addNodes(this.setting,e.parentNode,-1,[a],d),be.moveNode(this.setting,e,a,o,!1,d);return a},e.editName=function(e){e&&e.tId&&e===Re.getNodeCache(this.setting,e.tId)&&(e.parentTId&&be.expandCollapseParentNode(this.setting,e.getParentNode(),!0),be.editNode(this.setting,e))},e.moveNode=function(e,t,o,d){if(!t)return t;var r=Re.nodeIsParent(l,e);if(e&&!r&&this.setting.data.keep.leaf&&o===he.move.TYPE_INNER)return null;if(e&&(t.parentTId==e.tId&&o==he.move.TYPE_INNER||0<Pe(t,this.setting).find("#"+e.tId).length))return null;e=e||null;var n=this;function a(){be.moveNode(n.setting,e,t,o,!1,d)}return Ie.canAsync(this.setting,e)&&o===he.move.TYPE_INNER?be.asyncNode(this.setting,e,d,a):a(),t},e.setEditable=function(e){return this.setting.edit.enable=e,this.refresh()}});var n=be.cancelPreSelectedNode;be.cancelPreSelectedNode=function(e,t){for(var o=Re.getRoot(e).curSelectedList,d=0,r=o.length;d<r&&(t&&t!==o[d]||(be.removeTreeDom(e,o[d]),!t));d++);n&&n.apply(be,arguments)};var a=be.createNodes;be.createNodes=function(e,t,o,d,r){a&&a.apply(be,arguments),o&&be.repairParentChkClassWithSelf&&be.repairParentChkClassWithSelf(e,d)};var o=be.makeNodeUrl;be.makeNodeUrl=function(e,t){return e.edit.enable?null:o.apply(be,arguments)};var d=be.removeNode;be.removeNode=function(e,t){var o=Re.getRoot(e);o.curEditNode===t&&(o.curEditNode=null),d&&d.apply(be,arguments)};var r=be.selectNode;be.selectNode=function(e,t,o){var d=Re.getRoot(e);return(!Re.isSelectedNode(e,t)||d.curEditNode!=t||!t.editNameFlag)&&(r&&r.apply(be,arguments),be.addHoverDom(e,t),!0)};var i=Ie.uCanDo;Ie.uCanDo=function(e,t){var o=Re.getRoot(e);return!(!t||!(Ie.eqs(t.type,"mouseover")||Ie.eqs(t.type,"mouseout")||Ie.eqs(t.type,"mousedown")||Ie.eqs(t.type,"mouseup")))||(o.curEditNode&&(be.editNodeBlur=!1,o.curEditInput.focus()),!o.curEditNode&&(!i||i.apply(be,arguments)))}}(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exedit.min.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.core.js
===================================================================
--- base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.core.js (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.core.js (revision 10)
@@ -0,0 +1,2006 @@
+/*
+ * JQuery zTree core
+ * v3.5.43
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: 2020-04-04
+ */
+
+(function ($) {
+ var settings = {}, roots = {}, caches = {},
+ //default consts of core
+ _consts = {
+ className: {
+ BUTTON: "button",
+ LEVEL: "level",
+ ICO_LOADING: "ico_loading",
+ SWITCH: "switch",
+ NAME: 'node_name'
+ },
+ event: {
+ NODECREATED: "ztree_nodeCreated",
+ CLICK: "ztree_click",
+ EXPAND: "ztree_expand",
+ COLLAPSE: "ztree_collapse",
+ ASYNC_SUCCESS: "ztree_async_success",
+ ASYNC_ERROR: "ztree_async_error",
+ REMOVE: "ztree_remove",
+ SELECTED: "ztree_selected",
+ UNSELECTED: "ztree_unselected"
+ },
+ id: {
+ A: "_a",
+ ICON: "_ico",
+ SPAN: "_span",
+ SWITCH: "_switch",
+ UL: "_ul"
+ },
+ line: {
+ ROOT: "root",
+ ROOTS: "roots",
+ CENTER: "center",
+ BOTTOM: "bottom",
+ NOLINE: "noline",
+ LINE: "line"
+ },
+ folder: {
+ OPEN: "open",
+ CLOSE: "close",
+ DOCU: "docu"
+ },
+ node: {
+ CURSELECTED: "curSelectedNode"
+ }
+ },
+ //default setting of core
+ _setting = {
+ treeId: "",
+ treeObj: null,
+ view: {
+ addDiyDom: null,
+ autoCancelSelected: true,
+ dblClickExpand: true,
+ expandSpeed: "fast",
+ fontCss: {},
+ nodeClasses: {},
+ nameIsHTML: false,
+ selectedMulti: true,
+ showIcon: true,
+ showLine: true,
+ showTitle: true,
+ txtSelectedEnable: false
+ },
+ data: {
+ key: {
+ isParent: "isParent",
+ children: "children",
+ name: "name",
+ title: "",
+ url: "url",
+ icon: "icon"
+ },
+ simpleData: {
+ enable: false,
+ idKey: "id",
+ pIdKey: "pId",
+ rootPId: null
+ },
+ keep: {
+ parent: false,
+ leaf: false
+ }
+ },
+ async: {
+ enable: false,
+ contentType: "application/x-www-form-urlencoded",
+ type: "post",
+ dataType: "text",
+ headers: {},
+ xhrFields: {},
+ url: "",
+ autoParam: [],
+ otherParam: [],
+ dataFilter: null
+ },
+ callback: {
+ beforeAsync: null,
+ beforeClick: null,
+ beforeDblClick: null,
+ beforeRightClick: null,
+ beforeMouseDown: null,
+ beforeMouseUp: null,
+ beforeExpand: null,
+ beforeCollapse: null,
+ beforeRemove: null,
+
+ onAsyncError: null,
+ onAsyncSuccess: null,
+ onNodeCreated: null,
+ onClick: null,
+ onDblClick: null,
+ onRightClick: null,
+ onMouseDown: null,
+ onMouseUp: null,
+ onExpand: null,
+ onCollapse: null,
+ onRemove: null
+ }
+ },
+ //default root of core
+ //zTree use root to save full data
+ _initRoot = function (setting) {
+ var r = data.getRoot(setting);
+ if (!r) {
+ r = {};
+ data.setRoot(setting, r);
+ }
+ data.nodeChildren(setting, r, []);
+ r.expandTriggerFlag = false;
+ r.curSelectedList = [];
+ r.noSelection = true;
+ r.createdNodes = [];
+ r.zId = 0;
+ r._ver = (new Date()).getTime();
+ },
+ //default cache of core
+ _initCache = function (setting) {
+ var c = data.getCache(setting);
+ if (!c) {
+ c = {};
+ data.setCache(setting, c);
+ }
+ c.nodes = [];
+ c.doms = [];
+ },
+ //default bindEvent of core
+ _bindEvent = function (setting) {
+ var o = setting.treeObj,
+ c = consts.event;
+ o.bind(c.NODECREATED, function (event, treeId, node) {
+ tools.apply(setting.callback.onNodeCreated, [event, treeId, node]);
+ });
+
+ o.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) {
+ tools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]);
+ });
+
+ o.bind(c.EXPAND, function (event, treeId, node) {
+ tools.apply(setting.callback.onExpand, [event, treeId, node]);
+ });
+
+ o.bind(c.COLLAPSE, function (event, treeId, node) {
+ tools.apply(setting.callback.onCollapse, [event, treeId, node]);
+ });
+
+ o.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) {
+ tools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]);
+ });
+
+ o.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) {
+ tools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]);
+ });
+
+ o.bind(c.REMOVE, function (event, treeId, treeNode) {
+ tools.apply(setting.callback.onRemove, [event, treeId, treeNode]);
+ });
+
+ o.bind(c.SELECTED, function (event, treeId, node) {
+ tools.apply(setting.callback.onSelected, [treeId, node]);
+ });
+ o.bind(c.UNSELECTED, function (event, treeId, node) {
+ tools.apply(setting.callback.onUnSelected, [treeId, node]);
+ });
+ },
+ _unbindEvent = function (setting) {
+ var o = setting.treeObj,
+ c = consts.event;
+ o.unbind(c.NODECREATED)
+ .unbind(c.CLICK)
+ .unbind(c.EXPAND)
+ .unbind(c.COLLAPSE)
+ .unbind(c.ASYNC_SUCCESS)
+ .unbind(c.ASYNC_ERROR)
+ .unbind(c.REMOVE)
+ .unbind(c.SELECTED)
+ .unbind(c.UNSELECTED);
+ },
+ //default event proxy of core
+ _eventProxy = function (event) {
+ var target = event.target,
+ setting = data.getSetting(event.data.treeId),
+ tId = "", node = null,
+ nodeEventType = "", treeEventType = "",
+ nodeEventCallback = null, treeEventCallback = null,
+ tmp = null;
+
+ if (tools.eqs(event.type, "mousedown")) {
+ treeEventType = "mousedown";
+ } else if (tools.eqs(event.type, "mouseup")) {
+ treeEventType = "mouseup";
+ } else if (tools.eqs(event.type, "contextmenu")) {
+ treeEventType = "contextmenu";
+ } else if (tools.eqs(event.type, "click")) {
+ if (tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.SWITCH) !== null) {
+ tId = tools.getNodeMainDom(target).id;
+ nodeEventType = "switchNode";
+ } else {
+ tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (tmp) {
+ tId = tools.getNodeMainDom(tmp).id;
+ nodeEventType = "clickNode";
+ }
+ }
+ } else if (tools.eqs(event.type, "dblclick")) {
+ treeEventType = "dblclick";
+ tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (tmp) {
+ tId = tools.getNodeMainDom(tmp).id;
+ nodeEventType = "switchNode";
+ }
+ }
+ if (treeEventType.length > 0 && tId.length == 0) {
+ tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (tmp) {
+ tId = tools.getNodeMainDom(tmp).id;
+ }
+ }
+ // event to node
+ if (tId.length > 0) {
+ node = data.getNodeCache(setting, tId);
+ switch (nodeEventType) {
+ case "switchNode" :
+ var isParent = data.nodeIsParent(setting, node);
+ if (!isParent) {
+ nodeEventType = "";
+ } else if (tools.eqs(event.type, "click")
+ || (tools.eqs(event.type, "dblclick") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) {
+ nodeEventCallback = handler.onSwitchNode;
+ } else {
+ nodeEventType = "";
+ }
+ break;
+ case "clickNode" :
+ nodeEventCallback = handler.onClickNode;
+ break;
+ }
+ }
+ // event to zTree
+ switch (treeEventType) {
+ case "mousedown" :
+ treeEventCallback = handler.onZTreeMousedown;
+ break;
+ case "mouseup" :
+ treeEventCallback = handler.onZTreeMouseup;
+ break;
+ case "dblclick" :
+ treeEventCallback = handler.onZTreeDblclick;
+ break;
+ case "contextmenu" :
+ treeEventCallback = handler.onZTreeContextmenu;
+ break;
+ }
+ var proxyResult = {
+ stop: false,
+ node: node,
+ nodeEventType: nodeEventType,
+ nodeEventCallback: nodeEventCallback,
+ treeEventType: treeEventType,
+ treeEventCallback: treeEventCallback
+ };
+ return proxyResult
+ },
+ //default init node of core
+ _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
+ if (!n) return;
+ var r = data.getRoot(setting),
+ children = data.nodeChildren(setting, n);
+ n.level = level;
+ n.tId = setting.treeId + "_" + (++r.zId);
+ n.parentTId = parentNode ? parentNode.tId : null;
+ n.open = (typeof n.open == "string") ? tools.eqs(n.open, "true") : !!n.open;
+ var isParent = data.nodeIsParent(setting, n);
+ if (tools.isArray(children)) {
+ data.nodeIsParent(setting, n, true);
+ n.zAsync = true;
+ } else {
+ isParent = data.nodeIsParent(setting, n, isParent);
+ n.open = (isParent && !setting.async.enable) ? n.open : false;
+ n.zAsync = !isParent;
+ }
+ n.isFirstNode = isFirstNode;
+ n.isLastNode = isLastNode;
+ n.getParentNode = function () {
+ return data.getNodeCache(setting, n.parentTId);
+ };
+ n.getPreNode = function () {
+ return data.getPreNode(setting, n);
+ };
+ n.getNextNode = function () {
+ return data.getNextNode(setting, n);
+ };
+ n.getIndex = function () {
+ return data.getNodeIndex(setting, n);
+ };
+ n.getPath = function () {
+ return data.getNodePath(setting, n);
+ };
+ n.isAjaxing = false;
+ data.fixPIdKeyValue(setting, n);
+ },
+ _init = {
+ bind: [_bindEvent],
+ unbind: [_unbindEvent],
+ caches: [_initCache],
+ nodes: [_initNode],
+ proxys: [_eventProxy],
+ roots: [_initRoot],
+ beforeA: [],
+ afterA: [],
+ innerBeforeA: [],
+ innerAfterA: [],
+ zTreeTools: []
+ },
+ //method of operate data
+ data = {
+ addNodeCache: function (setting, node) {
+ data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node;
+ },
+ getNodeCacheId: function (tId) {
+ return tId.substring(tId.lastIndexOf("_") + 1);
+ },
+ addAfterA: function (afterA) {
+ _init.afterA.push(afterA);
+ },
+ addBeforeA: function (beforeA) {
+ _init.beforeA.push(beforeA);
+ },
+ addInnerAfterA: function (innerAfterA) {
+ _init.innerAfterA.push(innerAfterA);
+ },
+ addInnerBeforeA: function (innerBeforeA) {
+ _init.innerBeforeA.push(innerBeforeA);
+ },
+ addInitBind: function (bindEvent) {
+ _init.bind.push(bindEvent);
+ },
+ addInitUnBind: function (unbindEvent) {
+ _init.unbind.push(unbindEvent);
+ },
+ addInitCache: function (initCache) {
+ _init.caches.push(initCache);
+ },
+ addInitNode: function (initNode) {
+ _init.nodes.push(initNode);
+ },
+ addInitProxy: function (initProxy, isFirst) {
+ if (!!isFirst) {
+ _init.proxys.splice(0, 0, initProxy);
+ } else {
+ _init.proxys.push(initProxy);
+ }
+ },
+ addInitRoot: function (initRoot) {
+ _init.roots.push(initRoot);
+ },
+ addNodesData: function (setting, parentNode, index, nodes) {
+ var children = data.nodeChildren(setting, parentNode), params;
+ if (!children) {
+ children = data.nodeChildren(setting, parentNode, []);
+ index = -1;
+ } else if (index >= children.length) {
+ index = -1;
+ }
+
+ if (children.length > 0 && index === 0) {
+ children[0].isFirstNode = false;
+ view.setNodeLineIcos(setting, children[0]);
+ } else if (children.length > 0 && index < 0) {
+ children[children.length - 1].isLastNode = false;
+ view.setNodeLineIcos(setting, children[children.length - 1]);
+ }
+ data.nodeIsParent(setting, parentNode, true);
+
+ if (index < 0) {
+ data.nodeChildren(setting, parentNode, children.concat(nodes));
+ } else {
+ params = [index, 0].concat(nodes);
+ children.splice.apply(children, params);
+ }
+ },
+ addSelectedNode: function (setting, node) {
+ var root = data.getRoot(setting);
+ if (!data.isSelectedNode(setting, node)) {
+ root.curSelectedList.push(node);
+ }
+ },
+ addCreatedNode: function (setting, node) {
+ if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {
+ var root = data.getRoot(setting);
+ root.createdNodes.push(node);
+ }
+ },
+ addZTreeTools: function (zTreeTools) {
+ _init.zTreeTools.push(zTreeTools);
+ },
+ exSetting: function (s) {
+ $.extend(true, _setting, s);
+ },
+ fixPIdKeyValue: function (setting, node) {
+ if (setting.data.simpleData.enable) {
+ node[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId;
+ }
+ },
+ getAfterA: function (setting, node, array) {
+ for (var i = 0, j = _init.afterA.length; i < j; i++) {
+ _init.afterA[i].apply(this, arguments);
+ }
+ },
+ getBeforeA: function (setting, node, array) {
+ for (var i = 0, j = _init.beforeA.length; i < j; i++) {
+ _init.beforeA[i].apply(this, arguments);
+ }
+ },
+ getInnerAfterA: function (setting, node, array) {
+ for (var i = 0, j = _init.innerAfterA.length; i < j; i++) {
+ _init.innerAfterA[i].apply(this, arguments);
+ }
+ },
+ getInnerBeforeA: function (setting, node, array) {
+ for (var i = 0, j = _init.innerBeforeA.length; i < j; i++) {
+ _init.innerBeforeA[i].apply(this, arguments);
+ }
+ },
+ getCache: function (setting) {
+ return caches[setting.treeId];
+ },
+ getNodeIndex: function (setting, node) {
+ if (!node) return null;
+ var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
+ children = data.nodeChildren(setting, p);
+ for (var i = 0, l = children.length - 1; i <= l; i++) {
+ if (children[i] === node) {
+ return i;
+ }
+ }
+ return -1;
+ },
+ getNextNode: function (setting, node) {
+ if (!node) return null;
+ var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
+ children = data.nodeChildren(setting, p);
+ for (var i = 0, l = children.length - 1; i <= l; i++) {
+ if (children[i] === node) {
+ return (i == l ? null : children[i + 1]);
+ }
+ }
+ return null;
+ },
+ getNodeByParam: function (setting, nodes, key, value) {
+ if (!nodes || !key) return null;
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ if (node[key] == value) {
+ return nodes[i];
+ }
+ var children = data.nodeChildren(setting, node);
+ var tmp = data.getNodeByParam(setting, children, key, value);
+ if (tmp) return tmp;
+ }
+ return null;
+ },
+ getNodeCache: function (setting, tId) {
+ if (!tId) return null;
+ var n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)];
+ return n ? n : null;
+ },
+ getNodePath: function (setting, node) {
+ if (!node) return null;
+
+ var path;
+ if (node.parentTId) {
+ path = node.getParentNode().getPath();
+ } else {
+ path = [];
+ }
+
+ if (path) {
+ path.push(node);
+ }
+
+ return path;
+ },
+ getNodes: function (setting) {
+ return data.nodeChildren(setting, data.getRoot(setting));
+ },
+ getNodesByParam: function (setting, nodes, key, value) {
+ if (!nodes || !key) return [];
+ var result = [];
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ if (node[key] == value) {
+ result.push(node);
+ }
+ var children = data.nodeChildren(setting, node);
+ result = result.concat(data.getNodesByParam(setting, children, key, value));
+ }
+ return result;
+ },
+ getNodesByParamFuzzy: function (setting, nodes, key, value) {
+ if (!nodes || !key) return [];
+ var result = [];
+ value = value.toLowerCase();
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ if (typeof node[key] == "string" && nodes[i][key].toLowerCase().indexOf(value) > -1) {
+ result.push(node);
+ }
+ var children = data.nodeChildren(setting, node);
+ result = result.concat(data.getNodesByParamFuzzy(setting, children, key, value));
+ }
+ return result;
+ },
+ getNodesByFilter: function (setting, nodes, filter, isSingle, invokeParam) {
+ if (!nodes) return (isSingle ? null : []);
+ var result = isSingle ? null : [];
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ if (tools.apply(filter, [node, invokeParam], false)) {
+ if (isSingle) {
+ return node;
+ }
+ result.push(node);
+ }
+ var children = data.nodeChildren(setting, node);
+ var tmpResult = data.getNodesByFilter(setting, children, filter, isSingle, invokeParam);
+ if (isSingle && !!tmpResult) {
+ return tmpResult;
+ }
+ result = isSingle ? tmpResult : result.concat(tmpResult);
+ }
+ return result;
+ },
+ getPreNode: function (setting, node) {
+ if (!node) return null;
+ var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
+ children = data.nodeChildren(setting, p);
+ for (var i = 0, l = children.length; i < l; i++) {
+ if (children[i] === node) {
+ return (i == 0 ? null : children[i - 1]);
+ }
+ }
+ return null;
+ },
+ getRoot: function (setting) {
+ return setting ? roots[setting.treeId] : null;
+ },
+ getRoots: function () {
+ return roots;
+ },
+ getSetting: function (treeId) {
+ return settings[treeId];
+ },
+ getSettings: function () {
+ return settings;
+ },
+ getZTreeTools: function (treeId) {
+ var r = this.getRoot(this.getSetting(treeId));
+ return r ? r.treeTools : null;
+ },
+ initCache: function (setting) {
+ for (var i = 0, j = _init.caches.length; i < j; i++) {
+ _init.caches[i].apply(this, arguments);
+ }
+ },
+ initNode: function (setting, level, node, parentNode, preNode, nextNode) {
+ for (var i = 0, j = _init.nodes.length; i < j; i++) {
+ _init.nodes[i].apply(this, arguments);
+ }
+ },
+ initRoot: function (setting) {
+ for (var i = 0, j = _init.roots.length; i < j; i++) {
+ _init.roots[i].apply(this, arguments);
+ }
+ },
+ isSelectedNode: function (setting, node) {
+ var root = data.getRoot(setting);
+ for (var i = 0, j = root.curSelectedList.length; i < j; i++) {
+ if (node === root.curSelectedList[i]) return true;
+ }
+ return false;
+ },
+ nodeChildren: function (setting, node, newChildren) {
+ if (!node) {
+ return null;
+ }
+ var key = setting.data.key.children;
+ if (typeof newChildren !== 'undefined') {
+ node[key] = newChildren;
+ }
+ return node[key];
+ },
+ nodeIsParent: function (setting, node, newIsParent) {
+ if (!node) {
+ return false;
+ }
+ var key = setting.data.key.isParent;
+ if (typeof newIsParent !== 'undefined') {
+ if (typeof newIsParent === "string") {
+ newIsParent = tools.eqs(newIsParent, "true");
+ }
+ newIsParent = !!newIsParent;
+ node[key] = newIsParent;
+ } else if (typeof node[key] == "string"){
+ node[key] = tools.eqs(node[key], "true");
+ } else {
+ node[key] = !!node[key];
+ }
+ return node[key];
+ },
+ nodeName: function (setting, node, newName) {
+ var key = setting.data.key.name;
+ if (typeof newName !== 'undefined') {
+ node[key] = newName;
+ }
+ return "" + node[key];
+ },
+ nodeTitle: function (setting, node) {
+ var t = setting.data.key.title === "" ? setting.data.key.name : setting.data.key.title;
+ return "" + node[t];
+ },
+ removeNodeCache: function (setting, node) {
+ var children = data.nodeChildren(setting, node);
+ if (children) {
+ for (var i = 0, l = children.length; i < l; i++) {
+ data.removeNodeCache(setting, children[i]);
+ }
+ }
+ data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null;
+ },
+ removeSelectedNode: function (setting, node) {
+ var root = data.getRoot(setting);
+ for (var i = 0, j = root.curSelectedList.length; i < j; i++) {
+ if (node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) {
+ root.curSelectedList.splice(i, 1);
+ setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]);
+ i--;
+ j--;
+ }
+ }
+ },
+ setCache: function (setting, cache) {
+ caches[setting.treeId] = cache;
+ },
+ setRoot: function (setting, root) {
+ roots[setting.treeId] = root;
+ },
+ setZTreeTools: function (setting, zTreeTools) {
+ for (var i = 0, j = _init.zTreeTools.length; i < j; i++) {
+ _init.zTreeTools[i].apply(this, arguments);
+ }
+ },
+ transformToArrayFormat: function (setting, nodes) {
+ if (!nodes) return [];
+ var r = [];
+ if (tools.isArray(nodes)) {
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ _do(node);
+ }
+ } else {
+ _do(nodes);
+ }
+ return r;
+
+ function _do(_node) {
+ r.push(_node);
+ var children = data.nodeChildren(setting, _node);
+ if (children) {
+ r = r.concat(data.transformToArrayFormat(setting, children));
+ }
+ }
+ },
+ transformTozTreeFormat: function (setting, sNodes) {
+ var i, l,
+ key = setting.data.simpleData.idKey,
+ parentKey = setting.data.simpleData.pIdKey;
+ if (!key || key == "" || !sNodes) return [];
+
+ if (tools.isArray(sNodes)) {
+ var r = [];
+ var tmpMap = {};
+ for (i = 0, l = sNodes.length; i < l; i++) {
+ tmpMap[sNodes[i][key]] = sNodes[i];
+ }
+ for (i = 0, l = sNodes.length; i < l; i++) {
+ var p = tmpMap[sNodes[i][parentKey]];
+ if (p && sNodes[i][key] != sNodes[i][parentKey]) {
+ var children = data.nodeChildren(setting, p);
+ if (!children) {
+ children = data.nodeChildren(setting, p, []);
+ }
+ children.push(sNodes[i]);
+ } else {
+ r.push(sNodes[i]);
+ }
+ }
+ return r;
+ } else {
+ return [sNodes];
+ }
+ }
+ },
+ //method of event proxy
+ event = {
+ bindEvent: function (setting) {
+ for (var i = 0, j = _init.bind.length; i < j; i++) {
+ _init.bind[i].apply(this, arguments);
+ }
+ },
+ unbindEvent: function (setting) {
+ for (var i = 0, j = _init.unbind.length; i < j; i++) {
+ _init.unbind[i].apply(this, arguments);
+ }
+ },
+ bindTree: function (setting) {
+ var eventParam = {
+ treeId: setting.treeId
+ },
+ o = setting.treeObj;
+ if (!setting.view.txtSelectedEnable) {
+ // for can't select text
+ o.bind('selectstart', handler.onSelectStart).css({
+ "-moz-user-select": "-moz-none"
+ });
+ }
+ o.bind('click', eventParam, event.proxy);
+ o.bind('dblclick', eventParam, event.proxy);
+ o.bind('mouseover', eventParam, event.proxy);
+ o.bind('mouseout', eventParam, event.proxy);
+ o.bind('mousedown', eventParam, event.proxy);
+ o.bind('mouseup', eventParam, event.proxy);
+ o.bind('contextmenu', eventParam, event.proxy);
+ },
+ unbindTree: function (setting) {
+ var o = setting.treeObj;
+ o.unbind('selectstart', handler.onSelectStart)
+ .unbind('click', event.proxy)
+ .unbind('dblclick', event.proxy)
+ .unbind('mouseover', event.proxy)
+ .unbind('mouseout', event.proxy)
+ .unbind('mousedown', event.proxy)
+ .unbind('mouseup', event.proxy)
+ .unbind('contextmenu', event.proxy);
+ },
+ doProxy: function (e) {
+ var results = [];
+ for (var i = 0, j = _init.proxys.length; i < j; i++) {
+ var proxyResult = _init.proxys[i].apply(this, arguments);
+ results.push(proxyResult);
+ if (proxyResult.stop) {
+ break;
+ }
+ }
+ return results;
+ },
+ proxy: function (e) {
+ var setting = data.getSetting(e.data.treeId);
+ if (!tools.uCanDo(setting, e)) return true;
+ var results = event.doProxy(e),
+ r = true, x = false;
+ for (var i = 0, l = results.length; i < l; i++) {
+ var proxyResult = results[i];
+ if (proxyResult.nodeEventCallback) {
+ x = true;
+ r = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;
+ }
+ if (proxyResult.treeEventCallback) {
+ x = true;
+ r = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;
+ }
+ }
+ return r;
+ }
+ },
+ //method of event handler
+ handler = {
+ onSwitchNode: function (event, node) {
+ var setting = data.getSetting(event.data.treeId);
+ if (node.open) {
+ if (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true;
+ data.getRoot(setting).expandTriggerFlag = true;
+ view.switchNode(setting, node);
+ } else {
+ if (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true;
+ data.getRoot(setting).expandTriggerFlag = true;
+ view.switchNode(setting, node);
+ }
+ return true;
+ },
+ onClickNode: function (event, node) {
+ var setting = data.getSetting(event.data.treeId),
+ clickFlag = ((setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey)) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey) && setting.view.selectedMulti) ? 2 : 1;
+ if (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true;
+ if (clickFlag === 0) {
+ view.cancelPreSelectedNode(setting, node);
+ } else {
+ view.selectNode(setting, node, clickFlag === 2);
+ }
+ setting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]);
+ return true;
+ },
+ onZTreeMousedown: function (event, node) {
+ var setting = data.getSetting(event.data.treeId);
+ if (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) {
+ tools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]);
+ }
+ return true;
+ },
+ onZTreeMouseup: function (event, node) {
+ var setting = data.getSetting(event.data.treeId);
+ if (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) {
+ tools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]);
+ }
+ return true;
+ },
+ onZTreeDblclick: function (event, node) {
+ var setting = data.getSetting(event.data.treeId);
+ if (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) {
+ tools.apply(setting.callback.onDblClick, [event, setting.treeId, node]);
+ }
+ return true;
+ },
+ onZTreeContextmenu: function (event, node) {
+ var setting = data.getSetting(event.data.treeId);
+ if (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) {
+ tools.apply(setting.callback.onRightClick, [event, setting.treeId, node]);
+ }
+ return (typeof setting.callback.onRightClick) != "function";
+ },
+ onSelectStart: function (e) {
+ var n = e.originalEvent.srcElement.nodeName.toLowerCase();
+ return (n === "input" || n === "textarea");
+ }
+ },
+ //method of tools for zTree
+ tools = {
+ apply: function (fun, param, defaultValue) {
+ if ((typeof fun) == "function") {
+ return fun.apply(zt, param ? param : []);
+ }
+ return defaultValue;
+ },
+ canAsync: function (setting, node) {
+ var children = data.nodeChildren(setting, node);
+ var isParent = data.nodeIsParent(setting, node);
+ return (setting.async.enable && node && isParent && !(node.zAsync || (children && children.length > 0)));
+ },
+ clone: function (obj) {
+ if (obj === null) return null;
+ var o = tools.isArray(obj) ? [] : {};
+ for (var i in obj) {
+ o[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === "object" ? tools.clone(obj[i]) : obj[i]);
+ }
+ return o;
+ },
+ eqs: function (str1, str2) {
+ return str1.toLowerCase() === str2.toLowerCase();
+ },
+ isArray: function (arr) {
+ return Object.prototype.toString.apply(arr) === "[object Array]";
+ },
+ isElement: function (o) {
+ return (
+ typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2
+ o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string"
+ );
+ },
+ $: function (node, exp, setting) {
+ if (!!exp && typeof exp != "string") {
+ setting = exp;
+ exp = "";
+ }
+ if (typeof node == "string") {
+ return $(node, setting ? setting.treeObj.get(0).ownerDocument : null);
+ } else {
+ return $("#" + node.tId + exp, setting ? setting.treeObj : null);
+ }
+ },
+ getMDom: function (setting, curDom, targetExpr) {
+ if (!curDom) return null;
+ while (curDom && curDom.id !== setting.treeId) {
+ for (var i = 0, l = targetExpr.length; curDom.tagName && i < l; i++) {
+ if (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) {
+ return curDom;
+ }
+ }
+ curDom = curDom.parentNode;
+ }
+ return null;
+ },
+ getNodeMainDom: function (target) {
+ return ($(target).parent("li").get(0) || $(target).parentsUntil("li").parent().get(0));
+ },
+ isChildOrSelf: function (dom, parentId) {
+ return ($(dom).closest("#" + parentId).length > 0);
+ },
+ uCanDo: function (setting, e) {
+ return true;
+ }
+ },
+ //method of operate ztree dom
+ view = {
+ addNodes: function (setting, parentNode, index, newNodes, isSilent) {
+ var isParent = data.nodeIsParent(setting, parentNode);
+ if (setting.data.keep.leaf && parentNode && !isParent) {
+ return;
+ }
+ if (!tools.isArray(newNodes)) {
+ newNodes = [newNodes];
+ }
+ if (setting.data.simpleData.enable) {
+ newNodes = data.transformTozTreeFormat(setting, newNodes);
+ }
+ if (parentNode) {
+ var target_switchObj = $$(parentNode, consts.id.SWITCH, setting),
+ target_icoObj = $$(parentNode, consts.id.ICON, setting),
+ target_ulObj = $$(parentNode, consts.id.UL, setting);
+
+ if (!parentNode.open) {
+ view.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE);
+ view.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE);
+ parentNode.open = false;
+ target_ulObj.css({
+ "display": "none"
+ });
+ }
+
+ data.addNodesData(setting, parentNode, index, newNodes);
+ view.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index);
+ if (!isSilent) {
+ view.expandCollapseParentNode(setting, parentNode, true);
+ }
+ } else {
+ data.addNodesData(setting, data.getRoot(setting), index, newNodes);
+ view.createNodes(setting, 0, newNodes, null, index);
+ }
+ },
+ appendNodes: function (setting, level, nodes, parentNode, index, initFlag, openFlag) {
+ if (!nodes) return [];
+ var html = [];
+
+ var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting),
+ tmpPChild = data.nodeChildren(setting, tmpPNode),
+ isFirstNode, isLastNode;
+
+ if (!tmpPChild || index >= tmpPChild.length - nodes.length) {
+ index = -1;
+ }
+
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ if (initFlag) {
+ isFirstNode = ((index === 0 || tmpPChild.length == nodes.length) && (i == 0));
+ isLastNode = (index < 0 && i == (nodes.length - 1));
+ data.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag);
+ data.addNodeCache(setting, node);
+ }
+ var isParent = data.nodeIsParent(setting, node);
+
+ var childHtml = [];
+ var children = data.nodeChildren(setting, node);
+ if (children && children.length > 0) {
+ //make child html first, because checkType
+ childHtml = view.appendNodes(setting, level + 1, children, node, -1, initFlag, openFlag && node.open);
+ }
+ if (openFlag) {
+ view.makeDOMNodeMainBefore(html, setting, node);
+ view.makeDOMNodeLine(html, setting, node);
+ data.getBeforeA(setting, node, html);
+ view.makeDOMNodeNameBefore(html, setting, node);
+ data.getInnerBeforeA(setting, node, html);
+ view.makeDOMNodeIcon(html, setting, node);
+ data.getInnerAfterA(setting, node, html);
+ view.makeDOMNodeNameAfter(html, setting, node);
+ data.getAfterA(setting, node, html);
+ if (isParent && node.open) {
+ view.makeUlHtml(setting, node, html, childHtml.join(''));
+ }
+ view.makeDOMNodeMainAfter(html, setting, node);
+ data.addCreatedNode(setting, node);
+ }
+ }
+ return html;
+ },
+ appendParentULDom: function (setting, node) {
+ var html = [],
+ nObj = $$(node, setting);
+ if (!nObj.get(0) && !!node.parentTId) {
+ view.appendParentULDom(setting, node.getParentNode());
+ nObj = $$(node, setting);
+ }
+ var ulObj = $$(node, consts.id.UL, setting);
+ if (ulObj.get(0)) {
+ ulObj.remove();
+ }
+ var children = data.nodeChildren(setting, node),
+ childHtml = view.appendNodes(setting, node.level + 1, children, node, -1, false, true);
+ view.makeUlHtml(setting, node, html, childHtml.join(''));
+ nObj.append(html.join(''));
+ },
+ asyncNode: function (setting, node, isSilent, callback) {
+ var i, l;
+ var isParent = data.nodeIsParent(setting, node);
+ if (node && !isParent) {
+ tools.apply(callback);
+ return false;
+ } else if (node && node.isAjaxing) {
+ return false;
+ } else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) {
+ tools.apply(callback);
+ return false;
+ }
+ if (node) {
+ node.isAjaxing = true;
+ var icoObj = $$(node, consts.id.ICON, setting);
+ icoObj.attr({"style": "", "class": consts.className.BUTTON + " " + consts.className.ICO_LOADING});
+ }
+
+ var tmpParam = {};
+ var autoParam = tools.apply(setting.async.autoParam, [setting.treeId, node], setting.async.autoParam);
+ for (i = 0, l = autoParam.length; node && i < l; i++) {
+ var pKey = autoParam[i].split("="), spKey = pKey;
+ if (pKey.length > 1) {
+ spKey = pKey[1];
+ pKey = pKey[0];
+ }
+ tmpParam[spKey] = node[pKey];
+ }
+ var otherParam = tools.apply(setting.async.otherParam, [setting.treeId, node], setting.async.otherParam);
+ if (tools.isArray(otherParam)) {
+ for (i = 0, l = otherParam.length; i < l; i += 2) {
+ tmpParam[otherParam[i]] = otherParam[i + 1];
+ }
+ } else {
+ for (var p in otherParam) {
+ tmpParam[p] = otherParam[p];
+ }
+ }
+
+ var _tmpV = data.getRoot(setting)._ver;
+ $.ajax({
+ contentType: setting.async.contentType,
+ cache: false,
+ type: setting.async.type,
+ url: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url),
+ data: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam,
+ dataType: setting.async.dataType,
+ headers: setting.async.headers,
+ xhrFields: setting.async.xhrFields,
+ success: function (msg) {
+ if (_tmpV != data.getRoot(setting)._ver) {
+ return;
+ }
+ var newNodes = [];
+ try {
+ if (!msg || msg.length == 0) {
+ newNodes = [];
+ } else if (typeof msg == "string") {
+ newNodes = eval("(" + msg + ")");
+ } else {
+ newNodes = msg;
+ }
+ } catch (err) {
+ newNodes = msg;
+ }
+
+ if (node) {
+ node.isAjaxing = null;
+ node.zAsync = true;
+ }
+ view.setNodeLineIcos(setting, node);
+ if (newNodes && newNodes !== "") {
+ newNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes);
+ view.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent);
+ } else {
+ view.addNodes(setting, node, -1, [], !!isSilent);
+ }
+ setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]);
+ tools.apply(callback);
+ },
+ error: function (XMLHttpRequest, textStatus, errorThrown) {
+ if (_tmpV != data.getRoot(setting)._ver) {
+ return;
+ }
+ if (node) node.isAjaxing = null;
+ view.setNodeLineIcos(setting, node);
+ setting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]);
+ }
+ });
+ return true;
+ },
+ cancelPreSelectedNode: function (setting, node, excludeNode) {
+ var list = data.getRoot(setting).curSelectedList,
+ i, n;
+ for (i = list.length - 1; i >= 0; i--) {
+ n = list[i];
+ if (node === n || (!node && (!excludeNode || excludeNode !== n))) {
+ $$(n, consts.id.A, setting).removeClass(consts.node.CURSELECTED);
+ if (node) {
+ data.removeSelectedNode(setting, node);
+ break;
+ } else {
+ list.splice(i, 1);
+ setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]);
+ }
+ }
+ }
+ },
+ createNodeCallback: function (setting) {
+ if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {
+ var root = data.getRoot(setting);
+ while (root.createdNodes.length > 0) {
+ var node = root.createdNodes.shift();
+ tools.apply(setting.view.addDiyDom, [setting.treeId, node]);
+ if (!!setting.callback.onNodeCreated) {
+ setting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]);
+ }
+ }
+ }
+ },
+ createNodes: function (setting, level, nodes, parentNode, index) {
+ if (!nodes || nodes.length == 0) return;
+ var root = data.getRoot(setting),
+ openFlag = !parentNode || parentNode.open || !!$$(data.nodeChildren(setting, parentNode)[0], setting).get(0);
+ root.createdNodes = [];
+ var zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag),
+ parentObj, nextObj;
+
+ if (!parentNode) {
+ parentObj = setting.treeObj;
+ //setting.treeObj.append(zTreeHtml.join(''));
+ } else {
+ var ulObj = $$(parentNode, consts.id.UL, setting);
+ if (ulObj.get(0)) {
+ parentObj = ulObj;
+ //ulObj.append(zTreeHtml.join(''));
+ }
+ }
+ if (parentObj) {
+ if (index >= 0) {
+ nextObj = parentObj.children()[index];
+ }
+ if (index >= 0 && nextObj) {
+ $(nextObj).before(zTreeHtml.join(''));
+ } else {
+ parentObj.append(zTreeHtml.join(''));
+ }
+ }
+
+ view.createNodeCallback(setting);
+ },
+ destroy: function (setting) {
+ if (!setting) return;
+ data.initCache(setting);
+ data.initRoot(setting);
+ event.unbindTree(setting);
+ event.unbindEvent(setting);
+ setting.treeObj.empty();
+ delete settings[setting.treeId];
+ },
+ expandCollapseNode: function (setting, node, expandFlag, animateFlag, callback) {
+ var root = data.getRoot(setting);
+ var tmpCb, _callback;
+ if (!node) {
+ tools.apply(callback, []);
+ return;
+ }
+ var children = data.nodeChildren(setting, node);
+ var isParent = data.nodeIsParent(setting, node);
+ if (root.expandTriggerFlag) {
+ _callback = callback;
+ tmpCb = function () {
+ if (_callback) _callback();
+ if (node.open) {
+ setting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]);
+ } else {
+ setting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]);
+ }
+ };
+ callback = tmpCb;
+ root.expandTriggerFlag = false;
+ }
+ if (!node.open && isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (children && children.length > 0 && !$$(children[0], setting).get(0)))) {
+ view.appendParentULDom(setting, node);
+ view.createNodeCallback(setting);
+ }
+ if (node.open == expandFlag) {
+ tools.apply(callback, []);
+ return;
+ }
+ var ulObj = $$(node, consts.id.UL, setting),
+ switchObj = $$(node, consts.id.SWITCH, setting),
+ icoObj = $$(node, consts.id.ICON, setting);
+
+ if (isParent) {
+ node.open = !node.open;
+ if (node.iconOpen && node.iconClose) {
+ icoObj.attr("style", view.makeNodeIcoStyle(setting, node));
+ }
+
+ if (node.open) {
+ view.replaceSwitchClass(node, switchObj, consts.folder.OPEN);
+ view.replaceIcoClass(node, icoObj, consts.folder.OPEN);
+ if (animateFlag == false || setting.view.expandSpeed == "") {
+ ulObj.show();
+ tools.apply(callback, []);
+ } else {
+ if (children && children.length > 0) {
+ ulObj.slideDown(setting.view.expandSpeed, callback);
+ } else {
+ ulObj.show();
+ tools.apply(callback, []);
+ }
+ }
+ } else {
+ view.replaceSwitchClass(node, switchObj, consts.folder.CLOSE);
+ view.replaceIcoClass(node, icoObj, consts.folder.CLOSE);
+ if (animateFlag == false || setting.view.expandSpeed == "" || !(children && children.length > 0)) {
+ ulObj.hide();
+ tools.apply(callback, []);
+ } else {
+ ulObj.slideUp(setting.view.expandSpeed, callback);
+ }
+ }
+ } else {
+ tools.apply(callback, []);
+ }
+ },
+ expandCollapseParentNode: function (setting, node, expandFlag, animateFlag, callback) {
+ if (!node) return;
+ if (!node.parentTId) {
+ view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);
+ return;
+ } else {
+ view.expandCollapseNode(setting, node, expandFlag, animateFlag);
+ }
+ if (node.parentTId) {
+ view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback);
+ }
+ },
+ expandCollapseSonNode: function (setting, node, expandFlag, animateFlag, callback) {
+ var root = data.getRoot(setting),
+ treeNodes = (node) ? data.nodeChildren(setting, node) : data.nodeChildren(setting, root),
+ selfAnimateSign = (node) ? false : animateFlag,
+ expandTriggerFlag = data.getRoot(setting).expandTriggerFlag;
+ data.getRoot(setting).expandTriggerFlag = false;
+ if (treeNodes) {
+ for (var i = 0, l = treeNodes.length; i < l; i++) {
+ if (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign);
+ }
+ }
+ data.getRoot(setting).expandTriggerFlag = expandTriggerFlag;
+ view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);
+ },
+ isSelectedNode: function (setting, node) {
+ if (!node) {
+ return false;
+ }
+ var list = data.getRoot(setting).curSelectedList,
+ i;
+ for (i = list.length - 1; i >= 0; i--) {
+ if (node === list[i]) {
+ return true;
+ }
+ }
+ return false;
+ },
+ makeDOMNodeIcon: function (html, setting, node) {
+ var nameStr = data.nodeName(setting, node),
+ name = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
+ html.push("<span id='", node.tId, consts.id.ICON,
+ "' title='' treeNode", consts.id.ICON, " class='", view.makeNodeIcoClass(setting, node),
+ "' style='", view.makeNodeIcoStyle(setting, node), "'></span><span id='", node.tId, consts.id.SPAN,
+ "' class='", consts.className.NAME,
+ "'>", name, "</span>");
+ },
+ makeDOMNodeLine: function (html, setting, node) {
+ html.push("<span id='", node.tId, consts.id.SWITCH, "' title='' class='", view.makeNodeLineClass(setting, node), "' treeNode", consts.id.SWITCH, "></span>");
+ },
+ makeDOMNodeMainAfter: function (html, setting, node) {
+ html.push("</li>");
+ },
+ makeDOMNodeMainBefore: function (html, setting, node) {
+ html.push("<li id='", node.tId, "' class='", consts.className.LEVEL, node.level, "' tabindex='0' hidefocus='true' treenode>");
+ },
+ makeDOMNodeNameAfter: function (html, setting, node) {
+ html.push("</a>");
+ },
+ makeDOMNodeNameBefore: function (html, setting, node) {
+ var title = data.nodeTitle(setting, node),
+ url = view.makeNodeUrl(setting, node),
+ fontcss = view.makeNodeFontCss(setting, node),
+ nodeClasses = view.makeNodeClasses(setting, node),
+ fontStyle = [];
+ for (var f in fontcss) {
+ fontStyle.push(f, ":", fontcss[f], ";");
+ }
+ html.push("<a id='", node.tId, consts.id.A, "' class='", consts.className.LEVEL, node.level,
+ nodeClasses.add ? ' ' + nodeClasses.add.join(' ') : '',
+ "' treeNode", consts.id.A, " onclick=\"", (node.click || ''),
+ "\" ", ((url != null && url.length > 0) ? "href='" + url + "'" : ""), " target='", view.makeNodeTarget(node), "' style='", fontStyle.join(''),
+ "'");
+ if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) {
+ html.push("title='", title.replace(/'/g, "'").replace(/</g, '<').replace(/>/g, '>'), "'");
+ }
+ html.push(">");
+ },
+ makeNodeFontCss: function (setting, node) {
+ var fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss);
+ return (fontCss && ((typeof fontCss) != "function")) ? fontCss : {};
+ },
+ makeNodeClasses: function (setting, node) {
+ var classes = tools.apply(setting.view.nodeClasses, [setting.treeId, node], setting.view.nodeClasses);
+ return (classes && (typeof classes !== "function")) ? classes : {add:[], remove:[]};
+ },
+ makeNodeIcoClass: function (setting, node) {
+ var icoCss = ["ico"];
+ if (!node.isAjaxing) {
+ var isParent = data.nodeIsParent(setting, node);
+ icoCss[0] = (node.iconSkin ? node.iconSkin + "_" : "") + icoCss[0];
+ if (isParent) {
+ icoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);
+ } else {
+ icoCss.push(consts.folder.DOCU);
+ }
+ }
+ return consts.className.BUTTON + " " + icoCss.join('_');
+ },
+ makeNodeIcoStyle: function (setting, node) {
+ var icoStyle = [];
+ if (!node.isAjaxing) {
+ var isParent = data.nodeIsParent(setting, node);
+ var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon];
+ if (icon) icoStyle.push("background:url(", icon, ") 0 0 no-repeat;");
+ if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) {
+ icoStyle.push("display:none;");
+ }
+ }
+ return icoStyle.join('');
+ },
+ makeNodeLineClass: function (setting, node) {
+ var lineClass = [];
+ if (setting.view.showLine) {
+ if (node.level == 0 && node.isFirstNode && node.isLastNode) {
+ lineClass.push(consts.line.ROOT);
+ } else if (node.level == 0 && node.isFirstNode) {
+ lineClass.push(consts.line.ROOTS);
+ } else if (node.isLastNode) {
+ lineClass.push(consts.line.BOTTOM);
+ } else {
+ lineClass.push(consts.line.CENTER);
+ }
+ } else {
+ lineClass.push(consts.line.NOLINE);
+ }
+ if (data.nodeIsParent(setting, node)) {
+ lineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);
+ } else {
+ lineClass.push(consts.folder.DOCU);
+ }
+ return view.makeNodeLineClassEx(node) + lineClass.join('_');
+ },
+ makeNodeLineClassEx: function (node) {
+ return consts.className.BUTTON + " " + consts.className.LEVEL + node.level + " " + consts.className.SWITCH + " ";
+ },
+ makeNodeTarget: function (node) {
+ return (node.target || "_blank");
+ },
+ makeNodeUrl: function (setting, node) {
+ var urlKey = setting.data.key.url;
+ return node[urlKey] ? node[urlKey] : null;
+ },
+ makeUlHtml: function (setting, node, html, content) {
+ html.push("<ul id='", node.tId, consts.id.UL, "' class='", consts.className.LEVEL, node.level, " ", view.makeUlLineClass(setting, node), "' style='display:", (node.open ? "block" : "none"), "'>");
+ html.push(content);
+ html.push("</ul>");
+ },
+ makeUlLineClass: function (setting, node) {
+ return ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : "");
+ },
+ removeChildNodes: function (setting, node) {
+ if (!node) return;
+ var nodes = data.nodeChildren(setting, node);
+ if (!nodes) return;
+
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ data.removeNodeCache(setting, nodes[i]);
+ }
+ data.removeSelectedNode(setting);
+ delete node[setting.data.key.children];
+
+ if (!setting.data.keep.parent) {
+ data.nodeIsParent(setting, node, false);
+ node.open = false;
+ var tmp_switchObj = $$(node, consts.id.SWITCH, setting),
+ tmp_icoObj = $$(node, consts.id.ICON, setting);
+ view.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU);
+ view.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU);
+ $$(node, consts.id.UL, setting).remove();
+ } else {
+ $$(node, consts.id.UL, setting).empty();
+ }
+ },
+ scrollIntoView: function (setting, dom) {
+ if (!dom) {
+ return;
+ }
+ // support IE 7 / 8
+ if (typeof Element === 'undefined' || typeof HTMLElement === 'undefined') {
+ var contRect = setting.treeObj.get(0).getBoundingClientRect(),
+ findMeRect = dom.getBoundingClientRect();
+ if (findMeRect.top < contRect.top || findMeRect.bottom > contRect.bottom
+ || findMeRect.right > contRect.right || findMeRect.left < contRect.left) {
+ dom.scrollIntoView();
+ }
+ return;
+ }
+ // CC-BY jocki84@googlemail.com, https://gist.github.com/jocki84/6ffafd003387179a988e
+ if (!Element.prototype.scrollIntoViewIfNeeded) {
+ Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) {
+ "use strict";
+
+ function makeRange(start, length) {
+ return {"start": start, "length": length, "end": start + length};
+ }
+
+ function coverRange(inner, outer) {
+ if (
+ false === centerIfNeeded ||
+ (outer.start < inner.end && inner.start < outer.end)
+ ) {
+ return Math.max(
+ inner.end - outer.length,
+ Math.min(outer.start, inner.start)
+ );
+ }
+ return (inner.start + inner.end - outer.length) / 2;
+ }
+
+ function makePoint(x, y) {
+ return {
+ "x": x,
+ "y": y,
+ "translate": function translate(dX, dY) {
+ return makePoint(x + dX, y + dY);
+ }
+ };
+ }
+
+ function absolute(elem, pt) {
+ while (elem) {
+ pt = pt.translate(elem.offsetLeft, elem.offsetTop);
+ elem = elem.offsetParent;
+ }
+ return pt;
+ }
+
+ var target = absolute(this, makePoint(0, 0)),
+ extent = makePoint(this.offsetWidth, this.offsetHeight),
+ elem = this.parentNode,
+ origin;
+
+ while (elem instanceof HTMLElement) {
+ // Apply desired scroll amount.
+ origin = absolute(elem, makePoint(elem.clientLeft, elem.clientTop));
+ elem.scrollLeft = coverRange(
+ makeRange(target.x - origin.x, extent.x),
+ makeRange(elem.scrollLeft, elem.clientWidth)
+ );
+ elem.scrollTop = coverRange(
+ makeRange(target.y - origin.y, extent.y),
+ makeRange(elem.scrollTop, elem.clientHeight)
+ );
+
+ // Determine actual scroll amount by reading back scroll properties.
+ target = target.translate(-elem.scrollLeft, -elem.scrollTop);
+ elem = elem.parentNode;
+ }
+ };
+ }
+ dom.scrollIntoViewIfNeeded();
+ },
+ setFirstNode: function (setting, parentNode) {
+ var children = data.nodeChildren(setting, parentNode);
+ if (children.length > 0) {
+ children[0].isFirstNode = true;
+ }
+ },
+ setLastNode: function (setting, parentNode) {
+ var children = data.nodeChildren(setting, parentNode);
+ if (children.length > 0) {
+ children[children.length - 1].isLastNode = true;
+ }
+ },
+ removeNode: function (setting, node) {
+ var root = data.getRoot(setting),
+ parentNode = (node.parentTId) ? node.getParentNode() : root;
+
+ node.isFirstNode = false;
+ node.isLastNode = false;
+ node.getPreNode = function () {
+ return null;
+ };
+ node.getNextNode = function () {
+ return null;
+ };
+
+ if (!data.getNodeCache(setting, node.tId)) {
+ return;
+ }
+
+ $$(node, setting).remove();
+ data.removeNodeCache(setting, node);
+ data.removeSelectedNode(setting, node);
+
+ var children = data.nodeChildren(setting, parentNode);
+ for (var i = 0, l = children.length; i < l; i++) {
+ if (children[i].tId == node.tId) {
+ children.splice(i, 1);
+ break;
+ }
+ }
+ view.setFirstNode(setting, parentNode);
+ view.setLastNode(setting, parentNode);
+
+ var tmp_ulObj, tmp_switchObj, tmp_icoObj,
+ childLength = children.length;
+
+ //repair nodes old parent
+ if (!setting.data.keep.parent && childLength == 0) {
+ //old parentNode has no child nodes
+ data.nodeIsParent(setting, parentNode, false);
+ parentNode.open = false;
+ delete parentNode[setting.data.key.children];
+ tmp_ulObj = $$(parentNode, consts.id.UL, setting);
+ tmp_switchObj = $$(parentNode, consts.id.SWITCH, setting);
+ tmp_icoObj = $$(parentNode, consts.id.ICON, setting);
+ view.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU);
+ view.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU);
+ tmp_ulObj.css("display", "none");
+
+ } else if (setting.view.showLine && childLength > 0) {
+ //old parentNode has child nodes
+ var newLast = children[childLength - 1];
+ tmp_ulObj = $$(newLast, consts.id.UL, setting);
+ tmp_switchObj = $$(newLast, consts.id.SWITCH, setting);
+ tmp_icoObj = $$(newLast, consts.id.ICON, setting);
+ if (parentNode == root) {
+ if (children.length == 1) {
+ //node was root, and ztree has only one root after move node
+ view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT);
+ } else {
+ var tmp_first_switchObj = $$(children[0], consts.id.SWITCH, setting);
+ view.replaceSwitchClass(children[0], tmp_first_switchObj, consts.line.ROOTS);
+ view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);
+ }
+ } else {
+ view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);
+ }
+ tmp_ulObj.removeClass(consts.line.LINE);
+ }
+ },
+ replaceIcoClass: function (node, obj, newName) {
+ if (!obj || node.isAjaxing) return;
+ var tmpName = obj.attr("class");
+ if (tmpName == undefined) return;
+ var tmpList = tmpName.split("_");
+ switch (newName) {
+ case consts.folder.OPEN:
+ case consts.folder.CLOSE:
+ case consts.folder.DOCU:
+ tmpList[tmpList.length - 1] = newName;
+ break;
+ }
+ obj.attr("class", tmpList.join("_"));
+ },
+ replaceSwitchClass: function (node, obj, newName) {
+ if (!obj) return;
+ var tmpName = obj.attr("class");
+ if (tmpName == undefined) return;
+ var tmpList = tmpName.split("_");
+ switch (newName) {
+ case consts.line.ROOT:
+ case consts.line.ROOTS:
+ case consts.line.CENTER:
+ case consts.line.BOTTOM:
+ case consts.line.NOLINE:
+ tmpList[0] = view.makeNodeLineClassEx(node) + newName;
+ break;
+ case consts.folder.OPEN:
+ case consts.folder.CLOSE:
+ case consts.folder.DOCU:
+ tmpList[1] = newName;
+ break;
+ }
+ obj.attr("class", tmpList.join("_"));
+ if (newName !== consts.folder.DOCU) {
+ obj.removeAttr("disabled");
+ } else {
+ obj.attr("disabled", "disabled");
+ }
+ },
+ selectNode: function (setting, node, addFlag) {
+ if (!addFlag) {
+ view.cancelPreSelectedNode(setting, null, node);
+ }
+ $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED);
+ data.addSelectedNode(setting, node);
+ setting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]);
+ },
+ setNodeFontCss: function (setting, treeNode) {
+ var aObj = $$(treeNode, consts.id.A, setting),
+ fontCss = view.makeNodeFontCss(setting, treeNode);
+ if (fontCss) {
+ aObj.css(fontCss);
+ }
+ },
+ setNodeClasses: function (setting, treeNode) {
+ var aObj = $$(treeNode, consts.id.A, setting),
+ classes = view.makeNodeClasses(setting, treeNode);
+ if ('add' in classes && classes.add.length) {
+ aObj.addClass(classes.add.join(' '));
+ }
+ if ('remove' in classes && classes.remove.length) {
+ aObj.removeClass(classes.remove.join(' '));
+ }
+ },
+ setNodeLineIcos: function (setting, node) {
+ if (!node) return;
+ var switchObj = $$(node, consts.id.SWITCH, setting),
+ ulObj = $$(node, consts.id.UL, setting),
+ icoObj = $$(node, consts.id.ICON, setting),
+ ulLine = view.makeUlLineClass(setting, node);
+ if (ulLine.length == 0) {
+ ulObj.removeClass(consts.line.LINE);
+ } else {
+ ulObj.addClass(ulLine);
+ }
+ switchObj.attr("class", view.makeNodeLineClass(setting, node));
+ if (data.nodeIsParent(setting, node)) {
+ switchObj.removeAttr("disabled");
+ } else {
+ switchObj.attr("disabled", "disabled");
+ }
+ icoObj.removeAttr("style");
+ icoObj.attr("style", view.makeNodeIcoStyle(setting, node));
+ icoObj.attr("class", view.makeNodeIcoClass(setting, node));
+ },
+ setNodeName: function (setting, node) {
+ var title = data.nodeTitle(setting, node),
+ nObj = $$(node, consts.id.SPAN, setting);
+ nObj.empty();
+ if (setting.view.nameIsHTML) {
+ nObj.html(data.nodeName(setting, node));
+ } else {
+ nObj.text(data.nodeName(setting, node));
+ }
+ if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) {
+ var aObj = $$(node, consts.id.A, setting);
+ aObj.attr("title", !title ? "" : title);
+ }
+ },
+ setNodeTarget: function (setting, node) {
+ var aObj = $$(node, consts.id.A, setting);
+ aObj.attr("target", view.makeNodeTarget(node));
+ },
+ setNodeUrl: function (setting, node) {
+ var aObj = $$(node, consts.id.A, setting),
+ url = view.makeNodeUrl(setting, node);
+ if (url == null || url.length == 0) {
+ aObj.removeAttr("href");
+ } else {
+ aObj.attr("href", url);
+ }
+ },
+ switchNode: function (setting, node) {
+ if (node.open || !tools.canAsync(setting, node)) {
+ view.expandCollapseNode(setting, node, !node.open);
+ } else if (setting.async.enable) {
+ if (!view.asyncNode(setting, node)) {
+ view.expandCollapseNode(setting, node, !node.open);
+ return;
+ }
+ } else if (node) {
+ view.expandCollapseNode(setting, node, !node.open);
+ }
+ }
+ };
+ // zTree defind
+ $.fn.zTree = {
+ consts: _consts,
+ _z: {
+ tools: tools,
+ view: view,
+ event: event,
+ data: data
+ },
+ getZTreeObj: function (treeId) {
+ var o = data.getZTreeTools(treeId);
+ return o ? o : null;
+ },
+ destroy: function (treeId) {
+ if (!!treeId && treeId.length > 0) {
+ view.destroy(data.getSetting(treeId));
+ } else {
+ for (var s in settings) {
+ view.destroy(settings[s]);
+ }
+ }
+ },
+ init: function (obj, zSetting, zNodes) {
+ var setting = tools.clone(_setting);
+ $.extend(true, setting, zSetting);
+ setting.treeId = obj.attr("id");
+ setting.treeObj = obj;
+ setting.treeObj.empty();
+ settings[setting.treeId] = setting;
+ //For some older browser,(e.g., ie6)
+ if (typeof document.body.style.maxHeight === "undefined") {
+ setting.view.expandSpeed = "";
+ }
+ data.initRoot(setting);
+ var root = data.getRoot(setting);
+ zNodes = zNodes ? tools.clone(tools.isArray(zNodes) ? zNodes : [zNodes]) : [];
+ if (setting.data.simpleData.enable) {
+ data.nodeChildren(setting, root, data.transformTozTreeFormat(setting, zNodes));
+ } else {
+ data.nodeChildren(setting, root, zNodes);
+ }
+
+ data.initCache(setting);
+ event.unbindTree(setting);
+ event.bindTree(setting);
+ event.unbindEvent(setting);
+ event.bindEvent(setting);
+
+ var zTreeTools = {
+ setting: setting,
+ addNodes: function (parentNode, index, newNodes, isSilent) {
+ if (!parentNode) parentNode = null;
+ var isParent = data.nodeIsParent(setting, parentNode);
+ if (parentNode && !isParent && setting.data.keep.leaf) return null;
+
+ var i = parseInt(index, 10);
+ if (isNaN(i)) {
+ isSilent = !!newNodes;
+ newNodes = index;
+ index = -1;
+ } else {
+ index = i;
+ }
+ if (!newNodes) return null;
+
+
+ var xNewNodes = tools.clone(tools.isArray(newNodes) ? newNodes : [newNodes]);
+
+ function addCallback() {
+ view.addNodes(setting, parentNode, index, xNewNodes, (isSilent == true));
+ }
+
+ if (tools.canAsync(setting, parentNode)) {
+ view.asyncNode(setting, parentNode, isSilent, addCallback);
+ } else {
+ addCallback();
+ }
+ return xNewNodes;
+ },
+ cancelSelectedNode: function (node) {
+ view.cancelPreSelectedNode(setting, node);
+ },
+ destroy: function () {
+ view.destroy(setting);
+ },
+ expandAll: function (expandFlag) {
+ expandFlag = !!expandFlag;
+ view.expandCollapseSonNode(setting, null, expandFlag, true);
+ return expandFlag;
+ },
+ expandNode: function (node, expandFlag, sonSign, focus, callbackFlag) {
+ if (!node || !data.nodeIsParent(setting, node)) return null;
+ if (expandFlag !== true && expandFlag !== false) {
+ expandFlag = !node.open;
+ }
+ callbackFlag = !!callbackFlag;
+
+ if (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) {
+ return null;
+ } else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) {
+ return null;
+ }
+ if (expandFlag && node.parentTId) {
+ view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false);
+ }
+ if (expandFlag === node.open && !sonSign) {
+ return null;
+ }
+
+ data.getRoot(setting).expandTriggerFlag = callbackFlag;
+ if (!tools.canAsync(setting, node) && sonSign) {
+ view.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus);
+ } else {
+ node.open = !expandFlag;
+ view.switchNode(this.setting, node);
+ showNodeFocus();
+ }
+ return expandFlag;
+
+ function showNodeFocus() {
+ var a = $$(node, setting).get(0);
+ if (a && focus !== false) {
+ view.scrollIntoView(setting, a);
+ }
+ }
+ },
+ getNodes: function () {
+ return data.getNodes(setting);
+ },
+ getNodeByParam: function (key, value, parentNode) {
+ if (!key) return null;
+ return data.getNodeByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
+ },
+ getNodeByTId: function (tId) {
+ return data.getNodeCache(setting, tId);
+ },
+ getNodesByParam: function (key, value, parentNode) {
+ if (!key) return null;
+ return data.getNodesByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
+ },
+ getNodesByParamFuzzy: function (key, value, parentNode) {
+ if (!key) return null;
+ return data.getNodesByParamFuzzy(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
+ },
+ getNodesByFilter: function (filter, isSingle, parentNode, invokeParam) {
+ isSingle = !!isSingle;
+ if (!filter || (typeof filter != "function")) return (isSingle ? null : []);
+ return data.getNodesByFilter(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), filter, isSingle, invokeParam);
+ },
+ getNodeIndex: function (node) {
+ if (!node) return null;
+ var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);
+ var children = data.nodeChildren(setting, parentNode);
+ for (var i = 0, l = children.length; i < l; i++) {
+ if (children[i] == node) return i;
+ }
+ return -1;
+ },
+ getSelectedNodes: function () {
+ var r = [], list = data.getRoot(setting).curSelectedList;
+ for (var i = 0, l = list.length; i < l; i++) {
+ r.push(list[i]);
+ }
+ return r;
+ },
+ isSelectedNode: function (node) {
+ return data.isSelectedNode(setting, node);
+ },
+ reAsyncChildNodesPromise: function (parentNode, reloadType, isSilent) {
+ var promise = new Promise(function (resolve, reject) {
+ try {
+ zTreeTools.reAsyncChildNodes(parentNode, reloadType, isSilent, function () {
+ resolve(parentNode);
+ });
+ } catch (e) {
+ reject(e);
+ }
+ });
+ return promise;
+ },
+ reAsyncChildNodes: function (parentNode, reloadType, isSilent, callback) {
+ if (!this.setting.async.enable) return;
+ var isRoot = !parentNode;
+ if (isRoot) {
+ parentNode = data.getRoot(setting);
+ }
+ if (reloadType == "refresh") {
+ var children = data.nodeChildren(setting, parentNode);
+ for (var i = 0, l = children ? children.length : 0; i < l; i++) {
+ data.removeNodeCache(setting, children[i]);
+ }
+ data.removeSelectedNode(setting);
+ data.nodeChildren(setting, parentNode, []);
+ if (isRoot) {
+ this.setting.treeObj.empty();
+ } else {
+ var ulObj = $$(parentNode, consts.id.UL, setting);
+ ulObj.empty();
+ }
+ }
+ view.asyncNode(this.setting, isRoot ? null : parentNode, !!isSilent, callback);
+ },
+ refresh: function () {
+ this.setting.treeObj.empty();
+ var root = data.getRoot(setting),
+ nodes = data.nodeChildren(setting, root);
+ data.initRoot(setting);
+ data.nodeChildren(setting, root, nodes);
+ data.initCache(setting);
+ view.createNodes(setting, 0, data.nodeChildren(setting, root), null, -1);
+ },
+ removeChildNodes: function (node) {
+ if (!node) return null;
+ var nodes = data.nodeChildren(setting, node);
+ view.removeChildNodes(setting, node);
+ return nodes ? nodes : null;
+ },
+ removeNode: function (node, callbackFlag) {
+ if (!node) return;
+ callbackFlag = !!callbackFlag;
+ if (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return;
+ view.removeNode(setting, node);
+ if (callbackFlag) {
+ this.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
+ }
+ },
+ selectNode: function (node, addFlag, isSilent) {
+ if (!node) return;
+ if (tools.uCanDo(setting)) {
+ addFlag = setting.view.selectedMulti && addFlag;
+ if (node.parentTId) {
+ view.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus);
+ } else if (!isSilent) {
+ try {
+ $$(node, setting).focus().blur();
+ } catch (e) {
+ }
+ }
+ view.selectNode(setting, node, addFlag);
+ }
+
+ function showNodeFocus() {
+ if (isSilent) {
+ return;
+ }
+ var a = $$(node, setting).get(0);
+ view.scrollIntoView(setting, a);
+ }
+ },
+ transformTozTreeNodes: function (simpleNodes) {
+ return data.transformTozTreeFormat(setting, simpleNodes);
+ },
+ transformToArray: function (nodes) {
+ return data.transformToArrayFormat(setting, nodes);
+ },
+ updateNode: function (node, checkTypeFlag) {
+ if (!node) return;
+ var nObj = $$(node, setting);
+ if (nObj.get(0) && tools.uCanDo(setting)) {
+ view.setNodeName(setting, node);
+ view.setNodeTarget(setting, node);
+ view.setNodeUrl(setting, node);
+ view.setNodeLineIcos(setting, node);
+ view.setNodeFontCss(setting, node);
+ view.setNodeClasses(setting, node);
+ }
+ }
+ };
+ root.treeTools = zTreeTools;
+ data.setZTreeTools(setting, zTreeTools);
+ var children = data.nodeChildren(setting, root);
+ if (children && children.length > 0) {
+ view.createNodes(setting, 0, children, null, -1);
+ } else if (setting.async.enable && setting.async.url && setting.async.url !== '') {
+ view.asyncNode(setting);
+ }
+ return zTreeTools;
+ }
+ };
+
+ var zt = $.fn.zTree,
+ $$ = tools.$,
+ consts = zt.consts;
+})(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.core.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.excheck.min.js
===================================================================
--- base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.excheck.min.js (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.excheck.min.js (revision 10)
@@ -0,0 +1 @@
+!function(e){var t={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},c={check:{enable:!1,autoCheckTrigger:!1,chkStyle:t.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:t.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}},r={onCheckNode:function(e,t){if(!0===t.chkDisabled)return!1;var c=C.getSetting(e.data.treeId);if(0==o.apply(c.callback.beforeCheck,[c.treeId,t],!0))return!0;var h=C.nodeChecked(c,t);C.nodeChecked(c,t,!h),l.checkNodeRelation(c,t);var a=f(t,s.id.CHECK,c);return l.setChkClass(c,a,t),l.repairParentChkClassWithSelf(c,t),c.treeObj.trigger(s.event.CHECK,[e,c.treeId,t]),!0},onMouseoverCheck:function(e,t){if(!0===t.chkDisabled)return!1;var c=C.getSetting(e.data.treeId),h=f(t,s.id.CHECK,c);return t.check_Focus=!0,l.setChkClass(c,h,t),!0},onMouseoutCheck:function(e,t){if(!0===t.chkDisabled)return!1;var c=C.getSetting(e.data.treeId),h=f(t,s.id.CHECK,c);return t.check_Focus=!1,l.setChkClass(c,h,t),!0}},h={tools:{},view:{checkNodeRelation:function(e,t){var c,h,a,n=s.radio,i=C.nodeChecked(e,t);if(e.check.chkStyle==n.STYLE){var r=C.getRadioCheckedList(e);if(i)if(e.check.radioType==n.TYPE_ALL){for(h=r.length-1;0<=h;h--){c=r[h],C.nodeChecked(e,c)&&c!=t&&(C.nodeChecked(e,c,!1),r.splice(h,1),l.setChkClass(e,f(c,s.id.CHECK,e),c),c.parentTId!=t.parentTId&&l.repairParentChkClassWithSelf(e,c))}r.push(t)}else{var o=t.parentTId?t.getParentNode():C.getRoot(e);for(h=0,a=(d=C.nodeChildren(e,o)).length;h<a;h++){c=d[h],C.nodeChecked(e,c)&&c!=t&&(C.nodeChecked(e,c,!1),l.setChkClass(e,f(c,s.id.CHECK,e),c))}}else if(e.check.radioType==n.TYPE_ALL)for(h=0,a=r.length;h<a;h++)if(t==r[h]){r.splice(h,1);break}}else{var d=C.nodeChildren(e,t);i&&(!d||0==d.length||-1<e.check.chkboxType.Y.indexOf("s"))&&l.setSonNodeCheckBox(e,t,!0),i||d&&0!=d.length&&!(-1<e.check.chkboxType.N.indexOf("s"))||l.setSonNodeCheckBox(e,t,!1),i&&-1<e.check.chkboxType.Y.indexOf("p")&&l.setParentNodeCheckBox(e,t,!0),!i&&-1<e.check.chkboxType.N.indexOf("p")&&l.setParentNodeCheckBox(e,t,!1)}},makeChkClass:function(e,t){var c=s.checkbox,h=s.radio,a="",n=C.nodeChecked(e,t);a=!0===t.chkDisabled?c.DISABLED:t.halfCheck?c.PART:e.check.chkStyle==h.STYLE?t.check_Child_State<1?c.FULL:c.PART:n?2===t.check_Child_State||-1===t.check_Child_State?c.FULL:c.PART:t.check_Child_State<1?c.FULL:c.PART;var i=e.check.chkStyle+"_"+(n?c.TRUE:c.FALSE)+"_"+a;return i=t.check_Focus&&!0!==t.chkDisabled?i+"_"+c.FOCUS:i,s.className.BUTTON+" "+c.DEFAULT+" "+i},repairAllChk:function(e,t){if(e.check.enable&&e.check.chkStyle===s.checkbox.STYLE)for(var c=C.getRoot(e),h=C.nodeChildren(e,c),a=0,n=h.length;a<n;a++){var i=h[a];!0!==i.nocheck&&!0!==i.chkDisabled&&C.nodeChecked(e,i,t),l.setSonNodeCheckBox(e,i,t)}},repairChkClass:function(e,t){if(t&&(C.makeChkFlag(e,t),!0!==t.nocheck)){var c=f(t,s.id.CHECK,e);l.setChkClass(e,c,t)}},repairParentChkClass:function(e,t){if(t&&t.parentTId){var c=t.getParentNode();l.repairChkClass(e,c),l.repairParentChkClass(e,c)}},repairParentChkClassWithSelf:function(e,t){if(t){var c=C.nodeChildren(e,t);c&&0<c.length?l.repairParentChkClass(e,c[0]):l.repairParentChkClass(e,t)}},repairSonChkDisabled:function(e,t,c,h){if(t){t.chkDisabled!=c&&(t.chkDisabled=c),l.repairChkClass(e,t);var a=C.nodeChildren(e,t);if(a&&h)for(var n=0,i=a.length;n<i;n++){var r=a[n];l.repairSonChkDisabled(e,r,c,h)}}},repairParentChkDisabled:function(e,t,c,h){t&&(t.chkDisabled!=c&&h&&(t.chkDisabled=c),l.repairChkClass(e,t),l.repairParentChkDisabled(e,t.getParentNode(),c,h))},setChkClass:function(e,t,c){t&&(!0===c.nocheck?t.hide():t.show(),t.attr("class",l.makeChkClass(e,c)))},setParentNodeCheckBox:function(e,t,c,h){var a=f(t,s.id.CHECK,e);if(h=h||t,C.makeChkFlag(e,t),!0!==t.nocheck&&!0!==t.chkDisabled&&(C.nodeChecked(e,t,c),l.setChkClass(e,a,t),e.check.autoCheckTrigger&&t!=h&&e.treeObj.trigger(s.event.CHECK,[null,e.treeId,t])),t.parentTId){var n=!0;if(!c)for(var i=C.nodeChildren(e,t.getParentNode()),r=0,o=i.length;r<o;r++){var d=i[r],k=C.nodeChecked(e,d);if(!0!==d.nocheck&&!0!==d.chkDisabled&&k||(!0===d.nocheck||!0===d.chkDisabled)&&0<d.check_Child_State){n=!1;break}}n&&l.setParentNodeCheckBox(e,t.getParentNode(),c,h)}},setSonNodeCheckBox:function(e,t,c,h){if(t){var a=f(t,s.id.CHECK,e);h=h||t;var n=!1,i=C.nodeChildren(e,t);if(i)for(var r=0,o=i.length;r<o;r++){var d=i[r];l.setSonNodeCheckBox(e,d,c,h),!0===d.chkDisabled&&(n=!0)}t!=C.getRoot(e)&&!0!==t.chkDisabled&&(n&&!0!==t.nocheck&&C.makeChkFlag(e,t),!0!==t.nocheck&&!0!==t.chkDisabled?(C.nodeChecked(e,t,c),n||(t.check_Child_State=i&&0<i.length?c?2:0:-1)):t.check_Child_State=-1,l.setChkClass(e,a,t),e.check.autoCheckTrigger&&t!=h&&!0!==t.nocheck&&!0!==t.chkDisabled&&e.treeObj.trigger(s.event.CHECK,[null,e.treeId,t]))}}},event:{},data:{getRadioCheckedList:function(e){for(var t=C.getRoot(e).radioCheckedList,c=0,h=t.length;c<h;c++)C.getNodeCache(e,t[c].tId)||(t.splice(c,1),c--,h--);return t},getCheckStatus:function(e,t){if(!e.check.enable||t.nocheck||t.chkDisabled)return null;var c=C.nodeChecked(e,t);return{checked:c,half:t.halfCheck?t.halfCheck:e.check.chkStyle==s.radio.STYLE?2===t.check_Child_State:c?-1<t.check_Child_State&&t.check_Child_State<2:0<t.check_Child_State}},getTreeCheckedNodes:function(e,t,c,h){if(!t)return[];var a=c&&e.check.chkStyle==s.radio.STYLE&&e.check.radioType==s.radio.TYPE_ALL;h=h||[];for(var n=0,i=t.length;n<i;n++){var r=t[n],o=C.nodeChildren(e,r),d=C.nodeChecked(e,r);if(!0!==r.nocheck&&!0!==r.chkDisabled&&d==c&&(h.push(r),a))break;if(C.getTreeCheckedNodes(e,o,c,h),a&&0<h.length)break}return h},getTreeChangeCheckedNodes:function(e,t,c){if(!t)return[];c=c||[];for(var h=0,a=t.length;h<a;h++){var n=t[h],i=C.nodeChildren(e,n),r=C.nodeChecked(e,n);!0!==n.nocheck&&!0!==n.chkDisabled&&r!=n.checkedOld&&c.push(n),C.getTreeChangeCheckedNodes(e,i,c)}return c},makeChkFlag:function(e,t){if(t){var c=-1,h=C.nodeChildren(e,t);if(h)for(var a=0,n=h.length;a<n;a++){var i=h[a],r=C.nodeChecked(e,i),o=-1;if(e.check.chkStyle==s.radio.STYLE){if(2==(o=!0===i.nocheck||!0===i.chkDisabled?i.check_Child_State:!0===i.halfCheck||r||0<i.check_Child_State?2:0)){c=2;break}0==o&&(c=0)}else if(e.check.chkStyle==s.checkbox.STYLE){if(1===(o=!0===i.nocheck||!0===i.chkDisabled?i.check_Child_State:!0===i.halfCheck?1:r?-1===i.check_Child_State||2===i.check_Child_State?2:1:0<i.check_Child_State?1:0)){c=1;break}if(2===o&&-1<c&&0<a&&o!==c){c=1;break}if(2===c&&-1<o&&o<2){c=1;break}-1<o&&(c=o)}}t.check_Child_State=c}}}};e.extend(!0,e.fn.zTree.consts,t),e.extend(!0,e.fn.zTree._z,h);var a=e.fn.zTree,o=a._z.tools,s=a.consts,l=a._z.view,C=a._z.data,f=(a._z.event,o.$);C.nodeChecked=function(e,t,c){if(!t)return!1;var h=e.data.key.checked;return void 0!==c?("string"==typeof c&&(c=o.eqs(c,"true")),c=!!c,t[h]=c):"string"==typeof t[h]?t[h]=o.eqs(t[h],"true"):t[h]=!!t[h],t[h]},C.exSetting(c),C.addInitBind(function(a){var e=a.treeObj,t=s.event;e.bind(t.CHECK,function(e,t,c,h){e.srcEvent=t,o.apply(a.callback.onCheck,[e,c,h])})}),C.addInitUnBind(function(e){var t=e.treeObj,c=s.event;t.unbind(c.CHECK)}),C.addInitCache(function(e){}),C.addInitNode(function(e,t,c,h,a,n,i){if(c){var r=C.nodeChecked(e,c);if(c.checkedOld=r,"string"==typeof c.nocheck&&(c.nocheck=o.eqs(c.nocheck,"true")),c.nocheck=!!c.nocheck||e.check.nocheckInherit&&h&&!!h.nocheck,"string"==typeof c.chkDisabled&&(c.chkDisabled=o.eqs(c.chkDisabled,"true")),c.chkDisabled=!!c.chkDisabled||e.check.chkDisabledInherit&&h&&!!h.chkDisabled,"string"==typeof c.halfCheck&&(c.halfCheck=o.eqs(c.halfCheck,"true")),c.halfCheck=!!c.halfCheck,c.check_Child_State=-1,c.check_Focus=!1,c.getCheckStatus=function(){return C.getCheckStatus(e,c)},e.check.chkStyle==s.radio.STYLE&&e.check.radioType==s.radio.TYPE_ALL&&r)C.getRoot(e).radioCheckedList.push(c)}}),C.addInitProxy(function(e){var t=e.target,c=C.getSetting(e.data.treeId),h="",a=null,n="",i=null;if(o.eqs(e.type,"mouseover")?c.check.enable&&o.eqs(t.tagName,"span")&&null!==t.getAttribute("treeNode"+s.id.CHECK)&&(h=o.getNodeMainDom(t).id,n="mouseoverCheck"):o.eqs(e.type,"mouseout")?c.check.enable&&o.eqs(t.tagName,"span")&&null!==t.getAttribute("treeNode"+s.id.CHECK)&&(h=o.getNodeMainDom(t).id,n="mouseoutCheck"):o.eqs(e.type,"click")&&c.check.enable&&o.eqs(t.tagName,"span")&&null!==t.getAttribute("treeNode"+s.id.CHECK)&&(h=o.getNodeMainDom(t).id,n="checkNode"),0<h.length)switch(a=C.getNodeCache(c,h),n){case"checkNode":i=r.onCheckNode;break;case"mouseoverCheck":i=r.onMouseoverCheck;break;case"mouseoutCheck":i=r.onMouseoutCheck}return{stop:"checkNode"===n,node:a,nodeEventType:n,nodeEventCallback:i,treeEventType:"",treeEventCallback:null}},!0),C.addInitRoot(function(e){C.getRoot(e).radioCheckedList=[]}),C.addBeforeA(function(e,t,c){e.check.enable&&(C.makeChkFlag(e,t),c.push("<span ID='",t.tId,s.id.CHECK,"' class='",l.makeChkClass(e,t),"' treeNode",s.id.CHECK,!0===t.nocheck?" style='display:none;'":"","></span>"))}),C.addZTreeTools(function(i,h){h.checkNode=function(e,t,c,h){var a=C.nodeChecked(i,e);if(!0!==e.chkDisabled&&(!0!==t&&!1!==t&&(t=!a),h=!!h,(a!==t||c)&&(!h||0!=o.apply(this.setting.callback.beforeCheck,[this.setting.treeId,e],!0))&&o.uCanDo(this.setting)&&this.setting.check.enable&&!0!==e.nocheck)){C.nodeChecked(i,e,t);var n=f(e,s.id.CHECK,this.setting);!c&&this.setting.check.chkStyle!==s.radio.STYLE||l.checkNodeRelation(this.setting,e),l.setChkClass(this.setting,n,e),l.repairParentChkClassWithSelf(this.setting,e),h&&this.setting.treeObj.trigger(s.event.CHECK,[null,this.setting.treeId,e])}},h.checkAllNodes=function(e){l.repairAllChk(this.setting,!!e)},h.getCheckedNodes=function(e){e=!1!==e;var t=C.nodeChildren(i,C.getRoot(this.setting));return C.getTreeCheckedNodes(this.setting,t,e)},h.getChangeCheckedNodes=function(){var e=C.nodeChildren(i,C.getRoot(this.setting));return C.getTreeChangeCheckedNodes(this.setting,e)},h.setChkDisabled=function(e,t,c,h){t=!!t,c=!!c,h=!!h,l.repairSonChkDisabled(this.setting,e,t,h),l.repairParentChkDisabled(this.setting,e.getParentNode(),t,c)};var a=h.updateNode;h.updateNode=function(e,t){if((a&&a.apply(h,arguments),e&&this.setting.check.enable)&&(f(e,this.setting).get(0)&&o.uCanDo(this.setting))){var c=f(e,s.id.CHECK,this.setting);1!=t&&this.setting.check.chkStyle!==s.radio.STYLE||l.checkNodeRelation(this.setting,e),l.setChkClass(this.setting,c,e),l.repairParentChkClassWithSelf(this.setting,e)}}});var n=l.createNodes;l.createNodes=function(e,t,c,h,a){n&&n.apply(l,arguments),c&&l.repairParentChkClassWithSelf(e,h)};var i=l.removeNode;l.removeNode=function(e,t){var c=t.getParentNode();i&&i.apply(l,arguments),t&&c&&(l.repairChkClass(e,c),l.repairParentChkClass(e,c))};var d=l.appendNodes;l.appendNodes=function(e,t,c,h,a,n,i){var r="";return d&&(r=d.apply(l,arguments)),h&&C.makeChkFlag(e,h),r}}(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.excheck.min.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exedit.js
===================================================================
--- base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exedit.js (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exedit.js (revision 10)
@@ -0,0 +1,1204 @@
+/*
+ * JQuery zTree exedit
+ * v3.5.43
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: 2020-04-04
+ */
+
+(function ($) {
+ //default consts of exedit
+ var _consts = {
+ event: {
+ DRAG: "ztree_drag",
+ DROP: "ztree_drop",
+ RENAME: "ztree_rename",
+ DRAGMOVE: "ztree_dragmove"
+ },
+ id: {
+ EDIT: "_edit",
+ INPUT: "_input",
+ REMOVE: "_remove"
+ },
+ move: {
+ TYPE_INNER: "inner",
+ TYPE_PREV: "prev",
+ TYPE_NEXT: "next"
+ },
+ node: {
+ CURSELECTED_EDIT: "curSelectedNode_Edit",
+ TMPTARGET_TREE: "tmpTargetzTree",
+ TMPTARGET_NODE: "tmpTargetNode"
+ }
+ },
+ //default setting of exedit
+ _setting = {
+ edit: {
+ enable: false,
+ editNameSelectAll: false,
+ showRemoveBtn: true,
+ showRenameBtn: true,
+ removeTitle: "remove",
+ renameTitle: "rename",
+ drag: {
+ autoExpandTrigger: false,
+ isCopy: true,
+ isMove: true,
+ prev: true,
+ next: true,
+ inner: true,
+ minMoveSize: 5,
+ borderMax: 10,
+ borderMin: -5,
+ maxShowNodeNum: 5,
+ autoOpenTime: 500
+ }
+ },
+ view: {
+ addHoverDom: null,
+ removeHoverDom: null
+ },
+ callback: {
+ beforeDrag: null,
+ beforeDragOpen: null,
+ beforeDrop: null,
+ beforeEditName: null,
+ beforeRename: null,
+ onDrag: null,
+ onDragMove: null,
+ onDrop: null,
+ onRename: null
+ }
+ },
+ //default root of exedit
+ _initRoot = function (setting) {
+ var r = data.getRoot(setting), rs = data.getRoots();
+ r.curEditNode = null;
+ r.curEditInput = null;
+ r.curHoverNode = null;
+ r.dragFlag = 0;
+ r.dragNodeShowBefore = [];
+ r.dragMaskList = new Array();
+ rs.showHoverDom = true;
+ },
+ //default cache of exedit
+ _initCache = function (treeId) {
+ },
+ //default bind event of exedit
+ _bindEvent = function (setting) {
+ var o = setting.treeObj;
+ var c = consts.event;
+ o.bind(c.RENAME, function (event, treeId, treeNode, isCancel) {
+ tools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]);
+ });
+
+ o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {
+ tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);
+ });
+
+ o.bind(c.DRAGMOVE, function (event, srcEvent, treeId, treeNodes) {
+ tools.apply(setting.callback.onDragMove, [srcEvent, treeId, treeNodes]);
+ });
+
+ o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {
+ tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);
+ });
+ },
+ _unbindEvent = function (setting) {
+ var o = setting.treeObj;
+ var c = consts.event;
+ o.unbind(c.RENAME);
+ o.unbind(c.DRAG);
+ o.unbind(c.DRAGMOVE);
+ o.unbind(c.DROP);
+ },
+ //default event proxy of exedit
+ _eventProxy = function (e) {
+ var target = e.target,
+ setting = data.getSetting(e.data.treeId),
+ relatedTarget = e.relatedTarget,
+ tId = "", node = null,
+ nodeEventType = "", treeEventType = "",
+ nodeEventCallback = null, treeEventCallback = null,
+ tmp = null;
+
+ if (tools.eqs(e.type, "mouseover")) {
+ tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (tmp) {
+ tId = tools.getNodeMainDom(tmp).id;
+ nodeEventType = "hoverOverNode";
+ }
+ } else if (tools.eqs(e.type, "mouseout")) {
+ tmp = tools.getMDom(setting, relatedTarget, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (!tmp) {
+ tId = "remove";
+ nodeEventType = "hoverOutNode";
+ }
+ } else if (tools.eqs(e.type, "mousedown")) {
+ tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (tmp) {
+ tId = tools.getNodeMainDom(tmp).id;
+ nodeEventType = "mousedownNode";
+ }
+ }
+ if (tId.length > 0) {
+ node = data.getNodeCache(setting, tId);
+ switch (nodeEventType) {
+ case "mousedownNode" :
+ nodeEventCallback = _handler.onMousedownNode;
+ break;
+ case "hoverOverNode" :
+ nodeEventCallback = _handler.onHoverOverNode;
+ break;
+ case "hoverOutNode" :
+ nodeEventCallback = _handler.onHoverOutNode;
+ break;
+ }
+ }
+ var proxyResult = {
+ stop: false,
+ node: node,
+ nodeEventType: nodeEventType,
+ nodeEventCallback: nodeEventCallback,
+ treeEventType: treeEventType,
+ treeEventCallback: treeEventCallback
+ };
+ return proxyResult
+ },
+ //default init node of exedit
+ _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
+ if (!n) return;
+ n.isHover = false;
+ n.editNameFlag = false;
+ },
+ //update zTreeObj, add method of edit
+ _zTreeTools = function (setting, zTreeTools) {
+ zTreeTools.cancelEditName = function (newName) {
+ var root = data.getRoot(this.setting);
+ if (!root.curEditNode) return;
+ view.cancelCurEditNode(this.setting, newName ? newName : null, true);
+ }
+ zTreeTools.copyNode = function (targetNode, node, moveType, isSilent) {
+ if (!node) return null;
+ var isParent = data.nodeIsParent(setting, targetNode);
+ if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;
+ var _this = this,
+ newNode = tools.clone(node);
+ if (!targetNode) {
+ targetNode = null;
+ moveType = consts.move.TYPE_INNER;
+ }
+ if (moveType == consts.move.TYPE_INNER) {
+ function copyCallback() {
+ view.addNodes(_this.setting, targetNode, -1, [newNode], isSilent);
+ }
+
+ if (tools.canAsync(this.setting, targetNode)) {
+ view.asyncNode(this.setting, targetNode, isSilent, copyCallback);
+ } else {
+ copyCallback();
+ }
+ } else {
+ view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent);
+ view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent);
+ }
+ return newNode;
+ }
+ zTreeTools.editName = function (node) {
+ if (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return;
+ if (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true);
+ view.editNode(this.setting, node)
+ }
+ zTreeTools.moveNode = function (targetNode, node, moveType, isSilent) {
+ if (!node) return node;
+ var isParent = data.nodeIsParent(setting, targetNode);
+ if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {
+ return null;
+ } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find("#" + targetNode.tId).length > 0)) {
+ return null;
+ } else if (!targetNode) {
+ targetNode = null;
+ }
+ var _this = this;
+
+ function moveCallback() {
+ view.moveNode(_this.setting, targetNode, node, moveType, false, isSilent);
+ }
+
+ if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) {
+ view.asyncNode(this.setting, targetNode, isSilent, moveCallback);
+ } else {
+ moveCallback();
+ }
+ return node;
+ }
+ zTreeTools.setEditable = function (editable) {
+ this.setting.edit.enable = editable;
+ return this.refresh();
+ }
+ },
+ //method of operate data
+ _data = {
+ setSonNodeLevel: function (setting, parentNode, node) {
+ if (!node) return;
+ var children = data.nodeChildren(setting, node);
+ node.level = (parentNode) ? parentNode.level + 1 : 0;
+ if (!children) return;
+ for (var i = 0, l = children.length; i < l; i++) {
+ if (children[i]) data.setSonNodeLevel(setting, node, children[i]);
+ }
+ }
+ },
+ //method of event proxy
+ _event = {},
+ //method of event handler
+ _handler = {
+ onHoverOverNode: function (event, node) {
+ var setting = data.getSetting(event.data.treeId),
+ root = data.getRoot(setting);
+ if (root.curHoverNode != node) {
+ _handler.onHoverOutNode(event);
+ }
+ root.curHoverNode = node;
+ view.addHoverDom(setting, node);
+ },
+ onHoverOutNode: function (event, node) {
+ var setting = data.getSetting(event.data.treeId),
+ root = data.getRoot(setting);
+ if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {
+ view.removeTreeDom(setting, root.curHoverNode);
+ root.curHoverNode = null;
+ }
+ },
+ onMousedownNode: function (eventMouseDown, _node) {
+ var i, l,
+ setting = data.getSetting(eventMouseDown.data.treeId),
+ root = data.getRoot(setting), roots = data.getRoots();
+ //right click can't drag & drop
+ if (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true;
+
+ //input of edit node name can't drag & drop
+ var target = eventMouseDown.target,
+ _nodes = data.getRoot(setting).curSelectedList,
+ nodes = [];
+ if (!data.isSelectedNode(setting, _node)) {
+ nodes = [_node];
+ } else {
+ for (i = 0, l = _nodes.length; i < l; i++) {
+ if (_nodes[i].editNameFlag && tools.eqs(target.tagName, "input") && target.getAttribute("treeNode" + consts.id.INPUT) !== null) {
+ return true;
+ }
+ nodes.push(_nodes[i]);
+ if (nodes[0].parentTId !== _nodes[i].parentTId) {
+ nodes = [_node];
+ break;
+ }
+ }
+ }
+
+ view.editNodeBlur = true;
+ view.cancelCurEditNode(setting);
+
+ var doc = $(setting.treeObj.get(0).ownerDocument),
+ body = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget,
+ isOtherTree = false,
+ targetSetting = setting,
+ sourceSetting = setting,
+ preNode, nextNode,
+ preTmpTargetNodeId = null,
+ preTmpMoveType = null,
+ tmpTargetNodeId = null,
+ moveType = consts.move.TYPE_INNER,
+ mouseDownX = eventMouseDown.clientX,
+ mouseDownY = eventMouseDown.clientY,
+ startTime = (new Date()).getTime();
+
+ if (tools.uCanDo(setting)) {
+ doc.bind("mousemove", _docMouseMove);
+ }
+
+ function _docMouseMove(event) {
+ //avoid start drag after click node
+ if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize
+ && Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) {
+ return true;
+ }
+ var i, l, tmpNode, tmpDom, tmpNodes;
+ body.css("cursor", "pointer");
+
+ if (root.dragFlag == 0) {
+ if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {
+ _docMouseUp(event);
+ return true;
+ }
+
+ for (i = 0, l = nodes.length; i < l; i++) {
+ if (i == 0) {
+ root.dragNodeShowBefore = [];
+ }
+ tmpNode = nodes[i];
+ if (data.nodeIsParent(setting, tmpNode) && tmpNode.open) {
+ view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
+ root.dragNodeShowBefore[tmpNode.tId] = true;
+ } else {
+ root.dragNodeShowBefore[tmpNode.tId] = false;
+ }
+ }
+
+ root.dragFlag = 1;
+ roots.showHoverDom = false;
+ tools.showIfameMask(setting, true);
+
+ //sort
+ var isOrder = true, lastIndex = -1;
+ if (nodes.length > 1) {
+ var pNodes = nodes[0].parentTId ? data.nodeChildren(setting, nodes[0].getParentNode()) : data.getNodes(setting);
+ tmpNodes = [];
+ for (i = 0, l = pNodes.length; i < l; i++) {
+ if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {
+ if (isOrder && lastIndex > -1 && (lastIndex + 1) !== i) {
+ isOrder = false;
+ }
+ tmpNodes.push(pNodes[i]);
+ lastIndex = i;
+ }
+ if (nodes.length === tmpNodes.length) {
+ nodes = tmpNodes;
+ break;
+ }
+ }
+ }
+ if (isOrder) {
+ preNode = nodes[0].getPreNode();
+ nextNode = nodes[nodes.length - 1].getNextNode();
+ }
+
+ //set node in selected
+ curNode = $$("<ul class='zTreeDragUL'></ul>", setting);
+ for (i = 0, l = nodes.length; i < l; i++) {
+ tmpNode = nodes[i];
+ tmpNode.editNameFlag = false;
+ view.selectNode(setting, tmpNode, i > 0);
+ view.removeTreeDom(setting, tmpNode);
+
+ if (i > setting.edit.drag.maxShowNodeNum - 1) {
+ continue;
+ }
+
+ tmpDom = $$("<li id='" + tmpNode.tId + "_tmp'></li>", setting);
+ tmpDom.append($$(tmpNode, consts.id.A, setting).clone());
+ tmpDom.css("padding", "0");
+ tmpDom.children("#" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);
+ curNode.append(tmpDom);
+ if (i == setting.edit.drag.maxShowNodeNum - 1) {
+ tmpDom = $$("<li id='" + tmpNode.tId + "_moretmp'><a> ... </a></li>", setting);
+ curNode.append(tmpDom);
+ }
+ }
+ curNode.attr("id", nodes[0].tId + consts.id.UL + "_tmp");
+ curNode.addClass(setting.treeObj.attr("class"));
+ curNode.appendTo(body);
+
+ tmpArrow = $$("<span class='tmpzTreeMove_arrow'></span>", setting);
+ tmpArrow.attr("id", "zTreeMove_arrow_tmp");
+ tmpArrow.appendTo(body);
+
+ setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);
+ }
+
+ if (root.dragFlag == 1) {
+ if (tmpTarget && tmpArrow.attr("id") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft() + 2) > ($("#" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {
+ var xT = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget);
+ event.target = (xT.length > 0) ? xT.get(0) : event.target;
+ } else if (tmpTarget) {
+ tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
+ if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
+ .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
+ }
+ tmpTarget = null;
+ tmpTargetNodeId = null;
+
+ //judge drag & drop in multi ztree
+ isOtherTree = false;
+ targetSetting = setting;
+ var settings = data.getSettings();
+ for (var s in settings) {
+ if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId
+ && (event.target.id == settings[s].treeId || $(event.target).parents("#" + settings[s].treeId).length > 0)) {
+ isOtherTree = true;
+ targetSetting = settings[s];
+ }
+ }
+
+ var docScrollTop = doc.scrollTop(),
+ docScrollLeft = doc.scrollLeft(),
+ treeOffset = targetSetting.treeObj.offset(),
+ scrollHeight = targetSetting.treeObj.get(0).scrollHeight,
+ scrollWidth = targetSetting.treeObj.get(0).scrollWidth,
+ dTop = (event.clientY + docScrollTop - treeOffset.top),
+ dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),
+ dLeft = (event.clientX + docScrollLeft - treeOffset.left),
+ dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),
+ isTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin),
+ isBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin),
+ isLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin),
+ isRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin),
+ isTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin,
+ isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),
+ isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height() + 10) >= scrollHeight),
+ isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),
+ isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width() + 10) >= scrollWidth);
+
+ if (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) {
+ //get node <li> dom
+ var targetObj = event.target;
+ while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, "li") && targetObj.id != targetSetting.treeId) {
+ targetObj = targetObj.parentNode;
+ }
+
+ var canMove = true;
+ //don't move to self or children of self
+ for (i = 0, l = nodes.length; i < l; i++) {
+ tmpNode = nodes[i];
+ if (targetObj.id === tmpNode.tId) {
+ canMove = false;
+ break;
+ } else if ($$(tmpNode, setting).find("#" + targetObj.id).length > 0) {
+ canMove = false;
+ break;
+ }
+ }
+ if (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) {
+ tmpTarget = $(targetObj);
+ tmpTargetNodeId = targetObj.id;
+ }
+ }
+
+ //the mouse must be in zTree
+ tmpNode = nodes[0];
+ if (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) {
+ //judge mouse move in root of ztree
+ if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {
+ tmpTarget = targetSetting.treeObj;
+ }
+ //auto scroll top
+ if (isTop) {
+ targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() - 10);
+ } else if (isBottom) {
+ targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() + 10);
+ }
+ if (isLeft) {
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() - 10);
+ } else if (isRight) {
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + 10);
+ }
+ //auto scroll left
+ if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + tmpTarget.offset().left - targetSetting.treeObj.offset().left);
+ }
+ }
+
+ curNode.css({
+ "top": (event.clientY + docScrollTop + 3) + "px",
+ "left": (event.clientX + docScrollLeft + 3) + "px"
+ });
+
+ var dX = 0;
+ var dY = 0;
+ if (tmpTarget && tmpTarget.attr("id") != targetSetting.treeId) {
+ var tmpTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId),
+ isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy),
+ isPrev = !!(preNode && tmpTargetNodeId === preNode.tId),
+ isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),
+ isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),
+ canPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev),
+ canNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next),
+ canInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !data.nodeIsParent(setting, tmpTargetNode)) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner);
+
+ function clearMove() {
+ tmpTarget = null;
+ tmpTargetNodeId = "";
+ moveType = consts.move.TYPE_INNER;
+ tmpArrow.css({
+ "display": "none"
+ });
+ if (window.zTreeMoveTimer) {
+ clearTimeout(window.zTreeMoveTimer);
+ window.zTreeMoveTargetNodeTId = null
+ }
+ }
+
+ if (!canPrev && !canNext && !canInner) {
+ clearMove();
+ } else {
+ var tmpTargetA = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget),
+ tmpNextA = tmpTargetNode.isLastNode ? null : $("#" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),
+ tmpTop = tmpTargetA.offset().top,
+ tmpLeft = tmpTargetA.offset().left,
+ prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1)) : -1,
+ nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0)) : -1,
+ dY_percent = (event.clientY + docScrollTop - tmpTop) / tmpTargetA.height();
+
+ if ((prevPercent == 1 || dY_percent <= prevPercent && dY_percent >= -.2) && canPrev) {
+ dX = 1 - tmpArrow.width();
+ dY = tmpTop - tmpArrow.height() / 2;
+ moveType = consts.move.TYPE_PREV;
+ } else if ((nextPercent == 0 || dY_percent >= nextPercent && dY_percent <= 1.2) && canNext) {
+ dX = 1 - tmpArrow.width();
+ dY = (tmpNextA == null || (data.nodeIsParent(setting, tmpTargetNode) && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height() / 2) : (tmpNextA.offset().top - tmpArrow.height() / 2);
+ moveType = consts.move.TYPE_NEXT;
+ } else if (canInner) {
+ dX = 5 - tmpArrow.width();
+ dY = tmpTop;
+ moveType = consts.move.TYPE_INNER;
+ } else {
+ clearMove();
+ }
+
+ if (tmpTarget) {
+ tmpArrow.css({
+ "display": "block",
+ "top": dY + "px",
+ "left": (tmpLeft + dX) + "px"
+ });
+ tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType);
+
+ if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {
+ startTime = (new Date()).getTime();
+ }
+ if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && moveType == consts.move.TYPE_INNER) {
+ var startTimer = true;
+ if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {
+ clearTimeout(window.zTreeMoveTimer);
+ window.zTreeMoveTargetNodeTId = null;
+ } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {
+ startTimer = false;
+ }
+ if (startTimer) {
+ window.zTreeMoveTimer = setTimeout(function () {
+ if (moveType != consts.move.TYPE_INNER) return;
+ if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime
+ && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {
+ view.switchNode(targetSetting, tmpTargetNode);
+ if (targetSetting.edit.drag.autoExpandTrigger) {
+ targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);
+ }
+ }
+ }, targetSetting.edit.drag.autoOpenTime + 50);
+ window.zTreeMoveTargetNodeTId = tmpTargetNode.tId;
+ }
+ }
+ }
+ }
+ } else {
+ moveType = consts.move.TYPE_INNER;
+ if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) {
+ tmpTarget.addClass(consts.node.TMPTARGET_TREE);
+ } else {
+ tmpTarget = null;
+ }
+ tmpArrow.css({
+ "display": "none"
+ });
+ if (window.zTreeMoveTimer) {
+ clearTimeout(window.zTreeMoveTimer);
+ window.zTreeMoveTargetNodeTId = null;
+ }
+ }
+ preTmpTargetNodeId = tmpTargetNodeId;
+ preTmpMoveType = moveType;
+
+ setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]);
+ }
+ return false;
+ }
+
+ doc.bind("mouseup", _docMouseUp);
+
+ function _docMouseUp(event) {
+ if (window.zTreeMoveTimer) {
+ clearTimeout(window.zTreeMoveTimer);
+ window.zTreeMoveTargetNodeTId = null;
+ }
+ preTmpTargetNodeId = null;
+ preTmpMoveType = null;
+ doc.unbind("mousemove", _docMouseMove);
+ doc.unbind("mouseup", _docMouseUp);
+ doc.unbind("selectstart", _docSelect);
+ body.css("cursor", "");
+ if (tmpTarget) {
+ tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
+ if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
+ .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
+ }
+ tools.showIfameMask(setting, false);
+
+ roots.showHoverDom = true;
+ if (root.dragFlag == 0) return;
+ root.dragFlag = 0;
+
+ var i, l, tmpNode;
+ for (i = 0, l = nodes.length; i < l; i++) {
+ tmpNode = nodes[i];
+ if (data.nodeIsParent(setting, tmpNode) && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {
+ view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
+ delete root.dragNodeShowBefore[tmpNode.tId];
+ }
+ }
+
+ if (curNode) curNode.remove();
+ if (tmpArrow) tmpArrow.remove();
+
+ var isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy);
+ if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId == nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {
+ tmpTarget = null;
+ }
+ if (tmpTarget) {
+ var dragTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId);
+ if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) {
+ view.selectNodes(sourceSetting, nodes);
+ return;
+ }
+ var newNodes = isCopy ? tools.clone(nodes) : nodes;
+
+ function dropCallback() {
+ if (isOtherTree) {
+ if (!isCopy) {
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ view.removeNode(setting, nodes[i]);
+ }
+ }
+ if (moveType == consts.move.TYPE_INNER) {
+ view.addNodes(targetSetting, dragTargetNode, -1, newNodes);
+ } else {
+ view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);
+ }
+ } else {
+ if (isCopy && moveType == consts.move.TYPE_INNER) {
+ view.addNodes(targetSetting, dragTargetNode, -1, newNodes);
+ } else if (isCopy) {
+ view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);
+ } else {
+ if (moveType != consts.move.TYPE_NEXT) {
+ for (i = 0, l = newNodes.length; i < l; i++) {
+ view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);
+ }
+ } else {
+ for (i = -1, l = newNodes.length - 1; i < l; l--) {
+ view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);
+ }
+ }
+ }
+ }
+ view.selectNodes(targetSetting, newNodes);
+
+ var a = $$(newNodes[0], setting).get(0);
+ view.scrollIntoView(setting, a);
+
+ setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);
+ }
+
+ if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {
+ view.asyncNode(targetSetting, dragTargetNode, false, dropCallback);
+ } else {
+ dropCallback();
+ }
+
+ } else {
+ view.selectNodes(sourceSetting, nodes);
+ setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);
+ }
+ }
+
+ doc.bind("selectstart", _docSelect);
+
+ function _docSelect() {
+ return false;
+ }
+
+ // 2018-03-30 FireFox has fixed this issue.
+ //Avoid FireFox's Bug
+ //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.
+ // if(eventMouseDown.preventDefault) {
+ // eventMouseDown.preventDefault();
+ // }
+ return true;
+ }
+ },
+ //method of tools for zTree
+ _tools = {
+ getAbs: function (obj) {
+ var oRect = obj.getBoundingClientRect(),
+ scrollTop = document.body.scrollTop + document.documentElement.scrollTop,
+ scrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;
+ return [oRect.left + scrollLeft, oRect.top + scrollTop];
+ },
+ inputFocus: function (inputObj) {
+ if (inputObj.get(0)) {
+ inputObj.focus();
+ tools.setCursorPosition(inputObj.get(0), inputObj.val().length);
+ }
+ },
+ inputSelect: function (inputObj) {
+ if (inputObj.get(0)) {
+ inputObj.focus();
+ inputObj.select();
+ }
+ },
+ setCursorPosition: function (obj, pos) {
+ if (obj.setSelectionRange) {
+ obj.focus();
+ obj.setSelectionRange(pos, pos);
+ } else if (obj.createTextRange) {
+ var range = obj.createTextRange();
+ range.collapse(true);
+ range.moveEnd('character', pos);
+ range.moveStart('character', pos);
+ range.select();
+ }
+ },
+ showIfameMask: function (setting, showSign) {
+ var root = data.getRoot(setting);
+ //clear full mask
+ while (root.dragMaskList.length > 0) {
+ root.dragMaskList[0].remove();
+ root.dragMaskList.shift();
+ }
+ if (showSign) {
+ //show mask
+ var iframeList = $$("iframe", setting);
+ for (var i = 0, l = iframeList.length; i < l; i++) {
+ var obj = iframeList.get(i),
+ r = tools.getAbs(obj),
+ dragMask = $$("<div id='zTreeMask_" + i + "' class='zTreeMask' style='top:" + r[1] + "px; left:" + r[0] + "px; width:" + obj.offsetWidth + "px; height:" + obj.offsetHeight + "px;'></div>", setting);
+ dragMask.appendTo($$("body", setting));
+ root.dragMaskList.push(dragMask);
+ }
+ }
+ }
+ },
+ //method of operate ztree dom
+ _view = {
+ addEditBtn: function (setting, node) {
+ if (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) {
+ return;
+ }
+ if (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) {
+ return;
+ }
+ var aObj = $$(node, consts.id.A, setting),
+ editStr = "<span class='" + consts.className.BUTTON + " edit' id='" + node.tId + consts.id.EDIT + "' title='" + tools.apply(setting.edit.renameTitle, [setting.treeId, node], setting.edit.renameTitle) + "' treeNode" + consts.id.EDIT + " style='display:none;'></span>";
+ aObj.append(editStr);
+
+ $$(node, consts.id.EDIT, setting).bind('click',
+ function () {
+ if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;
+ view.editNode(setting, node);
+ return false;
+ }
+ ).show();
+ },
+ addRemoveBtn: function (setting, node) {
+ if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) {
+ return;
+ }
+ if (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) {
+ return;
+ }
+ var aObj = $$(node, consts.id.A, setting),
+ removeStr = "<span class='" + consts.className.BUTTON + " remove' id='" + node.tId + consts.id.REMOVE + "' title='" + tools.apply(setting.edit.removeTitle, [setting.treeId, node], setting.edit.removeTitle) + "' treeNode" + consts.id.REMOVE + " style='display:none;'></span>";
+ aObj.append(removeStr);
+
+ $$(node, consts.id.REMOVE, setting).bind('click',
+ function () {
+ if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;
+ view.removeNode(setting, node);
+ setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
+ return false;
+ }
+ ).bind('mousedown',
+ function (eventMouseDown) {
+ return true;
+ }
+ ).show();
+ },
+ addHoverDom: function (setting, node) {
+ if (data.getRoots().showHoverDom) {
+ node.isHover = true;
+ if (setting.edit.enable) {
+ view.addEditBtn(setting, node);
+ view.addRemoveBtn(setting, node);
+ }
+ tools.apply(setting.view.addHoverDom, [setting.treeId, node]);
+ }
+ },
+ cancelCurEditNode: function (setting, forceName, isCancel) {
+ var root = data.getRoot(setting),
+ node = root.curEditNode;
+
+ if (node) {
+ var inputObj = root.curEditInput,
+ newName = forceName ? forceName : (isCancel ? data.nodeName(setting, node) : inputObj.val());
+ if (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) {
+ return false;
+ }
+ data.nodeName(setting, node, newName);
+ var aObj = $$(node, consts.id.A, setting);
+ aObj.removeClass(consts.node.CURSELECTED_EDIT);
+ inputObj.unbind();
+ view.setNodeName(setting, node);
+ node.editNameFlag = false;
+ root.curEditNode = null;
+ root.curEditInput = null;
+ view.selectNode(setting, node, false);
+ setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]);
+ }
+ root.noSelection = true;
+ return true;
+ },
+ editNode: function (setting, node) {
+ var root = data.getRoot(setting);
+ view.editNodeBlur = false;
+ if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
+ setTimeout(function () {
+ tools.inputFocus(root.curEditInput);
+ }, 0);
+ return;
+ }
+ node.editNameFlag = true;
+ view.removeTreeDom(setting, node);
+ view.cancelCurEditNode(setting);
+ view.selectNode(setting, node, false);
+ $$(node, consts.id.SPAN, setting).html("<input type=text class='rename' id='" + node.tId + consts.id.INPUT + "' treeNode" + consts.id.INPUT + " >");
+ var inputObj = $$(node, consts.id.INPUT, setting);
+ inputObj.attr("value", data.nodeName(setting, node));
+ if (setting.edit.editNameSelectAll) {
+ tools.inputSelect(inputObj);
+ } else {
+ tools.inputFocus(inputObj);
+ }
+
+ inputObj.bind('blur', function (event) {
+ if (!view.editNodeBlur) {
+ view.cancelCurEditNode(setting);
+ }
+ }).bind('keydown', function (event) {
+ if (event.keyCode == "13") {
+ view.editNodeBlur = true;
+ view.cancelCurEditNode(setting);
+ } else if (event.keyCode == "27") {
+ view.cancelCurEditNode(setting, null, true);
+ }
+ }).bind('click', function (event) {
+ return false;
+ }).bind('dblclick', function (event) {
+ return false;
+ });
+
+ $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT);
+ root.curEditInput = inputObj;
+ root.noSelection = false;
+ root.curEditNode = node;
+ },
+ moveNode: function (setting, targetNode, node, moveType, animateFlag, isSilent) {
+ var root = data.getRoot(setting);
+ if (targetNode == node) return;
+ if (setting.data.keep.leaf && targetNode && !data.nodeIsParent(setting, targetNode) && moveType == consts.move.TYPE_INNER) return;
+ var oldParentNode = (node.parentTId ? node.getParentNode() : root),
+ targetNodeIsRoot = (targetNode === null || targetNode == root);
+ if (targetNodeIsRoot && targetNode === null) targetNode = root;
+ if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;
+ var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);
+
+ if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {
+ moveType = consts.move.TYPE_INNER;
+ }
+
+ if (moveType == consts.move.TYPE_INNER) {
+ if (targetNodeIsRoot) {
+ //parentTId of root node is null
+ node.parentTId = null;
+ } else {
+ if (!data.nodeIsParent(setting, targetNode)) {
+ data.nodeIsParent(setting, targetNode, true);
+ targetNode.open = !!targetNode.open;
+ view.setNodeLineIcos(setting, targetNode);
+ }
+ node.parentTId = targetNode.tId;
+ }
+ }
+
+ //move node Dom
+ var targetObj, target_ulObj;
+ if (targetNodeIsRoot) {
+ targetObj = setting.treeObj;
+ target_ulObj = targetObj;
+ } else {
+ if (!isSilent && moveType == consts.move.TYPE_INNER) {
+ view.expandCollapseNode(setting, targetNode, true, false);
+ } else if (!isSilent) {
+ view.expandCollapseNode(setting, targetNode.getParentNode(), true, false);
+ }
+ targetObj = $$(targetNode, setting);
+ target_ulObj = $$(targetNode, consts.id.UL, setting);
+ if (!!targetObj.get(0) && !target_ulObj.get(0)) {
+ var ulstr = [];
+ view.makeUlHtml(setting, targetNode, ulstr, '');
+ targetObj.append(ulstr.join(''));
+ }
+ target_ulObj = $$(targetNode, consts.id.UL, setting);
+ }
+ var nodeDom = $$(node, setting);
+ if (!nodeDom.get(0)) {
+ nodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join('');
+ } else if (!targetObj.get(0)) {
+ nodeDom.remove();
+ }
+ if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {
+ target_ulObj.append(nodeDom);
+ } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {
+ targetObj.before(nodeDom);
+ } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {
+ targetObj.after(nodeDom);
+ }
+
+ //repair the data after move
+ var i, l,
+ tmpSrcIndex = -1,
+ tmpTargetIndex = 0,
+ oldNeighbor = null,
+ newNeighbor = null,
+ oldLevel = node.level;
+ var oldChildren = data.nodeChildren(setting, oldParentNode);
+ var targetParentChildren = data.nodeChildren(setting, targetParentNode);
+ var targetChildren = data.nodeChildren(setting, targetNode);
+ if (node.isFirstNode) {
+ tmpSrcIndex = 0;
+ if (oldChildren.length > 1) {
+ oldNeighbor = oldChildren[1];
+ oldNeighbor.isFirstNode = true;
+ }
+ } else if (node.isLastNode) {
+ tmpSrcIndex = oldChildren.length - 1;
+ oldNeighbor = oldChildren[tmpSrcIndex - 1];
+ oldNeighbor.isLastNode = true;
+ } else {
+ for (i = 0, l = oldChildren.length; i < l; i++) {
+ if (oldChildren[i].tId == node.tId) {
+ tmpSrcIndex = i;
+ break;
+ }
+ }
+ }
+ if (tmpSrcIndex >= 0) {
+ oldChildren.splice(tmpSrcIndex, 1);
+ }
+ if (moveType != consts.move.TYPE_INNER) {
+ for (i = 0, l = targetParentChildren.length; i < l; i++) {
+ if (targetParentChildren[i].tId == targetNode.tId) tmpTargetIndex = i;
+ }
+ }
+ if (moveType == consts.move.TYPE_INNER) {
+ if (!targetChildren) {
+ targetChildren = data.nodeChildren(setting, targetNode, []);
+ }
+ if (targetChildren.length > 0) {
+ newNeighbor = targetChildren[targetChildren.length - 1];
+ newNeighbor.isLastNode = false;
+ }
+ targetChildren.splice(targetChildren.length, 0, node);
+ node.isLastNode = true;
+ node.isFirstNode = (targetChildren.length == 1);
+ } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {
+ targetParentChildren.splice(tmpTargetIndex, 0, node);
+ newNeighbor = targetNode;
+ newNeighbor.isFirstNode = false;
+ node.parentTId = targetNode.parentTId;
+ node.isFirstNode = true;
+ node.isLastNode = false;
+
+ } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {
+ targetParentChildren.splice(tmpTargetIndex + 1, 0, node);
+ newNeighbor = targetNode;
+ newNeighbor.isLastNode = false;
+ node.parentTId = targetNode.parentTId;
+ node.isFirstNode = false;
+ node.isLastNode = true;
+
+ } else {
+ if (moveType == consts.move.TYPE_PREV) {
+ targetParentChildren.splice(tmpTargetIndex, 0, node);
+ } else {
+ targetParentChildren.splice(tmpTargetIndex + 1, 0, node);
+ }
+ node.parentTId = targetNode.parentTId;
+ node.isFirstNode = false;
+ node.isLastNode = false;
+ }
+ data.fixPIdKeyValue(setting, node);
+ data.setSonNodeLevel(setting, node.getParentNode(), node);
+
+ //repair node what been moved
+ view.setNodeLineIcos(setting, node);
+ view.repairNodeLevelClass(setting, node, oldLevel);
+
+ //repair node's old parentNode dom
+ if (!setting.data.keep.parent && oldChildren.length < 1) {
+ //old parentNode has no child nodes
+ data.nodeIsParent(setting, oldParentNode, false);
+ oldParentNode.open = false;
+ var tmp_ulObj = $$(oldParentNode, consts.id.UL, setting),
+ tmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting),
+ tmp_icoObj = $$(oldParentNode, consts.id.ICON, setting);
+ view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);
+ view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);
+ tmp_ulObj.css("display", "none");
+
+ } else if (oldNeighbor) {
+ //old neigbor node
+ view.setNodeLineIcos(setting, oldNeighbor);
+ }
+
+ //new neigbor node
+ if (newNeighbor) {
+ view.setNodeLineIcos(setting, newNeighbor);
+ }
+
+ //repair checkbox / radio
+ if (!!setting.check && setting.check.enable && view.repairChkClass) {
+ view.repairChkClass(setting, oldParentNode);
+ view.repairParentChkClassWithSelf(setting, oldParentNode);
+ if (oldParentNode != node.parent)
+ view.repairParentChkClassWithSelf(setting, node);
+ }
+
+ //expand parents after move
+ if (!isSilent) {
+ view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);
+ }
+ },
+ removeEditBtn: function (setting, node) {
+ $$(node, consts.id.EDIT, setting).unbind().remove();
+ },
+ removeRemoveBtn: function (setting, node) {
+ $$(node, consts.id.REMOVE, setting).unbind().remove();
+ },
+ removeTreeDom: function (setting, node) {
+ node.isHover = false;
+ view.removeEditBtn(setting, node);
+ view.removeRemoveBtn(setting, node);
+ tools.apply(setting.view.removeHoverDom, [setting.treeId, node]);
+ },
+ repairNodeLevelClass: function (setting, node, oldLevel) {
+ if (oldLevel === node.level) return;
+ var liObj = $$(node, setting),
+ aObj = $$(node, consts.id.A, setting),
+ ulObj = $$(node, consts.id.UL, setting),
+ oldClass = consts.className.LEVEL + oldLevel,
+ newClass = consts.className.LEVEL + node.level;
+ liObj.removeClass(oldClass);
+ liObj.addClass(newClass);
+ aObj.removeClass(oldClass);
+ aObj.addClass(newClass);
+ ulObj.removeClass(oldClass);
+ ulObj.addClass(newClass);
+ },
+ selectNodes: function (setting, nodes) {
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ view.selectNode(setting, nodes[i], i > 0);
+ }
+ }
+ },
+
+ _z = {
+ tools: _tools,
+ view: _view,
+ event: _event,
+ data: _data
+ };
+ $.extend(true, $.fn.zTree.consts, _consts);
+ $.extend(true, $.fn.zTree._z, _z);
+
+ var zt = $.fn.zTree,
+ tools = zt._z.tools,
+ consts = zt.consts,
+ view = zt._z.view,
+ data = zt._z.data,
+ event = zt._z.event,
+ $$ = tools.$;
+
+ data.exSetting(_setting);
+ data.addInitBind(_bindEvent);
+ data.addInitUnBind(_unbindEvent);
+ data.addInitCache(_initCache);
+ data.addInitNode(_initNode);
+ data.addInitProxy(_eventProxy);
+ data.addInitRoot(_initRoot);
+ data.addZTreeTools(_zTreeTools);
+
+ var _cancelPreSelectedNode = view.cancelPreSelectedNode;
+ view.cancelPreSelectedNode = function (setting, node) {
+ var list = data.getRoot(setting).curSelectedList;
+ for (var i = 0, j = list.length; i < j; i++) {
+ if (!node || node === list[i]) {
+ view.removeTreeDom(setting, list[i]);
+ if (node) break;
+ }
+ }
+ if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);
+ }
+
+ var _createNodes = view.createNodes;
+ view.createNodes = function (setting, level, nodes, parentNode, index) {
+ if (_createNodes) {
+ _createNodes.apply(view, arguments);
+ }
+ if (!nodes) return;
+ if (view.repairParentChkClassWithSelf) {
+ view.repairParentChkClassWithSelf(setting, parentNode);
+ }
+ }
+
+ var _makeNodeUrl = view.makeNodeUrl;
+ view.makeNodeUrl = function (setting, node) {
+ return setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments));
+ }
+
+ var _removeNode = view.removeNode;
+ view.removeNode = function (setting, node) {
+ var root = data.getRoot(setting);
+ if (root.curEditNode === node) root.curEditNode = null;
+ if (_removeNode) {
+ _removeNode.apply(view, arguments);
+ }
+ }
+
+ var _selectNode = view.selectNode;
+ view.selectNode = function (setting, node, addFlag) {
+ var root = data.getRoot(setting);
+ if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
+ return false;
+ }
+ if (_selectNode) _selectNode.apply(view, arguments);
+ view.addHoverDom(setting, node);
+ return true;
+ }
+
+ var _uCanDo = tools.uCanDo;
+ tools.uCanDo = function (setting, e) {
+ var root = data.getRoot(setting);
+ if (e && (tools.eqs(e.type, "mouseover") || tools.eqs(e.type, "mouseout") || tools.eqs(e.type, "mousedown") || tools.eqs(e.type, "mouseup"))) {
+ return true;
+ }
+ if (root.curEditNode) {
+ view.editNodeBlur = false;
+ root.curEditInput.focus();
+ }
+ return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);
+ }
+})(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exedit.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/js/jquery-1.4.4.min.js
===================================================================
--- base3.10/src/main/webapp/resource/zTree/js/jquery-1.4.4.min.js (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/js/jquery-1.4.4.min.js (revision 10)
@@ -0,0 +1,167 @@
+/*!
+ * jQuery JavaScript Library v1.4.4
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Nov 11 19:04:53 2010 -0500
+ */
+(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
+h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
+h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
+"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
+e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
+"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
+s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
+j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
+toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
+-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
+if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
+if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
+b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
+!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
+l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
+z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
+s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
+s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
+[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
+false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
+k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
+scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
+1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
+"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
+c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
+else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
+a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
+c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
+a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
+colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
+1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
+l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
+"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
+if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
+a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
+attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
+b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
+c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
+arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
+d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
+c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
+w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
+8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
+"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
+d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==B)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
+Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
+c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
+var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
+"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
+xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
+B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
+"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
+0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
+a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
+1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
+"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
+c.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".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
+(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
+[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
+break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
+q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
+l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
+return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
+B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
+POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
+i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
+i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
+"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
+m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
+true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
+g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
+0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
+"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
+i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
+if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
+g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
+for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
+i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
+n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
+function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
+p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
+t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
+function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
+c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
+not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
+h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
+c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
+2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
+b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
+e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={option:[1,
+"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
+else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
+c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
+b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
+this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
+prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
+b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
+1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
+d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
+jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
+zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
+h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
+if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
+d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
+e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
+"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
+!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
+getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
+script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
+!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
+false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
+A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
+b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
+c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
+c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
+encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
+[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
+e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
+if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
+3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
+d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
+d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
+"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
+1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
+d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
+Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
+var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
+this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
+this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
+c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
+b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
+h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
+for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
+parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
+height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
+f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
+"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
+e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
+c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
+c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
+b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);
Property changes on: base3.10/src/main/webapp/resource/zTree/js/jquery-1.4.4.min.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.all.min.js
===================================================================
--- base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.all.min.js (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.all.min.js (revision 10)
@@ -0,0 +1,3 @@
+!function($){var settings={},roots={},caches={},_consts={className:{BUTTON:"button",LEVEL:"level",ICO_LOADING:"ico_loading",SWITCH:"switch",NAME:"node_name"},event:{NODECREATED:"ztree_nodeCreated",CLICK:"ztree_click",EXPAND:"ztree_expand",COLLAPSE:"ztree_collapse",ASYNC_SUCCESS:"ztree_async_success",ASYNC_ERROR:"ztree_async_error",REMOVE:"ztree_remove",SELECTED:"ztree_selected",UNSELECTED:"ztree_unselected"},id:{A:"_a",ICON:"_ico",SPAN:"_span",SWITCH:"_switch",UL:"_ul"},line:{ROOT:"root",ROOTS:"roots",CENTER:"center",BOTTOM:"bottom",NOLINE:"noline",LINE:"line"},folder:{OPEN:"open",CLOSE:"close",DOCU:"docu"},node:{CURSELECTED:"curSelectedNode"}},_setting={treeId:"",treeObj:null,view:{addDiyDom:null,autoCancelSelected:!0,dblClickExpand:!0,expandSpeed:"fast",fontCss:{},nodeClasses:{},nameIsHTML:!1,selectedMulti:!0,showIcon:!0,showLine:!0,showTitle:!0,txtSelectedEnable:!1},data:{key:{isParent:"isParent",children:"children",name:"name",title:"",url:"url",icon:"icon"},simpleData:{enable:!1,idKey:"id",pIdKey:"pId",rootPId:null},keep:{parent:!1,leaf:!1}},async:{enable:!1,contentType:"application/x-www-form-urlencoded",type:"post",dataType:"text",headers:{},xhrFields:{},url:"",autoParam:[],otherParam:[],dataFilter:null},callback:{beforeAsync:null,beforeClick:null,beforeDblClick:null,beforeRightClick:null,beforeMouseDown:null,beforeMouseUp:null,beforeExpand:null,beforeCollapse:null,beforeRemove:null,onAsyncError:null,onAsyncSuccess:null,onNodeCreated:null,onClick:null,onDblClick:null,onRightClick:null,onMouseDown:null,onMouseUp:null,onExpand:null,onCollapse:null,onRemove:null}},_initRoot=function(e){var t=data.getRoot(e);t||(t={},data.setRoot(e,t)),data.nodeChildren(e,t,[]),t.expandTriggerFlag=!1,t.curSelectedList=[],t.noSelection=!0,t.createdNodes=[],t.zId=0,t._ver=(new Date).getTime()},_initCache=function(e){var t=data.getCache(e);t||(t={},data.setCache(e,t)),t.nodes=[],t.doms=[]},_bindEvent=function(d){var e=d.treeObj,t=consts.event;e.bind(t.NODECREATED,function(e,t,n){tools.apply(d.callback.onNodeCreated,[e,t,n])}),e.bind(t.CLICK,function(e,t,n,o,a){tools.apply(d.callback.onClick,[t,n,o,a])}),e.bind(t.EXPAND,function(e,t,n){tools.apply(d.callback.onExpand,[e,t,n])}),e.bind(t.COLLAPSE,function(e,t,n){tools.apply(d.callback.onCollapse,[e,t,n])}),e.bind(t.ASYNC_SUCCESS,function(e,t,n,o){tools.apply(d.callback.onAsyncSuccess,[e,t,n,o])}),e.bind(t.ASYNC_ERROR,function(e,t,n,o,a,r){tools.apply(d.callback.onAsyncError,[e,t,n,o,a,r])}),e.bind(t.REMOVE,function(e,t,n){tools.apply(d.callback.onRemove,[e,t,n])}),e.bind(t.SELECTED,function(e,t,n){tools.apply(d.callback.onSelected,[t,n])}),e.bind(t.UNSELECTED,function(e,t,n){tools.apply(d.callback.onUnSelected,[t,n])})},_unbindEvent=function(e){var t=e.treeObj,n=consts.event;t.unbind(n.NODECREATED).unbind(n.CLICK).unbind(n.EXPAND).unbind(n.COLLAPSE).unbind(n.ASYNC_SUCCESS).unbind(n.ASYNC_ERROR).unbind(n.REMOVE).unbind(n.SELECTED).unbind(n.UNSELECTED)},_eventProxy=function(e){var t=e.target,n=data.getSetting(e.data.treeId),o="",a=null,r="",d="",i=null,s=null,l=null;if(tools.eqs(e.type,"mousedown")?d="mousedown":tools.eqs(e.type,"mouseup")?d="mouseup":tools.eqs(e.type,"contextmenu")?d="contextmenu":tools.eqs(e.type,"click")?tools.eqs(t.tagName,"span")&&null!==t.getAttribute("treeNode"+consts.id.SWITCH)?(o=tools.getNodeMainDom(t).id,r="switchNode"):(l=tools.getMDom(n,t,[{tagName:"a",attrName:"treeNode"+consts.id.A}]))&&(o=tools.getNodeMainDom(l).id,r="clickNode"):tools.eqs(e.type,"dblclick")&&(d="dblclick",(l=tools.getMDom(n,t,[{tagName:"a",attrName:"treeNode"+consts.id.A}]))&&(o=tools.getNodeMainDom(l).id,r="switchNode")),0<d.length&&0==o.length&&(l=tools.getMDom(n,t,[{tagName:"a",attrName:"treeNode"+consts.id.A}]))&&(o=tools.getNodeMainDom(l).id),0<o.length)switch(a=data.getNodeCache(n,o),r){case"switchNode":data.nodeIsParent(n,a)&&(tools.eqs(e.type,"click")||tools.eqs(e.type,"dblclick")&&tools.apply(n.view.dblClickExpand,[n.treeId,a],n.view.dblClickExpand))?i=handler.onSwitchNode:r="";break;case"clickNode":i=handler.onClickNode}switch(d){case"mousedown":s=handler.onZTreeMousedown;break;case"mouseup":s=handler.onZTreeMouseup;break;case"dblclick":s=handler.onZTreeDblclick;break;case"contextmenu":s=handler.onZTreeContextmenu}return{stop:!1,node:a,nodeEventType:r,nodeEventCallback:i,treeEventType:d,treeEventCallback:s}},_initNode=function(e,t,n,o,a,r,d){if(n){var i=data.getRoot(e),s=data.nodeChildren(e,n);n.level=t,n.tId=e.treeId+"_"+ ++i.zId,n.parentTId=o?o.tId:null,n.open="string"==typeof n.open?tools.eqs(n.open,"true"):!!n.open;var l=data.nodeIsParent(e,n);tools.isArray(s)?(data.nodeIsParent(e,n,!0),n.zAsync=!0):(l=data.nodeIsParent(e,n,l),n.open=!(!l||e.async.enable)&&n.open,n.zAsync=!l),n.isFirstNode=a,n.isLastNode=r,n.getParentNode=function(){return data.getNodeCache(e,n.parentTId)},n.getPreNode=function(){return data.getPreNode(e,n)},n.getNextNode=function(){return data.getNextNode(e,n)},n.getIndex=function(){return data.getNodeIndex(e,n)},n.getPath=function(){return data.getNodePath(e,n)},n.isAjaxing=!1,data.fixPIdKeyValue(e,n)}},_init={bind:[_bindEvent],unbind:[_unbindEvent],caches:[_initCache],nodes:[_initNode],proxys:[_eventProxy],roots:[_initRoot],beforeA:[],afterA:[],innerBeforeA:[],innerAfterA:[],zTreeTools:[]},data={addNodeCache:function(e,t){data.getCache(e).nodes[data.getNodeCacheId(t.tId)]=t},getNodeCacheId:function(e){return e.substring(e.lastIndexOf("_")+1)},addAfterA:function(e){_init.afterA.push(e)},addBeforeA:function(e){_init.beforeA.push(e)},addInnerAfterA:function(e){_init.innerAfterA.push(e)},addInnerBeforeA:function(e){_init.innerBeforeA.push(e)},addInitBind:function(e){_init.bind.push(e)},addInitUnBind:function(e){_init.unbind.push(e)},addInitCache:function(e){_init.caches.push(e)},addInitNode:function(e){_init.nodes.push(e)},addInitProxy:function(e,t){t?_init.proxys.splice(0,0,e):_init.proxys.push(e)},addInitRoot:function(e){_init.roots.push(e)},addNodesData:function(e,t,n,o){var a,r=data.nodeChildren(e,t);r?n>=r.length&&(n=-1):(r=data.nodeChildren(e,t,[]),n=-1),0<r.length&&0===n?(r[0].isFirstNode=!1,view.setNodeLineIcos(e,r[0])):0<r.length&&n<0&&(r[r.length-1].isLastNode=!1,view.setNodeLineIcos(e,r[r.length-1])),data.nodeIsParent(e,t,!0),n<0?data.nodeChildren(e,t,r.concat(o)):(a=[n,0].concat(o),r.splice.apply(r,a))},addSelectedNode:function(e,t){var n=data.getRoot(e);data.isSelectedNode(e,t)||n.curSelectedList.push(t)},addCreatedNode:function(e,t){(e.callback.onNodeCreated||e.view.addDiyDom)&&data.getRoot(e).createdNodes.push(t)},addZTreeTools:function(e){_init.zTreeTools.push(e)},exSetting:function(e){$.extend(!0,_setting,e)},fixPIdKeyValue:function(e,t){e.data.simpleData.enable&&(t[e.data.simpleData.pIdKey]=t.parentTId?t.getParentNode()[e.data.simpleData.idKey]:e.data.simpleData.rootPId)},getAfterA:function(e,t,n){for(var o=0,a=_init.afterA.length;o<a;o++)_init.afterA[o].apply(this,arguments)},getBeforeA:function(e,t,n){for(var o=0,a=_init.beforeA.length;o<a;o++)_init.beforeA[o].apply(this,arguments)},getInnerAfterA:function(e,t,n){for(var o=0,a=_init.innerAfterA.length;o<a;o++)_init.innerAfterA[o].apply(this,arguments)},getInnerBeforeA:function(e,t,n){for(var o=0,a=_init.innerBeforeA.length;o<a;o++)_init.innerBeforeA[o].apply(this,arguments)},getCache:function(e){return caches[e.treeId]},getNodeIndex:function(e,t){if(!t)return null;for(var n=t.parentTId?t.getParentNode():data.getRoot(e),o=data.nodeChildren(e,n),a=0,r=o.length-1;a<=r;a++)if(o[a]===t)return a;return-1},getNextNode:function(e,t){if(!t)return null;for(var n=t.parentTId?t.getParentNode():data.getRoot(e),o=data.nodeChildren(e,n),a=0,r=o.length-1;a<=r;a++)if(o[a]===t)return a==r?null:o[a+1];return null},getNodeByParam:function(e,t,n,o){if(!t||!n)return null;for(var a=0,r=t.length;a<r;a++){var d=t[a];if(d[n]==o)return t[a];var i=data.nodeChildren(e,d),s=data.getNodeByParam(e,i,n,o);if(s)return s}return null},getNodeCache:function(e,t){if(!t)return null;var n=caches[e.treeId].nodes[data.getNodeCacheId(t)];return n||null},getNodePath:function(e,t){return t?((n=t.parentTId?t.getParentNode().getPath():[])&&n.push(t),n):null;var n},getNodes:function(e){return data.nodeChildren(e,data.getRoot(e))},getNodesByParam:function(e,t,n,o){if(!t||!n)return[];for(var a=[],r=0,d=t.length;r<d;r++){var i=t[r];i[n]==o&&a.push(i);var s=data.nodeChildren(e,i);a=a.concat(data.getNodesByParam(e,s,n,o))}return a},getNodesByParamFuzzy:function(e,t,n,o){if(!t||!n)return[];var a=[];o=o.toLowerCase();for(var r=0,d=t.length;r<d;r++){var i=t[r];"string"==typeof i[n]&&-1<t[r][n].toLowerCase().indexOf(o)&&a.push(i);var s=data.nodeChildren(e,i);a=a.concat(data.getNodesByParamFuzzy(e,s,n,o))}return a},getNodesByFilter:function(e,t,n,o,a){if(!t)return o?null:[];for(var r=o?null:[],d=0,i=t.length;d<i;d++){var s=t[d];if(tools.apply(n,[s,a],!1)){if(o)return s;r.push(s)}var l=data.nodeChildren(e,s),c=data.getNodesByFilter(e,l,n,o,a);if(o&&c)return c;r=o?c:r.concat(c)}return r},getPreNode:function(e,t){if(!t)return null;for(var n=t.parentTId?t.getParentNode():data.getRoot(e),o=data.nodeChildren(e,n),a=0,r=o.length;a<r;a++)if(o[a]===t)return 0==a?null:o[a-1];return null},getRoot:function(e){return e?roots[e.treeId]:null},getRoots:function(){return roots},getSetting:function(e){return settings[e]},getSettings:function(){return settings},getZTreeTools:function(e){var t=this.getRoot(this.getSetting(e));return t?t.treeTools:null},initCache:function(e){for(var t=0,n=_init.caches.length;t<n;t++)_init.caches[t].apply(this,arguments)},initNode:function(e,t,n,o,a,r){for(var d=0,i=_init.nodes.length;d<i;d++)_init.nodes[d].apply(this,arguments)},initRoot:function(e){for(var t=0,n=_init.roots.length;t<n;t++)_init.roots[t].apply(this,arguments)},isSelectedNode:function(e,t){for(var n=data.getRoot(e),o=0,a=n.curSelectedList.length;o<a;o++)if(t===n.curSelectedList[o])return!0;return!1},nodeChildren:function(e,t,n){if(!t)return null;var o=e.data.key.children;return void 0!==n&&(t[o]=n),t[o]},nodeIsParent:function(e,t,n){if(!t)return!1;var o=e.data.key.isParent;return void 0!==n?("string"==typeof n&&(n=tools.eqs(n,"true")),n=!!n,t[o]=n):"string"==typeof t[o]?t[o]=tools.eqs(t[o],"true"):t[o]=!!t[o],t[o]},nodeName:function(e,t,n){var o=e.data.key.name;return void 0!==n&&(t[o]=n),""+t[o]},nodeTitle:function(e,t){return""+t[""===e.data.key.title?e.data.key.name:e.data.key.title]},removeNodeCache:function(e,t){var n=data.nodeChildren(e,t);if(n)for(var o=0,a=n.length;o<a;o++)data.removeNodeCache(e,n[o]);data.getCache(e).nodes[data.getNodeCacheId(t.tId)]=null},removeSelectedNode:function(e,t){for(var n=data.getRoot(e),o=0,a=n.curSelectedList.length;o<a;o++)t!==n.curSelectedList[o]&&data.getNodeCache(e,n.curSelectedList[o].tId)||(n.curSelectedList.splice(o,1),e.treeObj.trigger(consts.event.UNSELECTED,[e.treeId,t]),o--,a--)},setCache:function(e,t){caches[e.treeId]=t},setRoot:function(e,t){roots[e.treeId]=t},setZTreeTools:function(e,t){for(var n=0,o=_init.zTreeTools.length;n<o;n++)_init.zTreeTools[n].apply(this,arguments)},transformToArrayFormat:function(n,e){if(!e)return[];var o=[];if(tools.isArray(e))for(var t=0,a=e.length;t<a;t++){r(e[t])}else r(e);return o;function r(e){o.push(e);var t=data.nodeChildren(n,e);t&&(o=o.concat(data.transformToArrayFormat(n,t)))}},transformTozTreeFormat:function(e,t){var n,o,a=e.data.simpleData.idKey,r=e.data.simpleData.pIdKey;if(!a||""==a||!t)return[];if(tools.isArray(t)){var d=[],i={};for(n=0,o=t.length;n<o;n++)i[t[n][a]]=t[n];for(n=0,o=t.length;n<o;n++){var s=i[t[n][r]];if(s&&t[n][a]!=t[n][r]){var l=data.nodeChildren(e,s);(l=l||data.nodeChildren(e,s,[])).push(t[n])}else d.push(t[n])}return d}return[t]}},event={bindEvent:function(e){for(var t=0,n=_init.bind.length;t<n;t++)_init.bind[t].apply(this,arguments)},unbindEvent:function(e){for(var t=0,n=_init.unbind.length;t<n;t++)_init.unbind[t].apply(this,arguments)},bindTree:function(e){var t={treeId:e.treeId},n=e.treeObj;e.view.txtSelectedEnable||n.bind("selectstart",handler.onSelectStart).css({"-moz-user-select":"-moz-none"}),n.bind("click",t,event.proxy),n.bind("dblclick",t,event.proxy),n.bind("mouseover",t,event.proxy),n.bind("mouseout",t,event.proxy),n.bind("mousedown",t,event.proxy),n.bind("mouseup",t,event.proxy),n.bind("contextmenu",t,event.proxy)},unbindTree:function(e){e.treeObj.unbind("selectstart",handler.onSelectStart).unbind("click",event.proxy).unbind("dblclick",event.proxy).unbind("mouseover",event.proxy).unbind("mouseout",event.proxy).unbind("mousedown",event.proxy).unbind("mouseup",event.proxy).unbind("contextmenu",event.proxy)},doProxy:function(e){for(var t=[],n=0,o=_init.proxys.length;n<o;n++){var a=_init.proxys[n].apply(this,arguments);if(t.push(a),a.stop)break}return t},proxy:function(e){var t=data.getSetting(e.data.treeId);if(!tools.uCanDo(t,e))return!0;for(var n=event.doProxy(e),o=!0,a=0,r=n.length;a<r;a++){var d=n[a];d.nodeEventCallback&&(o=d.nodeEventCallback.apply(d,[e,d.node])&&o),d.treeEventCallback&&(o=d.treeEventCallback.apply(d,[e,d.node])&&o)}return o}},handler={onSwitchNode:function(e,t){var n=data.getSetting(e.data.treeId);if(t.open){if(0==tools.apply(n.callback.beforeCollapse,[n.treeId,t],!0))return!0;data.getRoot(n).expandTriggerFlag=!0,view.switchNode(n,t)}else{if(0==tools.apply(n.callback.beforeExpand,[n.treeId,t],!0))return!0;data.getRoot(n).expandTriggerFlag=!0,view.switchNode(n,t)}return!0},onClickNode:function(e,t){var n=data.getSetting(e.data.treeId),o=n.view.autoCancelSelected&&(e.ctrlKey||e.metaKey)&&data.isSelectedNode(n,t)?0:n.view.autoCancelSelected&&(e.ctrlKey||e.metaKey)&&n.view.selectedMulti?2:1;return 0==tools.apply(n.callback.beforeClick,[n.treeId,t,o],!0)||(0==o?view.cancelPreSelectedNode(n,t):view.selectNode(n,t,2==o),n.treeObj.trigger(consts.event.CLICK,[e,n.treeId,t,o])),!0},onZTreeMousedown:function(e,t){var n=data.getSetting(e.data.treeId);return tools.apply(n.callback.beforeMouseDown,[n.treeId,t],!0)&&tools.apply(n.callback.onMouseDown,[e,n.treeId,t]),!0},onZTreeMouseup:function(e,t){var n=data.getSetting(e.data.treeId);return tools.apply(n.callback.beforeMouseUp,[n.treeId,t],!0)&&tools.apply(n.callback.onMouseUp,[e,n.treeId,t]),!0},onZTreeDblclick:function(e,t){var n=data.getSetting(e.data.treeId);return tools.apply(n.callback.beforeDblClick,[n.treeId,t],!0)&&tools.apply(n.callback.onDblClick,[e,n.treeId,t]),!0},onZTreeContextmenu:function(e,t){var n=data.getSetting(e.data.treeId);return tools.apply(n.callback.beforeRightClick,[n.treeId,t],!0)&&tools.apply(n.callback.onRightClick,[e,n.treeId,t]),"function"!=typeof n.callback.onRightClick},onSelectStart:function(e){var t=e.originalEvent.srcElement.nodeName.toLowerCase();return"input"===t||"textarea"===t}},tools={apply:function(e,t,n){return"function"==typeof e?e.apply(zt,t||[]):n},canAsync:function(e,t){var n=data.nodeChildren(e,t),o=data.nodeIsParent(e,t);return e.async.enable&&t&&o&&!(t.zAsync||n&&0<n.length)},clone:function(e){if(null===e)return null;var t=tools.isArray(e)?[]:{};for(var n in e)t[n]=e[n]instanceof Date?new Date(e[n].getTime()):"object"==typeof e[n]?tools.clone(e[n]):e[n];return t},eqs:function(e,t){return e.toLowerCase()===t.toLowerCase()},isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},isElement:function(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName},$:function(e,t,n){return t&&"string"!=typeof t&&(n=t,t=""),"string"==typeof e?$(e,n?n.treeObj.get(0).ownerDocument:null):$("#"+e.tId+t,n?n.treeObj:null)},getMDom:function(e,t,n){if(!t)return null;for(;t&&t.id!==e.treeId;){for(var o=0,a=n.length;t.tagName&&o<a;o++)if(tools.eqs(t.tagName,n[o].tagName)&&null!==t.getAttribute(n[o].attrName))return t;t=t.parentNode}return null},getNodeMainDom:function(e){return $(e).parent("li").get(0)||$(e).parentsUntil("li").parent().get(0)},isChildOrSelf:function(e,t){return 0<$(e).closest("#"+t).length},uCanDo:function(e,t){return!0}},view={addNodes:function(e,t,n,o,a){var r=data.nodeIsParent(e,t);if(!e.data.keep.leaf||!t||r)if(tools.isArray(o)||(o=[o]),e.data.simpleData.enable&&(o=data.transformTozTreeFormat(e,o)),t){var d=$$(t,consts.id.SWITCH,e),i=$$(t,consts.id.ICON,e),s=$$(t,consts.id.UL,e);t.open||(view.replaceSwitchClass(t,d,consts.folder.CLOSE),view.replaceIcoClass(t,i,consts.folder.CLOSE),t.open=!1,s.css({display:"none"})),data.addNodesData(e,t,n,o),view.createNodes(e,t.level+1,o,t,n),a||view.expandCollapseParentNode(e,t,!0)}else data.addNodesData(e,data.getRoot(e),n,o),view.createNodes(e,0,o,null,n)},appendNodes:function(e,t,n,o,a,r,d){if(!n)return[];var i,s,l=[],c=o||data.getRoot(e),u=data.nodeChildren(e,c);(!u||a>=u.length-n.length)&&(a=-1);for(var p=0,f=n.length;p<f;p++){var g=n[p];r&&(i=(0===a||u.length==n.length)&&0==p,s=a<0&&p==n.length-1,data.initNode(e,t,g,o,i,s,d),data.addNodeCache(e,g));var v=data.nodeIsParent(e,g),N=[],h=data.nodeChildren(e,g);h&&0<h.length&&(N=view.appendNodes(e,t+1,h,g,-1,r,d&&g.open)),d&&(view.makeDOMNodeMainBefore(l,e,g),view.makeDOMNodeLine(l,e,g),data.getBeforeA(e,g,l),view.makeDOMNodeNameBefore(l,e,g),data.getInnerBeforeA(e,g,l),view.makeDOMNodeIcon(l,e,g),data.getInnerAfterA(e,g,l),view.makeDOMNodeNameAfter(l,e,g),data.getAfterA(e,g,l),v&&g.open&&view.makeUlHtml(e,g,l,N.join("")),view.makeDOMNodeMainAfter(l,e,g),data.addCreatedNode(e,g))}return l},appendParentULDom:function(e,t){var n=[],o=$$(t,e);!o.get(0)&&t.parentTId&&(view.appendParentULDom(e,t.getParentNode()),o=$$(t,e));var a=$$(t,consts.id.UL,e);a.get(0)&&a.remove();var r=data.nodeChildren(e,t),d=view.appendNodes(e,t.level+1,r,t,-1,!1,!0);view.makeUlHtml(e,t,n,d.join("")),o.append(n.join(""))},asyncNode:function(setting,node,isSilent,callback){var i,l,isParent=data.nodeIsParent(setting,node);if(node&&!isParent)return tools.apply(callback),!1;if(node&&node.isAjaxing)return!1;if(0==tools.apply(setting.callback.beforeAsync,[setting.treeId,node],!0))return tools.apply(callback),!1;if(node){node.isAjaxing=!0;var icoObj=$$(node,consts.id.ICON,setting);icoObj.attr({style:"",class:consts.className.BUTTON+" "+consts.className.ICO_LOADING})}var tmpParam={},autoParam=tools.apply(setting.async.autoParam,[setting.treeId,node],setting.async.autoParam);for(i=0,l=autoParam.length;node&&i<l;i++){var pKey=autoParam[i].split("="),spKey=pKey;1<pKey.length&&(spKey=pKey[1],pKey=pKey[0]),tmpParam[spKey]=node[pKey]}var otherParam=tools.apply(setting.async.otherParam,[setting.treeId,node],setting.async.otherParam);if(tools.isArray(otherParam))for(i=0,l=otherParam.length;i<l;i+=2)tmpParam[otherParam[i]]=otherParam[i+1];else for(var p in otherParam)tmpParam[p]=otherParam[p];var _tmpV=data.getRoot(setting)._ver;return $.ajax({contentType:setting.async.contentType,cache:!1,type:setting.async.type,url:tools.apply(setting.async.url,[setting.treeId,node],setting.async.url),data:-1<setting.async.contentType.indexOf("application/json")?JSON.stringify(tmpParam):tmpParam,dataType:setting.async.dataType,headers:setting.async.headers,xhrFields:setting.async.xhrFields,success:function(msg){if(_tmpV==data.getRoot(setting)._ver){var newNodes=[];try{newNodes=msg&&0!=msg.length?"string"==typeof msg?eval("("+msg+")"):msg:[]}catch(e){newNodes=msg}node&&(node.isAjaxing=null,node.zAsync=!0),view.setNodeLineIcos(setting,node),newNodes&&""!==newNodes?(newNodes=tools.apply(setting.async.dataFilter,[setting.treeId,node,newNodes],newNodes),view.addNodes(setting,node,-1,newNodes?tools.clone(newNodes):[],!!isSilent)):view.addNodes(setting,node,-1,[],!!isSilent),setting.treeObj.trigger(consts.event.ASYNC_SUCCESS,[setting.treeId,node,msg]),tools.apply(callback)}},error:function(e,t,n){_tmpV==data.getRoot(setting)._ver&&(node&&(node.isAjaxing=null),view.setNodeLineIcos(setting,node),setting.treeObj.trigger(consts.event.ASYNC_ERROR,[setting.treeId,node,e,t,n]))}}),!0},cancelPreSelectedNode:function(e,t,n){var o,a,r=data.getRoot(e).curSelectedList;for(o=r.length-1;0<=o;o--)if(t===(a=r[o])||!t&&(!n||n!==a)){if($$(a,consts.id.A,e).removeClass(consts.node.CURSELECTED),t){data.removeSelectedNode(e,t);break}r.splice(o,1),e.treeObj.trigger(consts.event.UNSELECTED,[e.treeId,a])}},createNodeCallback:function(e){if(e.callback.onNodeCreated||e.view.addDiyDom)for(var t=data.getRoot(e);0<t.createdNodes.length;){var n=t.createdNodes.shift();tools.apply(e.view.addDiyDom,[e.treeId,n]),e.callback.onNodeCreated&&e.treeObj.trigger(consts.event.NODECREATED,[e.treeId,n])}},createNodes:function(e,t,n,o,a){if(n&&0!=n.length){var r=data.getRoot(e),d=!o||o.open||!!$$(data.nodeChildren(e,o)[0],e).get(0);r.createdNodes=[];var i,s,l=view.appendNodes(e,t,n,o,a,!0,d);if(o){var c=$$(o,consts.id.UL,e);c.get(0)&&(i=c)}else i=e.treeObj;i&&(0<=a&&(s=i.children()[a]),0<=a&&s?$(s).before(l.join("")):i.append(l.join(""))),view.createNodeCallback(e)}},destroy:function(e){e&&(data.initCache(e),data.initRoot(e),event.unbindTree(e),event.unbindEvent(e),e.treeObj.empty(),delete settings[e.treeId])},expandCollapseNode:function(e,t,n,o,a){var r,d=data.getRoot(e);if(t){var i=data.nodeChildren(e,t),s=data.nodeIsParent(e,t);if(d.expandTriggerFlag&&(r=a,a=function(){r&&r(),t.open?e.treeObj.trigger(consts.event.EXPAND,[e.treeId,t]):e.treeObj.trigger(consts.event.COLLAPSE,[e.treeId,t])},d.expandTriggerFlag=!1),!t.open&&s&&(!$$(t,consts.id.UL,e).get(0)||i&&0<i.length&&!$$(i[0],e).get(0))&&(view.appendParentULDom(e,t),view.createNodeCallback(e)),t.open!=n){var l=$$(t,consts.id.UL,e),c=$$(t,consts.id.SWITCH,e),u=$$(t,consts.id.ICON,e);s?(t.open=!t.open,t.iconOpen&&t.iconClose&&u.attr("style",view.makeNodeIcoStyle(e,t)),t.open?(view.replaceSwitchClass(t,c,consts.folder.OPEN),view.replaceIcoClass(t,u,consts.folder.OPEN),0==o||""==e.view.expandSpeed?(l.show(),tools.apply(a,[])):i&&0<i.length?l.slideDown(e.view.expandSpeed,a):(l.show(),tools.apply(a,[]))):(view.replaceSwitchClass(t,c,consts.folder.CLOSE),view.replaceIcoClass(t,u,consts.folder.CLOSE),0!=o&&""!=e.view.expandSpeed&&i&&0<i.length?l.slideUp(e.view.expandSpeed,a):(l.hide(),tools.apply(a,[])))):tools.apply(a,[])}else tools.apply(a,[])}else tools.apply(a,[])},expandCollapseParentNode:function(e,t,n,o,a){t&&(t.parentTId?(view.expandCollapseNode(e,t,n,o),t.parentTId&&view.expandCollapseParentNode(e,t.getParentNode(),n,o,a)):view.expandCollapseNode(e,t,n,o,a))},expandCollapseSonNode:function(e,t,n,o,a){var r=data.getRoot(e),d=t?data.nodeChildren(e,t):data.nodeChildren(e,r),i=!t&&o,s=data.getRoot(e).expandTriggerFlag;if(data.getRoot(e).expandTriggerFlag=!1,d)for(var l=0,c=d.length;l<c;l++)d[l]&&view.expandCollapseSonNode(e,d[l],n,i);data.getRoot(e).expandTriggerFlag=s,view.expandCollapseNode(e,t,n,o,a)},isSelectedNode:function(e,t){if(!t)return!1;var n,o=data.getRoot(e).curSelectedList;for(n=o.length-1;0<=n;n--)if(t===o[n])return!0;return!1},makeDOMNodeIcon:function(e,t,n){var o=data.nodeName(t,n),a=t.view.nameIsHTML?o:o.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");e.push("<span id='",n.tId,consts.id.ICON,"' title='' treeNode",consts.id.ICON," class='",view.makeNodeIcoClass(t,n),"' style='",view.makeNodeIcoStyle(t,n),"'></span><span id='",n.tId,consts.id.SPAN,"' class='",consts.className.NAME,"'>",a,"</span>")},makeDOMNodeLine:function(e,t,n){e.push("<span id='",n.tId,consts.id.SWITCH,"' title='' class='",view.makeNodeLineClass(t,n),"' treeNode",consts.id.SWITCH,"></span>")},makeDOMNodeMainAfter:function(e,t,n){e.push("</li>")},makeDOMNodeMainBefore:function(e,t,n){e.push("<li id='",n.tId,"' class='",consts.className.LEVEL,n.level,"' tabindex='0' hidefocus='true' treenode>")},makeDOMNodeNameAfter:function(e,t,n){e.push("</a>")},makeDOMNodeNameBefore:function(e,t,n){var o=data.nodeTitle(t,n),a=view.makeNodeUrl(t,n),r=view.makeNodeFontCss(t,n),d=view.makeNodeClasses(t,n),i=[];for(var s in r)i.push(s,":",r[s],";");e.push("<a id='",n.tId,consts.id.A,"' class='",consts.className.LEVEL,n.level,d.add?" "+d.add.join(" "):"","' treeNode",consts.id.A,' onclick="',n.click||"",'" ',null!=a&&0<a.length?"href='"+a+"'":""," target='",view.makeNodeTarget(n),"' style='",i.join(""),"'"),tools.apply(t.view.showTitle,[t.treeId,n],t.view.showTitle)&&o&&e.push("title='",o.replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">"),"'"),e.push(">")},makeNodeFontCss:function(e,t){var n=tools.apply(e.view.fontCss,[e.treeId,t],e.view.fontCss);return n&&"function"!=typeof n?n:{}},makeNodeClasses:function(e,t){var n=tools.apply(e.view.nodeClasses,[e.treeId,t],e.view.nodeClasses);return n&&"function"!=typeof n?n:{add:[],remove:[]}},makeNodeIcoClass:function(e,t){var n=["ico"];if(!t.isAjaxing){var o=data.nodeIsParent(e,t);n[0]=(t.iconSkin?t.iconSkin+"_":"")+n[0],o?n.push(t.open?consts.folder.OPEN:consts.folder.CLOSE):n.push(consts.folder.DOCU)}return consts.className.BUTTON+" "+n.join("_")},makeNodeIcoStyle:function(e,t){var n=[];if(!t.isAjaxing){var o=data.nodeIsParent(e,t)&&t.iconOpen&&t.iconClose?t.open?t.iconOpen:t.iconClose:t[e.data.key.icon];o&&n.push("background:url(",o,") 0 0 no-repeat;"),0!=e.view.showIcon&&tools.apply(e.view.showIcon,[e.treeId,t],!0)||n.push("display:none;")}return n.join("")},makeNodeLineClass:function(e,t){var n=[];return e.view.showLine?0==t.level&&t.isFirstNode&&t.isLastNode?n.push(consts.line.ROOT):0==t.level&&t.isFirstNode?n.push(consts.line.ROOTS):t.isLastNode?n.push(consts.line.BOTTOM):n.push(consts.line.CENTER):n.push(consts.line.NOLINE),data.nodeIsParent(e,t)?n.push(t.open?consts.folder.OPEN:consts.folder.CLOSE):n.push(consts.folder.DOCU),view.makeNodeLineClassEx(t)+n.join("_")},makeNodeLineClassEx:function(e){return consts.className.BUTTON+" "+consts.className.LEVEL+e.level+" "+consts.className.SWITCH+" "},makeNodeTarget:function(e){return e.target||"_blank"},makeNodeUrl:function(e,t){var n=e.data.key.url;return t[n]?t[n]:null},makeUlHtml:function(e,t,n,o){n.push("<ul id='",t.tId,consts.id.UL,"' class='",consts.className.LEVEL,t.level," ",view.makeUlLineClass(e,t),"' style='display:",t.open?"block":"none","'>"),n.push(o),n.push("</ul>")},makeUlLineClass:function(e,t){return e.view.showLine&&!t.isLastNode?consts.line.LINE:""},removeChildNodes:function(e,t){if(t){var n=data.nodeChildren(e,t);if(n){for(var o=0,a=n.length;o<a;o++)data.removeNodeCache(e,n[o]);if(data.removeSelectedNode(e),delete t[e.data.key.children],e.data.keep.parent)$$(t,consts.id.UL,e).empty();else{data.nodeIsParent(e,t,!1),t.open=!1;var r=$$(t,consts.id.SWITCH,e),d=$$(t,consts.id.ICON,e);view.replaceSwitchClass(t,r,consts.folder.DOCU),view.replaceIcoClass(t,d,consts.folder.DOCU),$$(t,consts.id.UL,e).remove()}}}},scrollIntoView:function(e,t){if(t)if("undefined"!=typeof Element&&"undefined"!=typeof HTMLElement)Element.prototype.scrollIntoViewIfNeeded||(Element.prototype.scrollIntoViewIfNeeded=function(n){"use strict";function e(e,t){return{start:e,length:t,end:e+t}}function t(e,t){return!1===n||t.start<e.end&&e.start<t.end?Math.max(e.end-t.length,Math.min(t.start,e.start)):(e.start+e.end-t.length)/2}function a(n,o){return{x:n,y:o,translate:function(e,t){return a(n+e,o+t)}}}function o(e,t){for(;e;)t=t.translate(e.offsetLeft,e.offsetTop),e=e.offsetParent;return t}for(var r,d=o(this,a(0,0)),i=a(this.offsetWidth,this.offsetHeight),s=this.parentNode;s instanceof HTMLElement;)r=o(s,a(s.clientLeft,s.clientTop)),s.scrollLeft=t(e(d.x-r.x,i.x),e(s.scrollLeft,s.clientWidth)),s.scrollTop=t(e(d.y-r.y,i.y),e(s.scrollTop,s.clientHeight)),d=d.translate(-s.scrollLeft,-s.scrollTop),s=s.parentNode}),t.scrollIntoViewIfNeeded();else{var n=e.treeObj.get(0).getBoundingClientRect(),o=t.getBoundingClientRect();(o.top<n.top||o.bottom>n.bottom||o.right>n.right||o.left<n.left)&&t.scrollIntoView()}},setFirstNode:function(e,t){var n=data.nodeChildren(e,t);0<n.length&&(n[0].isFirstNode=!0)},setLastNode:function(e,t){var n=data.nodeChildren(e,t);0<n.length&&(n[n.length-1].isLastNode=!0)},removeNode:function(e,t){var n=data.getRoot(e),o=t.parentTId?t.getParentNode():n;if(t.isFirstNode=!1,t.isLastNode=!1,t.getPreNode=function(){return null},t.getNextNode=function(){return null},data.getNodeCache(e,t.tId)){$$(t,e).remove(),data.removeNodeCache(e,t),data.removeSelectedNode(e,t);for(var a=data.nodeChildren(e,o),r=0,d=a.length;r<d;r++)if(a[r].tId==t.tId){a.splice(r,1);break}view.setFirstNode(e,o),view.setLastNode(e,o);var i,s,l,c=a.length;if(e.data.keep.parent||0!=c){if(e.view.showLine&&0<c){var u=a[c-1];if(i=$$(u,consts.id.UL,e),s=$$(u,consts.id.SWITCH,e),l=$$(u,consts.id.ICON,e),o==n)if(1==a.length)view.replaceSwitchClass(u,s,consts.line.ROOT);else{var p=$$(a[0],consts.id.SWITCH,e);view.replaceSwitchClass(a[0],p,consts.line.ROOTS),view.replaceSwitchClass(u,s,consts.line.BOTTOM)}else view.replaceSwitchClass(u,s,consts.line.BOTTOM);i.removeClass(consts.line.LINE)}}else data.nodeIsParent(e,o,!1),o.open=!1,delete o[e.data.key.children],i=$$(o,consts.id.UL,e),s=$$(o,consts.id.SWITCH,e),l=$$(o,consts.id.ICON,e),view.replaceSwitchClass(o,s,consts.folder.DOCU),view.replaceIcoClass(o,l,consts.folder.DOCU),i.css("display","none")}},replaceIcoClass:function(e,t,n){if(t&&!e.isAjaxing){var o=t.attr("class");if(null!=o){var a=o.split("_");switch(n){case consts.folder.OPEN:case consts.folder.CLOSE:case consts.folder.DOCU:a[a.length-1]=n}t.attr("class",a.join("_"))}}},replaceSwitchClass:function(e,t,n){if(t){var o=t.attr("class");if(null!=o){var a=o.split("_");switch(n){case consts.line.ROOT:case consts.line.ROOTS:case consts.line.CENTER:case consts.line.BOTTOM:case consts.line.NOLINE:a[0]=view.makeNodeLineClassEx(e)+n;break;case consts.folder.OPEN:case consts.folder.CLOSE:case consts.folder.DOCU:a[1]=n}t.attr("class",a.join("_")),n!==consts.folder.DOCU?t.removeAttr("disabled"):t.attr("disabled","disabled")}}},selectNode:function(e,t,n){n||view.cancelPreSelectedNode(e,null,t),$$(t,consts.id.A,e).addClass(consts.node.CURSELECTED),data.addSelectedNode(e,t),e.treeObj.trigger(consts.event.SELECTED,[e.treeId,t])},setNodeFontCss:function(e,t){var n=$$(t,consts.id.A,e),o=view.makeNodeFontCss(e,t);o&&n.css(o)},setNodeClasses:function(e,t){var n=$$(t,consts.id.A,e),o=view.makeNodeClasses(e,t);"add"in o&&o.add.length&&n.addClass(o.add.join(" ")),"remove"in o&&o.remove.length&&n.removeClass(o.remove.join(" "))},setNodeLineIcos:function(e,t){if(t){var n=$$(t,consts.id.SWITCH,e),o=$$(t,consts.id.UL,e),a=$$(t,consts.id.ICON,e),r=view.makeUlLineClass(e,t);0==r.length?o.removeClass(consts.line.LINE):o.addClass(r),n.attr("class",view.makeNodeLineClass(e,t)),data.nodeIsParent(e,t)?n.removeAttr("disabled"):n.attr("disabled","disabled"),a.removeAttr("style"),a.attr("style",view.makeNodeIcoStyle(e,t)),a.attr("class",view.makeNodeIcoClass(e,t))}},setNodeName:function(e,t){var n=data.nodeTitle(e,t),o=$$(t,consts.id.SPAN,e);o.empty(),e.view.nameIsHTML?o.html(data.nodeName(e,t)):o.text(data.nodeName(e,t)),tools.apply(e.view.showTitle,[e.treeId,t],e.view.showTitle)&&$$(t,consts.id.A,e).attr("title",n||"")},setNodeTarget:function(e,t){$$(t,consts.id.A,e).attr("target",view.makeNodeTarget(t))},setNodeUrl:function(e,t){var n=$$(t,consts.id.A,e),o=view.makeNodeUrl(e,t);null==o||0==o.length?n.removeAttr("href"):n.attr("href",o)},switchNode:function(e,t){if(t.open||!tools.canAsync(e,t))view.expandCollapseNode(e,t,!t.open);else if(e.async.enable){if(!view.asyncNode(e,t))return void view.expandCollapseNode(e,t,!t.open)}else t&&view.expandCollapseNode(e,t,!t.open)}};$.fn.zTree={consts:_consts,_z:{tools:tools,view:view,event:event,data:data},getZTreeObj:function(e){var t=data.getZTreeTools(e);return t||null},destroy:function(e){if(e&&0<e.length)view.destroy(data.getSetting(e));else for(var t in settings)view.destroy(settings[t])},init:function(e,t,n){var s=tools.clone(_setting);$.extend(!0,s,t),s.treeId=e.attr("id"),s.treeObj=e,s.treeObj.empty(),settings[s.treeId]=s,void 0===document.body.style.maxHeight&&(s.view.expandSpeed=""),data.initRoot(s);var o=data.getRoot(s);n=n?tools.clone(tools.isArray(n)?n:[n]):[],s.data.simpleData.enable?data.nodeChildren(s,o,data.transformTozTreeFormat(s,n)):data.nodeChildren(s,o,n),data.initCache(s),event.unbindTree(s),event.bindTree(s),event.unbindEvent(s),event.bindEvent(s);var r={setting:s,addNodes:function(e,t,n,o){e=e||null;var a=data.nodeIsParent(s,e);if(e&&!a&&s.data.keep.leaf)return null;var r=parseInt(t,10);if(t=isNaN(r)?(o=!!n,n=t,-1):r,!n)return null;var d=tools.clone(tools.isArray(n)?n:[n]);function i(){view.addNodes(s,e,t,d,1==o)}return tools.canAsync(s,e)?view.asyncNode(s,e,o,i):i(),d},cancelSelectedNode:function(e){view.cancelPreSelectedNode(s,e)},destroy:function(){view.destroy(s)},expandAll:function(e){return e=!!e,view.expandCollapseSonNode(s,null,e,!0),e},expandNode:function(t,e,n,o,a){return t&&data.nodeIsParent(s,t)?(!0!==e&&!1!==e&&(e=!t.open),(a=!!a)&&e&&0==tools.apply(s.callback.beforeExpand,[s.treeId,t],!0)||a&&!e&&0==tools.apply(s.callback.beforeCollapse,[s.treeId,t],!0)?null:(e&&t.parentTId&&view.expandCollapseParentNode(s,t.getParentNode(),e,!1),e!==t.open||n?(data.getRoot(s).expandTriggerFlag=a,!tools.canAsync(s,t)&&n?view.expandCollapseSonNode(s,t,e,!0,r):(t.open=!e,view.switchNode(this.setting,t),r()),e):null)):null;function r(){var e=$$(t,s).get(0);e&&!1!==o&&view.scrollIntoView(s,e)}},getNodes:function(){return data.getNodes(s)},getNodeByParam:function(e,t,n){return e?data.getNodeByParam(s,n?data.nodeChildren(s,n):data.getNodes(s),e,t):null},getNodeByTId:function(e){return data.getNodeCache(s,e)},getNodesByParam:function(e,t,n){return e?data.getNodesByParam(s,n?data.nodeChildren(s,n):data.getNodes(s),e,t):null},getNodesByParamFuzzy:function(e,t,n){return e?data.getNodesByParamFuzzy(s,n?data.nodeChildren(s,n):data.getNodes(s),e,t):null},getNodesByFilter:function(e,t,n,o){return t=!!t,e&&"function"==typeof e?data.getNodesByFilter(s,n?data.nodeChildren(s,n):data.getNodes(s),e,t,o):t?null:[]},getNodeIndex:function(e){if(!e)return null;for(var t=e.parentTId?e.getParentNode():data.getRoot(s),n=data.nodeChildren(s,t),o=0,a=n.length;o<a;o++)if(n[o]==e)return o;return-1},getSelectedNodes:function(){for(var e=[],t=data.getRoot(s).curSelectedList,n=0,o=t.length;n<o;n++)e.push(t[n]);return e},isSelectedNode:function(e){return data.isSelectedNode(s,e)},reAsyncChildNodesPromise:function(n,o,a){return new Promise(function(e,t){try{r.reAsyncChildNodes(n,o,a,function(){e(n)})}catch(e){t(e)}})},reAsyncChildNodes:function(e,t,n,o){if(this.setting.async.enable){var a=!e;if(a&&(e=data.getRoot(s)),"refresh"==t){for(var r=data.nodeChildren(s,e),d=0,i=r?r.length:0;d<i;d++)data.removeNodeCache(s,r[d]);if(data.removeSelectedNode(s),data.nodeChildren(s,e,[]),a)this.setting.treeObj.empty();else $$(e,consts.id.UL,s).empty()}view.asyncNode(this.setting,a?null:e,!!n,o)}},refresh:function(){this.setting.treeObj.empty();var e=data.getRoot(s),t=data.nodeChildren(s,e);data.initRoot(s),data.nodeChildren(s,e,t),data.initCache(s),view.createNodes(s,0,data.nodeChildren(s,e),null,-1)},removeChildNodes:function(e){if(!e)return null;var t=data.nodeChildren(s,e);return view.removeChildNodes(s,e),t||null},removeNode:function(e,t){e&&((t=!!t)&&0==tools.apply(s.callback.beforeRemove,[s.treeId,e],!0)||(view.removeNode(s,e),t&&this.setting.treeObj.trigger(consts.event.REMOVE,[s.treeId,e])))},selectNode:function(t,e,n){if(t&&tools.uCanDo(s)){if(e=s.view.selectedMulti&&e,t.parentTId)view.expandCollapseParentNode(s,t.getParentNode(),!0,!1,function(){if(n)return;var e=$$(t,s).get(0);view.scrollIntoView(s,e)});else if(!n)try{$$(t,s).focus().blur()}catch(e){}view.selectNode(s,t,e)}},transformTozTreeNodes:function(e){return data.transformTozTreeFormat(s,e)},transformToArray:function(e){return data.transformToArrayFormat(s,e)},updateNode:function(e,t){e&&$$(e,s).get(0)&&tools.uCanDo(s)&&(view.setNodeName(s,e),view.setNodeTarget(s,e),view.setNodeUrl(s,e),view.setNodeLineIcos(s,e),view.setNodeFontCss(s,e),view.setNodeClasses(s,e))}};o.treeTools=r,data.setZTreeTools(s,r);var a=data.nodeChildren(s,o);return a&&0<a.length?view.createNodes(s,0,a,null,-1):s.async.enable&&s.async.url&&""!==s.async.url&&view.asyncNode(s),r}};var zt=$.fn.zTree,$$=tools.$,consts=zt.consts}(jQuery);
+!function(e){var t={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},c={check:{enable:!1,autoCheckTrigger:!1,chkStyle:t.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:t.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}},r={onCheckNode:function(e,t){if(!0===t.chkDisabled)return!1;var c=C.getSetting(e.data.treeId);if(0==o.apply(c.callback.beforeCheck,[c.treeId,t],!0))return!0;var h=C.nodeChecked(c,t);C.nodeChecked(c,t,!h),l.checkNodeRelation(c,t);var a=f(t,s.id.CHECK,c);return l.setChkClass(c,a,t),l.repairParentChkClassWithSelf(c,t),c.treeObj.trigger(s.event.CHECK,[e,c.treeId,t]),!0},onMouseoverCheck:function(e,t){if(!0===t.chkDisabled)return!1;var c=C.getSetting(e.data.treeId),h=f(t,s.id.CHECK,c);return t.check_Focus=!0,l.setChkClass(c,h,t),!0},onMouseoutCheck:function(e,t){if(!0===t.chkDisabled)return!1;var c=C.getSetting(e.data.treeId),h=f(t,s.id.CHECK,c);return t.check_Focus=!1,l.setChkClass(c,h,t),!0}},h={tools:{},view:{checkNodeRelation:function(e,t){var c,h,a,n=s.radio,i=C.nodeChecked(e,t);if(e.check.chkStyle==n.STYLE){var r=C.getRadioCheckedList(e);if(i)if(e.check.radioType==n.TYPE_ALL){for(h=r.length-1;0<=h;h--){c=r[h],C.nodeChecked(e,c)&&c!=t&&(C.nodeChecked(e,c,!1),r.splice(h,1),l.setChkClass(e,f(c,s.id.CHECK,e),c),c.parentTId!=t.parentTId&&l.repairParentChkClassWithSelf(e,c))}r.push(t)}else{var o=t.parentTId?t.getParentNode():C.getRoot(e);for(h=0,a=(d=C.nodeChildren(e,o)).length;h<a;h++){c=d[h],C.nodeChecked(e,c)&&c!=t&&(C.nodeChecked(e,c,!1),l.setChkClass(e,f(c,s.id.CHECK,e),c))}}else if(e.check.radioType==n.TYPE_ALL)for(h=0,a=r.length;h<a;h++)if(t==r[h]){r.splice(h,1);break}}else{var d=C.nodeChildren(e,t);i&&(!d||0==d.length||-1<e.check.chkboxType.Y.indexOf("s"))&&l.setSonNodeCheckBox(e,t,!0),i||d&&0!=d.length&&!(-1<e.check.chkboxType.N.indexOf("s"))||l.setSonNodeCheckBox(e,t,!1),i&&-1<e.check.chkboxType.Y.indexOf("p")&&l.setParentNodeCheckBox(e,t,!0),!i&&-1<e.check.chkboxType.N.indexOf("p")&&l.setParentNodeCheckBox(e,t,!1)}},makeChkClass:function(e,t){var c=s.checkbox,h=s.radio,a="",n=C.nodeChecked(e,t);a=!0===t.chkDisabled?c.DISABLED:t.halfCheck?c.PART:e.check.chkStyle==h.STYLE?t.check_Child_State<1?c.FULL:c.PART:n?2===t.check_Child_State||-1===t.check_Child_State?c.FULL:c.PART:t.check_Child_State<1?c.FULL:c.PART;var i=e.check.chkStyle+"_"+(n?c.TRUE:c.FALSE)+"_"+a;return i=t.check_Focus&&!0!==t.chkDisabled?i+"_"+c.FOCUS:i,s.className.BUTTON+" "+c.DEFAULT+" "+i},repairAllChk:function(e,t){if(e.check.enable&&e.check.chkStyle===s.checkbox.STYLE)for(var c=C.getRoot(e),h=C.nodeChildren(e,c),a=0,n=h.length;a<n;a++){var i=h[a];!0!==i.nocheck&&!0!==i.chkDisabled&&C.nodeChecked(e,i,t),l.setSonNodeCheckBox(e,i,t)}},repairChkClass:function(e,t){if(t&&(C.makeChkFlag(e,t),!0!==t.nocheck)){var c=f(t,s.id.CHECK,e);l.setChkClass(e,c,t)}},repairParentChkClass:function(e,t){if(t&&t.parentTId){var c=t.getParentNode();l.repairChkClass(e,c),l.repairParentChkClass(e,c)}},repairParentChkClassWithSelf:function(e,t){if(t){var c=C.nodeChildren(e,t);c&&0<c.length?l.repairParentChkClass(e,c[0]):l.repairParentChkClass(e,t)}},repairSonChkDisabled:function(e,t,c,h){if(t){t.chkDisabled!=c&&(t.chkDisabled=c),l.repairChkClass(e,t);var a=C.nodeChildren(e,t);if(a&&h)for(var n=0,i=a.length;n<i;n++){var r=a[n];l.repairSonChkDisabled(e,r,c,h)}}},repairParentChkDisabled:function(e,t,c,h){t&&(t.chkDisabled!=c&&h&&(t.chkDisabled=c),l.repairChkClass(e,t),l.repairParentChkDisabled(e,t.getParentNode(),c,h))},setChkClass:function(e,t,c){t&&(!0===c.nocheck?t.hide():t.show(),t.attr("class",l.makeChkClass(e,c)))},setParentNodeCheckBox:function(e,t,c,h){var a=f(t,s.id.CHECK,e);if(h=h||t,C.makeChkFlag(e,t),!0!==t.nocheck&&!0!==t.chkDisabled&&(C.nodeChecked(e,t,c),l.setChkClass(e,a,t),e.check.autoCheckTrigger&&t!=h&&e.treeObj.trigger(s.event.CHECK,[null,e.treeId,t])),t.parentTId){var n=!0;if(!c)for(var i=C.nodeChildren(e,t.getParentNode()),r=0,o=i.length;r<o;r++){var d=i[r],k=C.nodeChecked(e,d);if(!0!==d.nocheck&&!0!==d.chkDisabled&&k||(!0===d.nocheck||!0===d.chkDisabled)&&0<d.check_Child_State){n=!1;break}}n&&l.setParentNodeCheckBox(e,t.getParentNode(),c,h)}},setSonNodeCheckBox:function(e,t,c,h){if(t){var a=f(t,s.id.CHECK,e);h=h||t;var n=!1,i=C.nodeChildren(e,t);if(i)for(var r=0,o=i.length;r<o;r++){var d=i[r];l.setSonNodeCheckBox(e,d,c,h),!0===d.chkDisabled&&(n=!0)}t!=C.getRoot(e)&&!0!==t.chkDisabled&&(n&&!0!==t.nocheck&&C.makeChkFlag(e,t),!0!==t.nocheck&&!0!==t.chkDisabled?(C.nodeChecked(e,t,c),n||(t.check_Child_State=i&&0<i.length?c?2:0:-1)):t.check_Child_State=-1,l.setChkClass(e,a,t),e.check.autoCheckTrigger&&t!=h&&!0!==t.nocheck&&!0!==t.chkDisabled&&e.treeObj.trigger(s.event.CHECK,[null,e.treeId,t]))}}},event:{},data:{getRadioCheckedList:function(e){for(var t=C.getRoot(e).radioCheckedList,c=0,h=t.length;c<h;c++)C.getNodeCache(e,t[c].tId)||(t.splice(c,1),c--,h--);return t},getCheckStatus:function(e,t){if(!e.check.enable||t.nocheck||t.chkDisabled)return null;var c=C.nodeChecked(e,t);return{checked:c,half:t.halfCheck?t.halfCheck:e.check.chkStyle==s.radio.STYLE?2===t.check_Child_State:c?-1<t.check_Child_State&&t.check_Child_State<2:0<t.check_Child_State}},getTreeCheckedNodes:function(e,t,c,h){if(!t)return[];var a=c&&e.check.chkStyle==s.radio.STYLE&&e.check.radioType==s.radio.TYPE_ALL;h=h||[];for(var n=0,i=t.length;n<i;n++){var r=t[n],o=C.nodeChildren(e,r),d=C.nodeChecked(e,r);if(!0!==r.nocheck&&!0!==r.chkDisabled&&d==c&&(h.push(r),a))break;if(C.getTreeCheckedNodes(e,o,c,h),a&&0<h.length)break}return h},getTreeChangeCheckedNodes:function(e,t,c){if(!t)return[];c=c||[];for(var h=0,a=t.length;h<a;h++){var n=t[h],i=C.nodeChildren(e,n),r=C.nodeChecked(e,n);!0!==n.nocheck&&!0!==n.chkDisabled&&r!=n.checkedOld&&c.push(n),C.getTreeChangeCheckedNodes(e,i,c)}return c},makeChkFlag:function(e,t){if(t){var c=-1,h=C.nodeChildren(e,t);if(h)for(var a=0,n=h.length;a<n;a++){var i=h[a],r=C.nodeChecked(e,i),o=-1;if(e.check.chkStyle==s.radio.STYLE){if(2==(o=!0===i.nocheck||!0===i.chkDisabled?i.check_Child_State:!0===i.halfCheck||r||0<i.check_Child_State?2:0)){c=2;break}0==o&&(c=0)}else if(e.check.chkStyle==s.checkbox.STYLE){if(1===(o=!0===i.nocheck||!0===i.chkDisabled?i.check_Child_State:!0===i.halfCheck?1:r?-1===i.check_Child_State||2===i.check_Child_State?2:1:0<i.check_Child_State?1:0)){c=1;break}if(2===o&&-1<c&&0<a&&o!==c){c=1;break}if(2===c&&-1<o&&o<2){c=1;break}-1<o&&(c=o)}}t.check_Child_State=c}}}};e.extend(!0,e.fn.zTree.consts,t),e.extend(!0,e.fn.zTree._z,h);var a=e.fn.zTree,o=a._z.tools,s=a.consts,l=a._z.view,C=a._z.data,f=(a._z.event,o.$);C.nodeChecked=function(e,t,c){if(!t)return!1;var h=e.data.key.checked;return void 0!==c?("string"==typeof c&&(c=o.eqs(c,"true")),c=!!c,t[h]=c):"string"==typeof t[h]?t[h]=o.eqs(t[h],"true"):t[h]=!!t[h],t[h]},C.exSetting(c),C.addInitBind(function(a){var e=a.treeObj,t=s.event;e.bind(t.CHECK,function(e,t,c,h){e.srcEvent=t,o.apply(a.callback.onCheck,[e,c,h])})}),C.addInitUnBind(function(e){var t=e.treeObj,c=s.event;t.unbind(c.CHECK)}),C.addInitCache(function(e){}),C.addInitNode(function(e,t,c,h,a,n,i){if(c){var r=C.nodeChecked(e,c);if(c.checkedOld=r,"string"==typeof c.nocheck&&(c.nocheck=o.eqs(c.nocheck,"true")),c.nocheck=!!c.nocheck||e.check.nocheckInherit&&h&&!!h.nocheck,"string"==typeof c.chkDisabled&&(c.chkDisabled=o.eqs(c.chkDisabled,"true")),c.chkDisabled=!!c.chkDisabled||e.check.chkDisabledInherit&&h&&!!h.chkDisabled,"string"==typeof c.halfCheck&&(c.halfCheck=o.eqs(c.halfCheck,"true")),c.halfCheck=!!c.halfCheck,c.check_Child_State=-1,c.check_Focus=!1,c.getCheckStatus=function(){return C.getCheckStatus(e,c)},e.check.chkStyle==s.radio.STYLE&&e.check.radioType==s.radio.TYPE_ALL&&r)C.getRoot(e).radioCheckedList.push(c)}}),C.addInitProxy(function(e){var t=e.target,c=C.getSetting(e.data.treeId),h="",a=null,n="",i=null;if(o.eqs(e.type,"mouseover")?c.check.enable&&o.eqs(t.tagName,"span")&&null!==t.getAttribute("treeNode"+s.id.CHECK)&&(h=o.getNodeMainDom(t).id,n="mouseoverCheck"):o.eqs(e.type,"mouseout")?c.check.enable&&o.eqs(t.tagName,"span")&&null!==t.getAttribute("treeNode"+s.id.CHECK)&&(h=o.getNodeMainDom(t).id,n="mouseoutCheck"):o.eqs(e.type,"click")&&c.check.enable&&o.eqs(t.tagName,"span")&&null!==t.getAttribute("treeNode"+s.id.CHECK)&&(h=o.getNodeMainDom(t).id,n="checkNode"),0<h.length)switch(a=C.getNodeCache(c,h),n){case"checkNode":i=r.onCheckNode;break;case"mouseoverCheck":i=r.onMouseoverCheck;break;case"mouseoutCheck":i=r.onMouseoutCheck}return{stop:"checkNode"===n,node:a,nodeEventType:n,nodeEventCallback:i,treeEventType:"",treeEventCallback:null}},!0),C.addInitRoot(function(e){C.getRoot(e).radioCheckedList=[]}),C.addBeforeA(function(e,t,c){e.check.enable&&(C.makeChkFlag(e,t),c.push("<span ID='",t.tId,s.id.CHECK,"' class='",l.makeChkClass(e,t),"' treeNode",s.id.CHECK,!0===t.nocheck?" style='display:none;'":"","></span>"))}),C.addZTreeTools(function(i,h){h.checkNode=function(e,t,c,h){var a=C.nodeChecked(i,e);if(!0!==e.chkDisabled&&(!0!==t&&!1!==t&&(t=!a),h=!!h,(a!==t||c)&&(!h||0!=o.apply(this.setting.callback.beforeCheck,[this.setting.treeId,e],!0))&&o.uCanDo(this.setting)&&this.setting.check.enable&&!0!==e.nocheck)){C.nodeChecked(i,e,t);var n=f(e,s.id.CHECK,this.setting);!c&&this.setting.check.chkStyle!==s.radio.STYLE||l.checkNodeRelation(this.setting,e),l.setChkClass(this.setting,n,e),l.repairParentChkClassWithSelf(this.setting,e),h&&this.setting.treeObj.trigger(s.event.CHECK,[null,this.setting.treeId,e])}},h.checkAllNodes=function(e){l.repairAllChk(this.setting,!!e)},h.getCheckedNodes=function(e){e=!1!==e;var t=C.nodeChildren(i,C.getRoot(this.setting));return C.getTreeCheckedNodes(this.setting,t,e)},h.getChangeCheckedNodes=function(){var e=C.nodeChildren(i,C.getRoot(this.setting));return C.getTreeChangeCheckedNodes(this.setting,e)},h.setChkDisabled=function(e,t,c,h){t=!!t,c=!!c,h=!!h,l.repairSonChkDisabled(this.setting,e,t,h),l.repairParentChkDisabled(this.setting,e.getParentNode(),t,c)};var a=h.updateNode;h.updateNode=function(e,t){if((a&&a.apply(h,arguments),e&&this.setting.check.enable)&&(f(e,this.setting).get(0)&&o.uCanDo(this.setting))){var c=f(e,s.id.CHECK,this.setting);1!=t&&this.setting.check.chkStyle!==s.radio.STYLE||l.checkNodeRelation(this.setting,e),l.setChkClass(this.setting,c,e),l.repairParentChkClassWithSelf(this.setting,e)}}});var n=l.createNodes;l.createNodes=function(e,t,c,h,a){n&&n.apply(l,arguments),c&&l.repairParentChkClassWithSelf(e,h)};var i=l.removeNode;l.removeNode=function(e,t){var c=t.getParentNode();i&&i.apply(l,arguments),t&&c&&(l.repairChkClass(e,c),l.repairParentChkClass(e,c))};var d=l.appendNodes;l.appendNodes=function(e,t,c,h,a,n,i){var r="";return d&&(r=d.apply(l,arguments)),h&&C.makeChkFlag(e,h),r}}(jQuery);
+!function(fe){var Ee={event:{DRAG:"ztree_drag",DROP:"ztree_drop",RENAME:"ztree_rename",DRAGMOVE:"ztree_dragmove"},id:{EDIT:"_edit",INPUT:"_input",REMOVE:"_remove"},move:{TYPE_INNER:"inner",TYPE_PREV:"prev",TYPE_NEXT:"next"},node:{CURSELECTED_EDIT:"curSelectedNode_Edit",TMPTARGET_TREE:"tmpTargetzTree",TMPTARGET_NODE:"tmpTargetNode"}},s={onHoverOverNode:function(e,t){var o=Re.getSetting(e.data.treeId),d=Re.getRoot(o);d.curHoverNode!=t&&s.onHoverOutNode(e),d.curHoverNode=t,be.addHoverDom(o,t)},onHoverOutNode:function(e,t){var o=Re.getSetting(e.data.treeId),d=Re.getRoot(o);d.curHoverNode&&!Re.isSelectedNode(o,d.curHoverNode)&&(be.removeTreeDom(o,d.curHoverNode),d.curHoverNode=null)},onMousedownNode:function(e,t){var o,d,Z=Re.getSetting(e.data.treeId),$=Re.getRoot(Z),J=Re.getRoots();if(2==e.button||!Z.edit.enable||!Z.edit.drag.isCopy&&!Z.edit.drag.isMove)return!0;var r=e.target,n=Re.getRoot(Z).curSelectedList,ee=[];if(Re.isSelectedNode(Z,t))for(o=0,d=n.length;o<d;o++){if(n[o].editNameFlag&&Ie.eqs(r.tagName,"input")&&null!==r.getAttribute("treeNode"+he.id.INPUT))return!0;if(ee.push(n[o]),ee[0].parentTId!==n[o].parentTId){ee=[t];break}}else ee=[t];be.editNodeBlur=!0,be.cancelCurEditNode(Z);var te,oe,de,re,ne,ae=fe(Z.treeObj.get(0).ownerDocument),ie=fe(Z.treeObj.get(0).ownerDocument.body),le=!1,se=Z,l=Z,ce=null,Ne=null,ue=null,ge=he.move.TYPE_INNER,ve=e.clientX,me=e.clientY,pe=(new Date).getTime();function s(e){if(0==$.dragFlag&&Math.abs(ve-e.clientX)<Z.edit.drag.minMoveSize&&Math.abs(me-e.clientY)<Z.edit.drag.minMoveSize)return!0;var t,o,d,r,n;if(ie.css("cursor","pointer"),0==$.dragFlag){if(0==Ie.apply(Z.callback.beforeDrag,[Z.treeId,ee],!0))return Te(e),!0;for(t=0,o=ee.length;t<o;t++)0==t&&($.dragNodeShowBefore=[]),d=ee[t],Re.nodeIsParent(Z,d)&&d.open?(be.expandCollapseNode(Z,d,!d.open),$.dragNodeShowBefore[d.tId]=!0):$.dragNodeShowBefore[d.tId]=!1;$.dragFlag=1,J.showHoverDom=!1,Ie.showIfameMask(Z,!0);var a=!0,i=-1;if(1<ee.length){var l=ee[0].parentTId?Re.nodeChildren(Z,ee[0].getParentNode()):Re.getNodes(Z);for(n=[],t=0,o=l.length;t<o;t++)if(void 0!==$.dragNodeShowBefore[l[t].tId]&&(a&&-1<i&&i+1!==t&&(a=!1),n.push(l[t]),i=t),ee.length===n.length){ee=n;break}}for(a&&(re=ee[0].getPreNode(),ne=ee[ee.length-1].getNextNode()),te=Pe("<ul class='zTreeDragUL'></ul>",Z),t=0,o=ee.length;t<o;t++)(d=ee[t]).editNameFlag=!1,be.selectNode(Z,d,0<t),be.removeTreeDom(Z,d),t>Z.edit.drag.maxShowNodeNum-1||((r=Pe("<li id='"+d.tId+"_tmp'></li>",Z)).append(Pe(d,he.id.A,Z).clone()),r.css("padding","0"),r.children("#"+d.tId+he.id.A).removeClass(he.node.CURSELECTED),te.append(r),t==Z.edit.drag.maxShowNodeNum-1&&(r=Pe("<li id='"+d.tId+"_moretmp'><a> ... </a></li>",Z),te.append(r)));te.attr("id",ee[0].tId+he.id.UL+"_tmp"),te.addClass(Z.treeObj.attr("class")),te.appendTo(ie),(oe=Pe("<span class='tmpzTreeMove_arrow'></span>",Z)).attr("id","zTreeMove_arrow_tmp"),oe.appendTo(ie),Z.treeObj.trigger(he.event.DRAG,[e,Z.treeId,ee])}if(1==$.dragFlag){if(de&&oe.attr("id")==e.target.id&&ue&&e.clientX+ae.scrollLeft()+2>fe("#"+ue+he.id.A,de).offset().left){var s=fe("#"+ue+he.id.A,de);e.target=0<s.length?s.get(0):e.target}else de&&(de.removeClass(he.node.TMPTARGET_TREE),ue&&fe("#"+ue+he.id.A,de).removeClass(he.node.TMPTARGET_NODE+"_"+he.move.TYPE_PREV).removeClass(he.node.TMPTARGET_NODE+"_"+Ee.move.TYPE_NEXT).removeClass(he.node.TMPTARGET_NODE+"_"+Ee.move.TYPE_INNER));ue=de=null,le=!1,se=Z;var c=Re.getSettings();for(var N in c)c[N].treeId&&c[N].edit.enable&&c[N].treeId!=Z.treeId&&(e.target.id==c[N].treeId||0<fe(e.target).parents("#"+c[N].treeId).length)&&(le=!0,se=c[N]);var u=ae.scrollTop(),g=ae.scrollLeft(),v=se.treeObj.offset(),m=se.treeObj.get(0).scrollHeight,p=se.treeObj.get(0).scrollWidth,T=e.clientY+u-v.top,f=se.treeObj.height()+v.top-e.clientY-u,E=e.clientX+g-v.left,I=se.treeObj.width()+v.left-e.clientX-g,h=T<Z.edit.drag.borderMax&&T>Z.edit.drag.borderMin,b=f<Z.edit.drag.borderMax&&f>Z.edit.drag.borderMin,R=E<Z.edit.drag.borderMax&&E>Z.edit.drag.borderMin,P=I<Z.edit.drag.borderMax&&I>Z.edit.drag.borderMin,C=T>Z.edit.drag.borderMin&&f>Z.edit.drag.borderMin&&E>Z.edit.drag.borderMin&&I>Z.edit.drag.borderMin,w=h&&se.treeObj.scrollTop()<=0,M=b&&se.treeObj.scrollTop()+se.treeObj.height()+10>=m,_=R&&se.treeObj.scrollLeft()<=0,O=P&&se.treeObj.scrollLeft()+se.treeObj.width()+10>=p;if(e.target&&Ie.isChildOrSelf(e.target,se.treeId)){for(var D=e.target;D&&D.tagName&&!Ie.eqs(D.tagName,"li")&&D.id!=se.treeId;)D=D.parentNode;var y=!0;for(t=0,o=ee.length;t<o;t++){if(d=ee[t],D.id===d.tId){y=!1;break}if(0<Pe(d,Z).find("#"+D.id).length){y=!1;break}}y&&e.target&&Ie.isChildOrSelf(e.target,D.id+he.id.A)&&(de=fe(D),ue=D.id)}d=ee[0],C&&Ie.isChildOrSelf(e.target,se.treeId)&&(!de&&(e.target.id==se.treeId||w||M||_||O)&&(le||!le&&d.parentTId)&&(de=se.treeObj),h?se.treeObj.scrollTop(se.treeObj.scrollTop()-10):b&&se.treeObj.scrollTop(se.treeObj.scrollTop()+10),R?se.treeObj.scrollLeft(se.treeObj.scrollLeft()-10):P&&se.treeObj.scrollLeft(se.treeObj.scrollLeft()+10),de&&de!=se.treeObj&&de.offset().left<se.treeObj.offset().left&&se.treeObj.scrollLeft(se.treeObj.scrollLeft()+de.offset().left-se.treeObj.offset().left)),te.css({top:e.clientY+u+3+"px",left:e.clientX+g+3+"px"});var k=0,S=0;if(de&&de.attr("id")!=se.treeId){var A=null==ue?null:Re.getNodeCache(se,ue),L=(e.ctrlKey||e.metaKey)&&Z.edit.drag.isMove&&Z.edit.drag.isCopy||!Z.edit.drag.isMove&&Z.edit.drag.isCopy,Y=!(!re||ue!==re.tId),x=!(!ne||ue!==ne.tId),j=d.parentTId&&d.parentTId==ue,z=(L||!x)&&Ie.apply(se.edit.drag.prev,[se.treeId,ee,A],!!se.edit.drag.prev),B=(L||!Y)&&Ie.apply(se.edit.drag.next,[se.treeId,ee,A],!!se.edit.drag.next),H=(L||!j)&&!(se.data.keep.leaf&&!Re.nodeIsParent(Z,A))&&Ie.apply(se.edit.drag.inner,[se.treeId,ee,A],!!se.edit.drag.inner);function F(){de=null,ue="",ge=he.move.TYPE_INNER,oe.css({display:"none"}),window.zTreeMoveTimer&&(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null)}if(z||B||H){var V=fe("#"+ue+he.id.A,de),U=A.isLastNode?null:fe("#"+A.getNextNode().tId+he.id.A,de.next()),G=V.offset().top,X=V.offset().left,q=z?H?.25:B?.5:1:-1,W=B?H?.75:z?.5:0:-1,K=(e.clientY+u-G)/V.height();if((1==q||K<=q&&-.2<=K)&&z?(k=1-oe.width(),S=G-oe.height()/2,ge=he.move.TYPE_PREV):(0==W||W<=K&&K<=1.2)&&B?(k=1-oe.width(),S=null==U||Re.nodeIsParent(Z,A)&&A.open?G+V.height()-oe.height()/2:U.offset().top-oe.height()/2,ge=he.move.TYPE_NEXT):H?(k=5-oe.width(),S=G,ge=he.move.TYPE_INNER):F(),de&&(oe.css({display:"block",top:S+"px",left:X+k+"px"}),V.addClass(he.node.TMPTARGET_NODE+"_"+ge),ce==ue&&Ne==ge||(pe=(new Date).getTime()),A&&Re.nodeIsParent(Z,A)&&ge==he.move.TYPE_INNER)){var Q=!0;window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId!==A.tId?(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null):window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId===A.tId&&(Q=!1),Q&&(window.zTreeMoveTimer=setTimeout(function(){ge==he.move.TYPE_INNER&&A&&Re.nodeIsParent(Z,A)&&!A.open&&(new Date).getTime()-pe>se.edit.drag.autoOpenTime&&Ie.apply(se.callback.beforeDragOpen,[se.treeId,A],!0)&&(be.switchNode(se,A),se.edit.drag.autoExpandTrigger&&se.treeObj.trigger(he.event.EXPAND,[se.treeId,A]))},se.edit.drag.autoOpenTime+50),window.zTreeMoveTargetNodeTId=A.tId)}}else F()}else ge=he.move.TYPE_INNER,de&&Ie.apply(se.edit.drag.inner,[se.treeId,ee,null],!!se.edit.drag.inner)?de.addClass(he.node.TMPTARGET_TREE):de=null,oe.css({display:"none"}),window.zTreeMoveTimer&&(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null);ce=ue,Ne=ge,Z.treeObj.trigger(he.event.DRAGMOVE,[e,Z.treeId,ee])}return!1}function Te(d){if(window.zTreeMoveTimer&&(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null),Ne=ce=null,ae.unbind("mousemove",s),ae.unbind("mouseup",Te),ae.unbind("selectstart",c),ie.css("cursor",""),de&&(de.removeClass(he.node.TMPTARGET_TREE),ue&&fe("#"+ue+he.id.A,de).removeClass(he.node.TMPTARGET_NODE+"_"+he.move.TYPE_PREV).removeClass(he.node.TMPTARGET_NODE+"_"+Ee.move.TYPE_NEXT).removeClass(he.node.TMPTARGET_NODE+"_"+Ee.move.TYPE_INNER)),Ie.showIfameMask(Z,!1),J.showHoverDom=!0,0!=$.dragFlag){var e,t,o;for(e=$.dragFlag=0,t=ee.length;e<t;e++)o=ee[e],Re.nodeIsParent(Z,o)&&$.dragNodeShowBefore[o.tId]&&!o.open&&(be.expandCollapseNode(Z,o,!o.open),delete $.dragNodeShowBefore[o.tId]);te&&te.remove(),oe&&oe.remove();var r=(d.ctrlKey||d.metaKey)&&Z.edit.drag.isMove&&Z.edit.drag.isCopy||!Z.edit.drag.isMove&&Z.edit.drag.isCopy;if(!r&&de&&ue&&ee[0].parentTId&&ue==ee[0].parentTId&&ge==he.move.TYPE_INNER&&(de=null),de){var n=null==ue?null:Re.getNodeCache(se,ue);if(0==Ie.apply(Z.callback.beforeDrop,[se.treeId,ee,n,ge,r],!0))return void be.selectNodes(l,ee);var a=r?Ie.clone(ee):ee;function i(){if(le){if(!r)for(var e=0,t=ee.length;e<t;e++)be.removeNode(Z,ee[e]);ge==he.move.TYPE_INNER?be.addNodes(se,n,-1,a):be.addNodes(se,n.getParentNode(),ge==he.move.TYPE_PREV?n.getIndex():n.getIndex()+1,a)}else if(r&&ge==he.move.TYPE_INNER)be.addNodes(se,n,-1,a);else if(r)be.addNodes(se,n.getParentNode(),ge==he.move.TYPE_PREV?n.getIndex():n.getIndex()+1,a);else if(ge!=he.move.TYPE_NEXT)for(e=0,t=a.length;e<t;e++)be.moveNode(se,n,a[e],ge,!1);else for(e=-1,t=a.length-1;e<t;t--)be.moveNode(se,n,a[t],ge,!1);be.selectNodes(se,a);var o=Pe(a[0],Z).get(0);be.scrollIntoView(Z,o),Z.treeObj.trigger(he.event.DROP,[d,se.treeId,a,n,ge,r])}ge==he.move.TYPE_INNER&&Ie.canAsync(se,n)?be.asyncNode(se,n,!1,i):i()}else be.selectNodes(l,ee),Z.treeObj.trigger(he.event.DROP,[d,Z.treeId,ee,null,null,null])}}function c(){return!1}return Ie.uCanDo(Z)&&ae.bind("mousemove",s),ae.bind("mouseup",Te),ae.bind("selectstart",c),!0}},e={tools:{getAbs:function(e){var t=e.getBoundingClientRect(),o=document.body.scrollTop+document.documentElement.scrollTop,d=document.body.scrollLeft+document.documentElement.scrollLeft;return[t.left+d,t.top+o]},inputFocus:function(e){e.get(0)&&(e.focus(),Ie.setCursorPosition(e.get(0),e.val().length))},inputSelect:function(e){e.get(0)&&(e.focus(),e.select())},setCursorPosition:function(e,t){if(e.setSelectionRange)e.focus(),e.setSelectionRange(t,t);else if(e.createTextRange){var o=e.createTextRange();o.collapse(!0),o.moveEnd("character",t),o.moveStart("character",t),o.select()}},showIfameMask:function(e,t){for(var o=Re.getRoot(e);0<o.dragMaskList.length;)o.dragMaskList[0].remove(),o.dragMaskList.shift();if(t)for(var d=Pe("iframe",e),r=0,n=d.length;r<n;r++){var a=d.get(r),i=Ie.getAbs(a),l=Pe("<div id='zTreeMask_"+r+"' class='zTreeMask' style='top:"+i[1]+"px; left:"+i[0]+"px; width:"+a.offsetWidth+"px; height:"+a.offsetHeight+"px;'></div>",e);l.appendTo(Pe("body",e)),o.dragMaskList.push(l)}}},view:{addEditBtn:function(e,t){if(!(t.editNameFlag||0<Pe(t,he.id.EDIT,e).length)&&Ie.apply(e.edit.showRenameBtn,[e.treeId,t],e.edit.showRenameBtn)){var o=Pe(t,he.id.A,e),d="<span class='"+he.className.BUTTON+" edit' id='"+t.tId+he.id.EDIT+"' title='"+Ie.apply(e.edit.renameTitle,[e.treeId,t],e.edit.renameTitle)+"' treeNode"+he.id.EDIT+" style='display:none;'></span>";o.append(d),Pe(t,he.id.EDIT,e).bind("click",function(){return Ie.uCanDo(e)&&0!=Ie.apply(e.callback.beforeEditName,[e.treeId,t],!0)&&be.editNode(e,t),!1}).show()}},addRemoveBtn:function(e,t){if(!(t.editNameFlag||0<Pe(t,he.id.REMOVE,e).length)&&Ie.apply(e.edit.showRemoveBtn,[e.treeId,t],e.edit.showRemoveBtn)){var o=Pe(t,he.id.A,e),d="<span class='"+he.className.BUTTON+" remove' id='"+t.tId+he.id.REMOVE+"' title='"+Ie.apply(e.edit.removeTitle,[e.treeId,t],e.edit.removeTitle)+"' treeNode"+he.id.REMOVE+" style='display:none;'></span>";o.append(d),Pe(t,he.id.REMOVE,e).bind("click",function(){return Ie.uCanDo(e)&&0!=Ie.apply(e.callback.beforeRemove,[e.treeId,t],!0)&&(be.removeNode(e,t),e.treeObj.trigger(he.event.REMOVE,[e.treeId,t])),!1}).bind("mousedown",function(e){return!0}).show()}},addHoverDom:function(e,t){Re.getRoots().showHoverDom&&(t.isHover=!0,e.edit.enable&&(be.addEditBtn(e,t),be.addRemoveBtn(e,t)),Ie.apply(e.view.addHoverDom,[e.treeId,t]))},cancelCurEditNode:function(e,t,o){var d=Re.getRoot(e),r=d.curEditNode;if(r){var n=d.curEditInput,a=t||(o?Re.nodeName(e,r):n.val());if(!1===Ie.apply(e.callback.beforeRename,[e.treeId,r,a,o],!0))return!1;Re.nodeName(e,r,a),Pe(r,he.id.A,e).removeClass(he.node.CURSELECTED_EDIT),n.unbind(),be.setNodeName(e,r),r.editNameFlag=!1,d.curEditNode=null,d.curEditInput=null,be.selectNode(e,r,!1),e.treeObj.trigger(he.event.RENAME,[e.treeId,r,o])}return d.noSelection=!0},editNode:function(t,e){var o=Re.getRoot(t);if(be.editNodeBlur=!1,Re.isSelectedNode(t,e)&&o.curEditNode==e&&e.editNameFlag)setTimeout(function(){Ie.inputFocus(o.curEditInput)},0);else{e.editNameFlag=!0,be.removeTreeDom(t,e),be.cancelCurEditNode(t),be.selectNode(t,e,!1),Pe(e,he.id.SPAN,t).html("<input type=text class='rename' id='"+e.tId+he.id.INPUT+"' treeNode"+he.id.INPUT+" >");var d=Pe(e,he.id.INPUT,t);d.attr("value",Re.nodeName(t,e)),t.edit.editNameSelectAll?Ie.inputSelect(d):Ie.inputFocus(d),d.bind("blur",function(e){be.editNodeBlur||be.cancelCurEditNode(t)}).bind("keydown",function(e){"13"==e.keyCode?(be.editNodeBlur=!0,be.cancelCurEditNode(t)):"27"==e.keyCode&&be.cancelCurEditNode(t,null,!0)}).bind("click",function(e){return!1}).bind("dblclick",function(e){return!1}),Pe(e,he.id.A,t).addClass(he.node.CURSELECTED_EDIT),o.curEditInput=d,o.noSelection=!1,o.curEditNode=e}},moveNode:function(e,t,o,d,r,n){var a=Re.getRoot(e);if(t!=o&&(!e.data.keep.leaf||!t||Re.nodeIsParent(e,t)||d!=he.move.TYPE_INNER)){var i=o.parentTId?o.getParentNode():a,l=null===t||t==a;l&&null===t&&(t=a),l&&(d=he.move.TYPE_INNER);var s,c,N=t.parentTId?t.getParentNode():a;if(d!=he.move.TYPE_PREV&&d!=he.move.TYPE_NEXT&&(d=he.move.TYPE_INNER),d==he.move.TYPE_INNER&&(l?o.parentTId=null:(Re.nodeIsParent(e,t)||(Re.nodeIsParent(e,t,!0),t.open=!!t.open,be.setNodeLineIcos(e,t)),o.parentTId=t.tId)),l)c=s=e.treeObj;else{if(n||d!=he.move.TYPE_INNER?n||be.expandCollapseNode(e,t.getParentNode(),!0,!1):be.expandCollapseNode(e,t,!0,!1),s=Pe(t,e),c=Pe(t,he.id.UL,e),s.get(0)&&!c.get(0)){var u=[];be.makeUlHtml(e,t,u,""),s.append(u.join(""))}c=Pe(t,he.id.UL,e)}var g=Pe(o,e);g.get(0)?s.get(0)||g.remove():g=be.appendNodes(e,o.level,[o],null,-1,!1,!0).join(""),c.get(0)&&d==he.move.TYPE_INNER?c.append(g):s.get(0)&&d==he.move.TYPE_PREV?s.before(g):s.get(0)&&d==he.move.TYPE_NEXT&&s.after(g);var v,m,p=-1,T=0,f=null,E=null,I=o.level,h=Re.nodeChildren(e,i),b=Re.nodeChildren(e,N),R=Re.nodeChildren(e,t);if(o.isFirstNode)p=0,1<h.length&&((f=h[1]).isFirstNode=!0);else if(o.isLastNode)(f=h[(p=h.length-1)-1]).isLastNode=!0;else for(v=0,m=h.length;v<m;v++)if(h[v].tId==o.tId){p=v;break}if(0<=p&&h.splice(p,1),d!=he.move.TYPE_INNER)for(v=0,m=b.length;v<m;v++)b[v].tId==t.tId&&(T=v);if(d==he.move.TYPE_INNER?(0<(R=R||Re.nodeChildren(e,t,[])).length&&((E=R[R.length-1]).isLastNode=!1),R.splice(R.length,0,o),o.isLastNode=!0,o.isFirstNode=1==R.length):t.isFirstNode&&d==he.move.TYPE_PREV?(b.splice(T,0,o),(E=t).isFirstNode=!1,o.parentTId=t.parentTId,o.isFirstNode=!0,o.isLastNode=!1):t.isLastNode&&d==he.move.TYPE_NEXT?(b.splice(T+1,0,o),(E=t).isLastNode=!1,o.parentTId=t.parentTId,o.isFirstNode=!1,o.isLastNode=!0):(d==he.move.TYPE_PREV?b.splice(T,0,o):b.splice(T+1,0,o),o.parentTId=t.parentTId,o.isFirstNode=!1,o.isLastNode=!1),Re.fixPIdKeyValue(e,o),Re.setSonNodeLevel(e,o.getParentNode(),o),be.setNodeLineIcos(e,o),be.repairNodeLevelClass(e,o,I),!e.data.keep.parent&&h.length<1){Re.nodeIsParent(e,i,!1),i.open=!1;var P=Pe(i,he.id.UL,e),C=Pe(i,he.id.SWITCH,e),w=Pe(i,he.id.ICON,e);be.replaceSwitchClass(i,C,he.folder.DOCU),be.replaceIcoClass(i,w,he.folder.DOCU),P.css("display","none")}else f&&be.setNodeLineIcos(e,f);E&&be.setNodeLineIcos(e,E),e.check&&e.check.enable&&be.repairChkClass&&(be.repairChkClass(e,i),be.repairParentChkClassWithSelf(e,i),i!=o.parent&&be.repairParentChkClassWithSelf(e,o)),n||be.expandCollapseParentNode(e,o.getParentNode(),!0,r)}},removeEditBtn:function(e,t){Pe(t,he.id.EDIT,e).unbind().remove()},removeRemoveBtn:function(e,t){Pe(t,he.id.REMOVE,e).unbind().remove()},removeTreeDom:function(e,t){t.isHover=!1,be.removeEditBtn(e,t),be.removeRemoveBtn(e,t),Ie.apply(e.view.removeHoverDom,[e.treeId,t])},repairNodeLevelClass:function(e,t,o){if(o!==t.level){var d=Pe(t,e),r=Pe(t,he.id.A,e),n=Pe(t,he.id.UL,e),a=he.className.LEVEL+o,i=he.className.LEVEL+t.level;d.removeClass(a),d.addClass(i),r.removeClass(a),r.addClass(i),n.removeClass(a),n.addClass(i)}},selectNodes:function(e,t){for(var o=0,d=t.length;o<d;o++)be.selectNode(e,t[o],0<o)}},event:{},data:{setSonNodeLevel:function(e,t,o){if(o){var d=Re.nodeChildren(e,o);if(o.level=t?t.level+1:0,d)for(var r=0,n=d.length;r<n;r++)d[r]&&Re.setSonNodeLevel(e,o,d[r])}}}};fe.extend(!0,fe.fn.zTree.consts,Ee),fe.extend(!0,fe.fn.zTree._z,e);var t=fe.fn.zTree,Ie=t._z.tools,he=t.consts,be=t._z.view,Re=t._z.data,Pe=(t._z.event,Ie.$);Re.exSetting({edit:{enable:!1,editNameSelectAll:!1,showRemoveBtn:!0,showRenameBtn:!0,removeTitle:"remove",renameTitle:"rename",drag:{autoExpandTrigger:!1,isCopy:!0,isMove:!0,prev:!0,next:!0,inner:!0,minMoveSize:5,borderMax:10,borderMin:-5,maxShowNodeNum:5,autoOpenTime:500}},view:{addHoverDom:null,removeHoverDom:null},callback:{beforeDrag:null,beforeDragOpen:null,beforeDrop:null,beforeEditName:null,beforeRename:null,onDrag:null,onDragMove:null,onDrop:null,onRename:null}}),Re.addInitBind(function(i){var e=i.treeObj,t=he.event;e.bind(t.RENAME,function(e,t,o,d){Ie.apply(i.callback.onRename,[e,t,o,d])}),e.bind(t.DRAG,function(e,t,o,d){Ie.apply(i.callback.onDrag,[t,o,d])}),e.bind(t.DRAGMOVE,function(e,t,o,d){Ie.apply(i.callback.onDragMove,[t,o,d])}),e.bind(t.DROP,function(e,t,o,d,r,n,a){Ie.apply(i.callback.onDrop,[t,o,d,r,n,a])})}),Re.addInitUnBind(function(e){var t=e.treeObj,o=he.event;t.unbind(o.RENAME),t.unbind(o.DRAG),t.unbind(o.DRAGMOVE),t.unbind(o.DROP)}),Re.addInitCache(function(e){}),Re.addInitNode(function(e,t,o,d,r,n,a){o&&(o.isHover=!1,o.editNameFlag=!1)}),Re.addInitProxy(function(e){var t=e.target,o=Re.getSetting(e.data.treeId),d=e.relatedTarget,r="",n=null,a="",i=null,l=null;if(Ie.eqs(e.type,"mouseover")?(l=Ie.getMDom(o,t,[{tagName:"a",attrName:"treeNode"+he.id.A}]))&&(r=Ie.getNodeMainDom(l).id,a="hoverOverNode"):Ie.eqs(e.type,"mouseout")?(l=Ie.getMDom(o,d,[{tagName:"a",attrName:"treeNode"+he.id.A}]))||(r="remove",a="hoverOutNode"):Ie.eqs(e.type,"mousedown")&&(l=Ie.getMDom(o,t,[{tagName:"a",attrName:"treeNode"+he.id.A}]))&&(r=Ie.getNodeMainDom(l).id,a="mousedownNode"),0<r.length)switch(n=Re.getNodeCache(o,r),a){case"mousedownNode":i=s.onMousedownNode;break;case"hoverOverNode":i=s.onHoverOverNode;break;case"hoverOutNode":i=s.onHoverOutNode}return{stop:!1,node:n,nodeEventType:a,nodeEventCallback:i,treeEventType:"",treeEventCallback:null}}),Re.addInitRoot(function(e){var t=Re.getRoot(e),o=Re.getRoots();t.curEditNode=null,t.curEditInput=null,t.curHoverNode=null,t.dragFlag=0,t.dragNodeShowBefore=[],t.dragMaskList=new Array,o.showHoverDom=!0}),Re.addZTreeTools(function(l,e){e.cancelEditName=function(e){Re.getRoot(this.setting).curEditNode&&be.cancelCurEditNode(this.setting,e||null,!0)},e.copyNode=function(e,t,o,d){if(!t)return null;var r=Re.nodeIsParent(l,e);if(e&&!r&&this.setting.data.keep.leaf&&o===he.move.TYPE_INNER)return null;var n=this,a=Ie.clone(t);if(e||(e=null,o=he.move.TYPE_INNER),o==he.move.TYPE_INNER){function i(){be.addNodes(n.setting,e,-1,[a],d)}Ie.canAsync(this.setting,e)?be.asyncNode(this.setting,e,d,i):i()}else be.addNodes(this.setting,e.parentNode,-1,[a],d),be.moveNode(this.setting,e,a,o,!1,d);return a},e.editName=function(e){e&&e.tId&&e===Re.getNodeCache(this.setting,e.tId)&&(e.parentTId&&be.expandCollapseParentNode(this.setting,e.getParentNode(),!0),be.editNode(this.setting,e))},e.moveNode=function(e,t,o,d){if(!t)return t;var r=Re.nodeIsParent(l,e);if(e&&!r&&this.setting.data.keep.leaf&&o===he.move.TYPE_INNER)return null;if(e&&(t.parentTId==e.tId&&o==he.move.TYPE_INNER||0<Pe(t,this.setting).find("#"+e.tId).length))return null;e=e||null;var n=this;function a(){be.moveNode(n.setting,e,t,o,!1,d)}return Ie.canAsync(this.setting,e)&&o===he.move.TYPE_INNER?be.asyncNode(this.setting,e,d,a):a(),t},e.setEditable=function(e){return this.setting.edit.enable=e,this.refresh()}});var n=be.cancelPreSelectedNode;be.cancelPreSelectedNode=function(e,t){for(var o=Re.getRoot(e).curSelectedList,d=0,r=o.length;d<r&&(t&&t!==o[d]||(be.removeTreeDom(e,o[d]),!t));d++);n&&n.apply(be,arguments)};var a=be.createNodes;be.createNodes=function(e,t,o,d,r){a&&a.apply(be,arguments),o&&be.repairParentChkClassWithSelf&&be.repairParentChkClassWithSelf(e,d)};var o=be.makeNodeUrl;be.makeNodeUrl=function(e,t){return e.edit.enable?null:o.apply(be,arguments)};var d=be.removeNode;be.removeNode=function(e,t){var o=Re.getRoot(e);o.curEditNode===t&&(o.curEditNode=null),d&&d.apply(be,arguments)};var r=be.selectNode;be.selectNode=function(e,t,o){var d=Re.getRoot(e);return(!Re.isSelectedNode(e,t)||d.curEditNode!=t||!t.editNameFlag)&&(r&&r.apply(be,arguments),be.addHoverDom(e,t),!0)};var i=Ie.uCanDo;Ie.uCanDo=function(e,t){var o=Re.getRoot(e);return!(!t||!(Ie.eqs(t.type,"mouseover")||Ie.eqs(t.type,"mouseout")||Ie.eqs(t.type,"mousedown")||Ie.eqs(t.type,"mouseup")))||(o.curEditNode&&(be.editNodeBlur=!1,o.curEditInput.focus()),!o.curEditNode&&(!i||i.apply(be,arguments)))}}(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.all.min.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.excheck.js
===================================================================
--- base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.excheck.js (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.excheck.js (revision 10)
@@ -0,0 +1,652 @@
+/*
+ * JQuery zTree excheck
+ * v3.5.43
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: 2020-04-04
+ */
+
+(function ($) {
+ //default consts of excheck
+ var _consts = {
+ event: {
+ CHECK: "ztree_check"
+ },
+ id: {
+ CHECK: "_check"
+ },
+ checkbox: {
+ STYLE: "checkbox",
+ DEFAULT: "chk",
+ DISABLED: "disable",
+ FALSE: "false",
+ TRUE: "true",
+ FULL: "full",
+ PART: "part",
+ FOCUS: "focus"
+ },
+ radio: {
+ STYLE: "radio",
+ TYPE_ALL: "all",
+ TYPE_LEVEL: "level"
+ }
+ },
+ //default setting of excheck
+ _setting = {
+ check: {
+ enable: false,
+ autoCheckTrigger: false,
+ chkStyle: _consts.checkbox.STYLE,
+ nocheckInherit: false,
+ chkDisabledInherit: false,
+ radioType: _consts.radio.TYPE_LEVEL,
+ chkboxType: {
+ "Y": "ps",
+ "N": "ps"
+ }
+ },
+ data: {
+ key: {
+ checked: "checked"
+ }
+ },
+ callback: {
+ beforeCheck: null,
+ onCheck: null
+ }
+ },
+ //default root of excheck
+ _initRoot = function (setting) {
+ var r = data.getRoot(setting);
+ r.radioCheckedList = [];
+ },
+ //default cache of excheck
+ _initCache = function (treeId) {
+ },
+ //default bind event of excheck
+ _bindEvent = function (setting) {
+ var o = setting.treeObj,
+ c = consts.event;
+ o.bind(c.CHECK, function (event, srcEvent, treeId, node) {
+ event.srcEvent = srcEvent;
+ tools.apply(setting.callback.onCheck, [event, treeId, node]);
+ });
+ },
+ _unbindEvent = function (setting) {
+ var o = setting.treeObj,
+ c = consts.event;
+ o.unbind(c.CHECK);
+ },
+ //default event proxy of excheck
+ _eventProxy = function (e) {
+ var target = e.target,
+ setting = data.getSetting(e.data.treeId),
+ tId = "", node = null,
+ nodeEventType = "", treeEventType = "",
+ nodeEventCallback = null, treeEventCallback = null;
+
+ if (tools.eqs(e.type, "mouseover")) {
+ if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
+ tId = tools.getNodeMainDom(target).id;
+ nodeEventType = "mouseoverCheck";
+ }
+ } else if (tools.eqs(e.type, "mouseout")) {
+ if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
+ tId = tools.getNodeMainDom(target).id;
+ nodeEventType = "mouseoutCheck";
+ }
+ } else if (tools.eqs(e.type, "click")) {
+ if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
+ tId = tools.getNodeMainDom(target).id;
+ nodeEventType = "checkNode";
+ }
+ }
+ if (tId.length > 0) {
+ node = data.getNodeCache(setting, tId);
+ switch (nodeEventType) {
+ case "checkNode" :
+ nodeEventCallback = _handler.onCheckNode;
+ break;
+ case "mouseoverCheck" :
+ nodeEventCallback = _handler.onMouseoverCheck;
+ break;
+ case "mouseoutCheck" :
+ nodeEventCallback = _handler.onMouseoutCheck;
+ break;
+ }
+ }
+ var proxyResult = {
+ stop: nodeEventType === "checkNode",
+ node: node,
+ nodeEventType: nodeEventType,
+ nodeEventCallback: nodeEventCallback,
+ treeEventType: treeEventType,
+ treeEventCallback: treeEventCallback
+ };
+ return proxyResult
+ },
+ //default init node of excheck
+ _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
+ if (!n) return;
+ var checked = data.nodeChecked(setting, n);
+ n.checkedOld = checked;
+ if (typeof n.nocheck == "string") n.nocheck = tools.eqs(n.nocheck, "true");
+ n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);
+ if (typeof n.chkDisabled == "string") n.chkDisabled = tools.eqs(n.chkDisabled, "true");
+ n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled);
+ if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true");
+ n.halfCheck = !!n.halfCheck;
+ n.check_Child_State = -1;
+ n.check_Focus = false;
+ n.getCheckStatus = function () {
+ return data.getCheckStatus(setting, n);
+ };
+
+ if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && checked) {
+ var r = data.getRoot(setting);
+ r.radioCheckedList.push(n);
+ }
+ },
+ //add dom for check
+ _beforeA = function (setting, node, html) {
+ if (setting.check.enable) {
+ data.makeChkFlag(setting, node);
+ html.push("<span ID='", node.tId, consts.id.CHECK, "' class='", view.makeChkClass(setting, node), "' treeNode", consts.id.CHECK, (node.nocheck === true ? " style='display:none;'" : ""), "></span>");
+ }
+ },
+ //update zTreeObj, add method of check
+ _zTreeTools = function (setting, zTreeTools) {
+ zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) {
+ var nodeChecked = data.nodeChecked(setting, node);
+ if (node.chkDisabled === true) return;
+ if (checked !== true && checked !== false) {
+ checked = !nodeChecked;
+ }
+ callbackFlag = !!callbackFlag;
+
+ if (nodeChecked === checked && !checkTypeFlag) {
+ return;
+ } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {
+ return;
+ }
+ if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {
+ data.nodeChecked(setting, node, checked);
+ var checkObj = $$(node, consts.id.CHECK, this.setting);
+ if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
+ view.setChkClass(this.setting, checkObj, node);
+ view.repairParentChkClassWithSelf(this.setting, node);
+ if (callbackFlag) {
+ this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]);
+ }
+ }
+ }
+
+ zTreeTools.checkAllNodes = function (checked) {
+ view.repairAllChk(this.setting, !!checked);
+ }
+
+ zTreeTools.getCheckedNodes = function (checked) {
+ checked = (checked !== false);
+ var children = data.nodeChildren(setting, data.getRoot(this.setting));
+ return data.getTreeCheckedNodes(this.setting, children, checked);
+ }
+
+ zTreeTools.getChangeCheckedNodes = function () {
+ var children = data.nodeChildren(setting, data.getRoot(this.setting));
+ return data.getTreeChangeCheckedNodes(this.setting, children);
+ }
+
+ zTreeTools.setChkDisabled = function (node, disabled, inheritParent, inheritChildren) {
+ disabled = !!disabled;
+ inheritParent = !!inheritParent;
+ inheritChildren = !!inheritChildren;
+ view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren);
+ view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent);
+ }
+
+ var _updateNode = zTreeTools.updateNode;
+ zTreeTools.updateNode = function (node, checkTypeFlag) {
+ if (_updateNode) _updateNode.apply(zTreeTools, arguments);
+ if (!node || !this.setting.check.enable) return;
+ var nObj = $$(node, this.setting);
+ if (nObj.get(0) && tools.uCanDo(this.setting)) {
+ var checkObj = $$(node, consts.id.CHECK, this.setting);
+ if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
+ view.setChkClass(this.setting, checkObj, node);
+ view.repairParentChkClassWithSelf(this.setting, node);
+ }
+ }
+ },
+ //method of operate data
+ _data = {
+ getRadioCheckedList: function (setting) {
+ var checkedList = data.getRoot(setting).radioCheckedList;
+ for (var i = 0, j = checkedList.length; i < j; i++) {
+ if (!data.getNodeCache(setting, checkedList[i].tId)) {
+ checkedList.splice(i, 1);
+ i--;
+ j--;
+ }
+ }
+ return checkedList;
+ },
+ getCheckStatus: function (setting, node) {
+ if (!setting.check.enable || node.nocheck || node.chkDisabled) return null;
+ var checked = data.nodeChecked(setting, node),
+ r = {
+ checked: checked,
+ half: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (checked ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))
+ };
+ return r;
+ },
+ getTreeCheckedNodes: function (setting, nodes, checked, results) {
+ if (!nodes) return [];
+ var onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);
+ results = !results ? [] : results;
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ var children = data.nodeChildren(setting, node);
+ var nodeChecked = data.nodeChecked(setting, node);
+ if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked == checked) {
+ results.push(node);
+ if (onlyOne) {
+ break;
+ }
+ }
+ data.getTreeCheckedNodes(setting, children, checked, results);
+ if (onlyOne && results.length > 0) {
+ break;
+ }
+ }
+ return results;
+ },
+ getTreeChangeCheckedNodes: function (setting, nodes, results) {
+ if (!nodes) return [];
+ results = !results ? [] : results;
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ var children = data.nodeChildren(setting, node);
+ var nodeChecked = data.nodeChecked(setting, node);
+ if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked != node.checkedOld) {
+ results.push(node);
+ }
+ data.getTreeChangeCheckedNodes(setting, children, results);
+ }
+ return results;
+ },
+ makeChkFlag: function (setting, node) {
+ if (!node) return;
+ var chkFlag = -1;
+ var children = data.nodeChildren(setting, node);
+ if (children) {
+ for (var i = 0, l = children.length; i < l; i++) {
+ var cNode = children[i];
+ var nodeChecked = data.nodeChecked(setting, cNode);
+ var tmp = -1;
+ if (setting.check.chkStyle == consts.radio.STYLE) {
+ if (cNode.nocheck === true || cNode.chkDisabled === true) {
+ tmp = cNode.check_Child_State;
+ } else if (cNode.halfCheck === true) {
+ tmp = 2;
+ } else if (nodeChecked) {
+ tmp = 2;
+ } else {
+ tmp = cNode.check_Child_State > 0 ? 2 : 0;
+ }
+ if (tmp == 2) {
+ chkFlag = 2;
+ break;
+ } else if (tmp == 0) {
+ chkFlag = 0;
+ }
+ } else if (setting.check.chkStyle == consts.checkbox.STYLE) {
+ if (cNode.nocheck === true || cNode.chkDisabled === true) {
+ tmp = cNode.check_Child_State;
+ } else if (cNode.halfCheck === true) {
+ tmp = 1;
+ } else if (nodeChecked) {
+ tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;
+ } else {
+ tmp = (cNode.check_Child_State > 0) ? 1 : 0;
+ }
+ if (tmp === 1) {
+ chkFlag = 1;
+ break;
+ } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) {
+ chkFlag = 1;
+ break;
+ } else if (chkFlag === 2 && tmp > -1 && tmp < 2) {
+ chkFlag = 1;
+ break;
+ } else if (tmp > -1) {
+ chkFlag = tmp;
+ }
+ }
+ }
+ }
+ node.check_Child_State = chkFlag;
+ }
+ },
+ //method of event proxy
+ _event = {},
+ //method of event handler
+ _handler = {
+ onCheckNode: function (event, node) {
+ if (node.chkDisabled === true) return false;
+ var setting = data.getSetting(event.data.treeId);
+ if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;
+ var nodeChecked = data.nodeChecked(setting, node);
+ data.nodeChecked(setting, node, !nodeChecked);
+ view.checkNodeRelation(setting, node);
+ var checkObj = $$(node, consts.id.CHECK, setting);
+ view.setChkClass(setting, checkObj, node);
+ view.repairParentChkClassWithSelf(setting, node);
+ setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]);
+ return true;
+ },
+ onMouseoverCheck: function (event, node) {
+ if (node.chkDisabled === true) return false;
+ var setting = data.getSetting(event.data.treeId),
+ checkObj = $$(node, consts.id.CHECK, setting);
+ node.check_Focus = true;
+ view.setChkClass(setting, checkObj, node);
+ return true;
+ },
+ onMouseoutCheck: function (event, node) {
+ if (node.chkDisabled === true) return false;
+ var setting = data.getSetting(event.data.treeId),
+ checkObj = $$(node, consts.id.CHECK, setting);
+ node.check_Focus = false;
+ view.setChkClass(setting, checkObj, node);
+ return true;
+ }
+ },
+ //method of tools for zTree
+ _tools = {},
+ //method of operate ztree dom
+ _view = {
+ checkNodeRelation: function (setting, node) {
+ var pNode, i, l,
+ r = consts.radio;
+ var nodeChecked = data.nodeChecked(setting, node);
+ if (setting.check.chkStyle == r.STYLE) {
+ var checkedList = data.getRadioCheckedList(setting);
+ if (nodeChecked) {
+ if (setting.check.radioType == r.TYPE_ALL) {
+ for (i = checkedList.length - 1; i >= 0; i--) {
+ pNode = checkedList[i];
+ var pNodeChecked = data.nodeChecked(setting, pNode);
+ if (pNodeChecked && pNode != node) {
+ data.nodeChecked(setting, pNode, false);
+ checkedList.splice(i, 1);
+
+ view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);
+ if (pNode.parentTId != node.parentTId) {
+ view.repairParentChkClassWithSelf(setting, pNode);
+ }
+ }
+ }
+ checkedList.push(node);
+ } else {
+ var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);
+ var children = data.nodeChildren(setting, parentNode);
+ for (i = 0, l = children.length; i < l; i++) {
+ pNode = children[i];
+ var pNodeChecked = data.nodeChecked(setting, pNode);
+ if (pNodeChecked && pNode != node) {
+ data.nodeChecked(setting, pNode, false);
+ view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);
+ }
+ }
+ }
+ } else if (setting.check.radioType == r.TYPE_ALL) {
+ for (i = 0, l = checkedList.length; i < l; i++) {
+ if (node == checkedList[i]) {
+ checkedList.splice(i, 1);
+ break;
+ }
+ }
+ }
+
+ } else {
+ var children = data.nodeChildren(setting, node);
+ if (nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.Y.indexOf("s") > -1)) {
+ view.setSonNodeCheckBox(setting, node, true);
+ }
+ if (!nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.N.indexOf("s") > -1)) {
+ view.setSonNodeCheckBox(setting, node, false);
+ }
+ if (nodeChecked && setting.check.chkboxType.Y.indexOf("p") > -1) {
+ view.setParentNodeCheckBox(setting, node, true);
+ }
+ if (!nodeChecked && setting.check.chkboxType.N.indexOf("p") > -1) {
+ view.setParentNodeCheckBox(setting, node, false);
+ }
+ }
+ },
+ makeChkClass: function (setting, node) {
+ var c = consts.checkbox, r = consts.radio,
+ fullStyle = "";
+ var nodeChecked = data.nodeChecked(setting, node);
+ if (node.chkDisabled === true) {
+ fullStyle = c.DISABLED;
+ } else if (node.halfCheck) {
+ fullStyle = c.PART;
+ } else if (setting.check.chkStyle == r.STYLE) {
+ fullStyle = (node.check_Child_State < 1) ? c.FULL : c.PART;
+ } else {
+ fullStyle = nodeChecked ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL : c.PART) : ((node.check_Child_State < 1) ? c.FULL : c.PART);
+ }
+ var chkName = setting.check.chkStyle + "_" + (nodeChecked ? c.TRUE : c.FALSE) + "_" + fullStyle;
+ chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName;
+ return consts.className.BUTTON + " " + c.DEFAULT + " " + chkName;
+ },
+ repairAllChk: function (setting, checked) {
+ if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {
+ var root = data.getRoot(setting);
+ var children = data.nodeChildren(setting, root);
+ for (var i = 0, l = children.length; i < l; i++) {
+ var node = children[i];
+ if (node.nocheck !== true && node.chkDisabled !== true) {
+ data.nodeChecked(setting, node, checked);
+ }
+ view.setSonNodeCheckBox(setting, node, checked);
+ }
+ }
+ },
+ repairChkClass: function (setting, node) {
+ if (!node) return;
+ data.makeChkFlag(setting, node);
+ if (node.nocheck !== true) {
+ var checkObj = $$(node, consts.id.CHECK, setting);
+ view.setChkClass(setting, checkObj, node);
+ }
+ },
+ repairParentChkClass: function (setting, node) {
+ if (!node || !node.parentTId) return;
+ var pNode = node.getParentNode();
+ view.repairChkClass(setting, pNode);
+ view.repairParentChkClass(setting, pNode);
+ },
+ repairParentChkClassWithSelf: function (setting, node) {
+ if (!node) return;
+ var children = data.nodeChildren(setting, node);
+ if (children && children.length > 0) {
+ view.repairParentChkClass(setting, children[0]);
+ } else {
+ view.repairParentChkClass(setting, node);
+ }
+ },
+ repairSonChkDisabled: function (setting, node, chkDisabled, inherit) {
+ if (!node) return;
+ if (node.chkDisabled != chkDisabled) {
+ node.chkDisabled = chkDisabled;
+ }
+ view.repairChkClass(setting, node);
+ var children = data.nodeChildren(setting, node);
+ if (children && inherit) {
+ for (var i = 0, l = children.length; i < l; i++) {
+ var sNode = children[i];
+ view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit);
+ }
+ }
+ },
+ repairParentChkDisabled: function (setting, node, chkDisabled, inherit) {
+ if (!node) return;
+ if (node.chkDisabled != chkDisabled && inherit) {
+ node.chkDisabled = chkDisabled;
+ }
+ view.repairChkClass(setting, node);
+ view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit);
+ },
+ setChkClass: function (setting, obj, node) {
+ if (!obj) return;
+ if (node.nocheck === true) {
+ obj.hide();
+ } else {
+ obj.show();
+ }
+ obj.attr('class', view.makeChkClass(setting, node));
+ },
+ setParentNodeCheckBox: function (setting, node, value, srcNode) {
+ var checkObj = $$(node, consts.id.CHECK, setting);
+ if (!srcNode) srcNode = node;
+ data.makeChkFlag(setting, node);
+ if (node.nocheck !== true && node.chkDisabled !== true) {
+ data.nodeChecked(setting, node, value);
+ view.setChkClass(setting, checkObj, node);
+ if (setting.check.autoCheckTrigger && node != srcNode) {
+ setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);
+ }
+ }
+ if (node.parentTId) {
+ var pSign = true;
+ if (!value) {
+ var pNodes = data.nodeChildren(setting, node.getParentNode());
+ for (var i = 0, l = pNodes.length; i < l; i++) {
+ var pNode = pNodes[i];
+ var nodeChecked = data.nodeChecked(setting, pNode);
+ if ((pNode.nocheck !== true && pNode.chkDisabled !== true && nodeChecked)
+ || ((pNode.nocheck === true || pNode.chkDisabled === true) && pNode.check_Child_State > 0)) {
+ pSign = false;
+ break;
+ }
+ }
+ }
+ if (pSign) {
+ view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);
+ }
+ }
+ },
+ setSonNodeCheckBox: function (setting, node, value, srcNode) {
+ if (!node) return;
+ var checkObj = $$(node, consts.id.CHECK, setting);
+ if (!srcNode) srcNode = node;
+
+ var hasDisable = false;
+ var children = data.nodeChildren(setting, node);
+ if (children) {
+ for (var i = 0, l = children.length; i < l; i++) {
+ var sNode = children[i];
+ view.setSonNodeCheckBox(setting, sNode, value, srcNode);
+ if (sNode.chkDisabled === true) hasDisable = true;
+ }
+ }
+
+ if (node != data.getRoot(setting) && node.chkDisabled !== true) {
+ if (hasDisable && node.nocheck !== true) {
+ data.makeChkFlag(setting, node);
+ }
+ if (node.nocheck !== true && node.chkDisabled !== true) {
+ data.nodeChecked(setting, node, value);
+ if (!hasDisable) node.check_Child_State = (children && children.length > 0) ? (value ? 2 : 0) : -1;
+ } else {
+ node.check_Child_State = -1;
+ }
+ view.setChkClass(setting, checkObj, node);
+ if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) {
+ setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);
+ }
+ }
+
+ }
+ },
+
+ _z = {
+ tools: _tools,
+ view: _view,
+ event: _event,
+ data: _data
+ };
+ $.extend(true, $.fn.zTree.consts, _consts);
+ $.extend(true, $.fn.zTree._z, _z);
+
+ var zt = $.fn.zTree,
+ tools = zt._z.tools,
+ consts = zt.consts,
+ view = zt._z.view,
+ data = zt._z.data,
+ event = zt._z.event,
+ $$ = tools.$;
+
+ data.nodeChecked = function (setting, node, newChecked) {
+ if (!node) {
+ return false;
+ }
+ var key = setting.data.key.checked;
+ if (typeof newChecked !== 'undefined') {
+ if (typeof newChecked === "string") {
+ newChecked = tools.eqs(newChecked, "true");
+ }
+ newChecked = !!newChecked;
+ node[key] = newChecked;
+ } else if (typeof node[key] == "string"){
+ node[key] = tools.eqs(node[key], "true");
+ } else {
+ node[key] = !!node[key];
+ }
+ return node[key];
+ };
+
+ data.exSetting(_setting);
+ data.addInitBind(_bindEvent);
+ data.addInitUnBind(_unbindEvent);
+ data.addInitCache(_initCache);
+ data.addInitNode(_initNode);
+ data.addInitProxy(_eventProxy, true);
+ data.addInitRoot(_initRoot);
+ data.addBeforeA(_beforeA);
+ data.addZTreeTools(_zTreeTools);
+
+ var _createNodes = view.createNodes;
+ view.createNodes = function (setting, level, nodes, parentNode, index) {
+ if (_createNodes) _createNodes.apply(view, arguments);
+ if (!nodes) return;
+ view.repairParentChkClassWithSelf(setting, parentNode);
+ }
+ var _removeNode = view.removeNode;
+ view.removeNode = function (setting, node) {
+ var parentNode = node.getParentNode();
+ if (_removeNode) _removeNode.apply(view, arguments);
+ if (!node || !parentNode) return;
+ view.repairChkClass(setting, parentNode);
+ view.repairParentChkClass(setting, parentNode);
+ }
+
+ var _appendNodes = view.appendNodes;
+ view.appendNodes = function (setting, level, nodes, parentNode, index, initFlag, openFlag) {
+ var html = "";
+ if (_appendNodes) {
+ html = _appendNodes.apply(view, arguments);
+ }
+ if (parentNode) {
+ data.makeChkFlag(setting, parentNode);
+ }
+ return html;
+ }
+})(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.excheck.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exhide.min.js
===================================================================
--- base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exhide.min.js (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exhide.min.js (revision 10)
@@ -0,0 +1 @@
+!function(e){var i={view:{clearOldFirstNode:function(e,i){for(var o=i.getNextNode();o;){if(o.isFirstNode){o.isFirstNode=!1,c.setNodeLineIcos(e,o);break}if(o.isLastNode)break;o=o.getNextNode()}},clearOldLastNode:function(e,i,o){for(var d=i.getPreNode();d;){if(d.isLastNode){d.isLastNode=!1,o&&c.setNodeLineIcos(e,d);break}if(d.isFirstNode)break;d=d.getPreNode()}},makeDOMNodeMainBefore:function(e,i,o){var d=h.isHidden(i,o);e.push("<li ",d?"style='display:none;' ":"","id='",o.tId,"' class='",n.className.LEVEL,o.level,"' tabindex='0' hidefocus='true' treenode>")},showNode:function(e,i,o){h.isHidden(e,i,!1),h.initShowForExCheck(e,i),d(i,e).show()},showNodes:function(e,i,o){if(i&&0!=i.length){var d,t,n={};for(d=0,t=i.length;d<t;d++){var s=i[d];if(!n[s.parentTId]){var r=s.getParentNode();n[s.parentTId]=null===r?h.getRoot(e):s.getParentNode()}c.showNode(e,s,o)}for(var a in n){var N=h.nodeChildren(e,n[a]);c.setFirstNodeForShow(e,N),c.setLastNodeForShow(e,N)}}},hideNode:function(e,i,o){h.isHidden(e,i,!0),i.isFirstNode=!1,i.isLastNode=!1,h.initHideForExCheck(e,i),c.cancelPreSelectedNode(e,i),d(i,e).hide()},hideNodes:function(e,i,o){if(i&&0!=i.length){var d,t,n={};for(d=0,t=i.length;d<t;d++){var s=i[d];if((s.isFirstNode||s.isLastNode)&&!n[s.parentTId]){var r=s.getParentNode();n[s.parentTId]=null===r?h.getRoot(e):s.getParentNode()}c.hideNode(e,s,o)}for(var a in n){var N=h.nodeChildren(e,n[a]);c.setFirstNodeForHide(e,N),c.setLastNodeForHide(e,N)}}},setFirstNode:function(e,i){var o=h.nodeChildren(e,i),d=h.isHidden(e,o[0],!1);0<o.length&&!d?o[0].isFirstNode=!0:0<o.length&&c.setFirstNodeForHide(e,o)},setLastNode:function(e,i){var o=h.nodeChildren(e,i),d=h.isHidden(e,o[0]);0<o.length&&!d?o[o.length-1].isLastNode=!0:0<o.length&&c.setLastNodeForHide(e,o)},setFirstNodeForHide:function(e,i){var o,d,t;for(d=0,t=i.length;d<t&&!(o=i[d]).isFirstNode;d++){if(!h.isHidden(e,o)&&!o.isFirstNode){o.isFirstNode=!0,c.setNodeLineIcos(e,o);break}o=null}return o},setFirstNodeForShow:function(e,i){var o,d,t,n,s;for(d=0,t=i.length;d<t;d++){o=i[d];var r=h.isHidden(e,o);if(!n&&!r&&o.isFirstNode){n=o;break}if(n||r||o.isFirstNode){if(n&&o.isFirstNode){o.isFirstNode=!1,s=o,c.setNodeLineIcos(e,o);break}o=null}else o.isFirstNode=!0,n=o,c.setNodeLineIcos(e,o)}return{new:n,old:s}},setLastNodeForHide:function(e,i){var o,d;for(d=i.length-1;0<=d&&!(o=i[d]).isLastNode;d--){if(!h.isHidden(e,o)&&!o.isLastNode){o.isLastNode=!0,c.setNodeLineIcos(e,o);break}o=null}return o},setLastNodeForShow:function(e,i){var o,d,t,n;for(d=i.length-1;0<=d;d--){o=i[d];var s=h.isHidden(e,o);if(!t&&!s&&o.isLastNode){t=o;break}if(t||s||o.isLastNode){if(t&&o.isLastNode){o.isLastNode=!1,n=o,c.setNodeLineIcos(e,o);break}o=null}else o.isLastNode=!0,t=o,c.setNodeLineIcos(e,o)}return{new:t,old:n}}},data:{initHideForExCheck:function(e,i){h.isHidden(e,i)&&e.check&&e.check.enable&&(void 0===i._nocheck&&(i._nocheck=!!i.nocheck,i.nocheck=!0),i.check_Child_State=-1,c.repairParentChkClassWithSelf&&c.repairParentChkClassWithSelf(e,i))},initShowForExCheck:function(e,i){if(!h.isHidden(e,i)&&e.check&&e.check.enable){if(void 0!==i._nocheck&&(i.nocheck=i._nocheck,delete i._nocheck),c.setChkClass){var o=d(i,n.id.CHECK,e);c.setChkClass(e,o,i)}c.repairParentChkClassWithSelf&&c.repairParentChkClassWithSelf(e,i)}}}};e.extend(!0,e.fn.zTree._z,i);var o=e.fn.zTree,t=o._z.tools,n=o.consts,c=o._z.view,h=o._z.data,d=(o._z.event,t.$);h.isHidden=function(e,i,o){if(!i)return!1;var d=e.data.key.isHidden;return void 0!==o?("string"==typeof o&&(o=t.eqs(o,"true")),o=!!o,i[d]=o):"string"==typeof i[d]?i[d]=t.eqs(i[d],"true"):i[d]=!!i[d],i[d]},h.exSetting({data:{key:{isHidden:"isHidden"}}}),h.addInitNode(function(e,i,o,d,t,n,s){var r=h.isHidden(e,o);h.isHidden(e,o,r),h.initHideForExCheck(e,o)}),h.addBeforeA(function(e,i,o){}),h.addZTreeTools(function(t,n){n.showNodes=function(e,i){c.showNodes(t,e,i)},n.showNode=function(e,i){e&&c.showNodes(t,[e],i)},n.hideNodes=function(e,i){c.hideNodes(t,e,i)},n.hideNode=function(e,i){e&&c.hideNodes(t,[e],i)};var s=n.checkNode;s&&(n.checkNode=function(e,i,o,d){e&&h.isHidden(t,e)||s.apply(n,arguments)})});var a=h.initNode;h.initNode=function(e,i,o,d,t,n,s){var r=(d||h.getRoot(e))[e.data.key.children];h.tmpHideFirstNode=c.setFirstNodeForHide(e,r),h.tmpHideLastNode=c.setLastNodeForHide(e,r),s&&(c.setNodeLineIcos(e,h.tmpHideFirstNode),c.setNodeLineIcos(e,h.tmpHideLastNode)),t=h.tmpHideFirstNode===o,n=h.tmpHideLastNode===o,a&&a.apply(h,arguments),s&&n&&c.clearOldLastNode(e,o,s)};var s=h.makeChkFlag;s&&(h.makeChkFlag=function(e,i){i&&h.isHidden(e,i)||s.apply(h,arguments)});var r=h.getTreeCheckedNodes;r&&(h.getTreeCheckedNodes=function(e,i,o,d){if(i&&0<i.length){var t=i[0].getParentNode();if(t&&h.isHidden(e,t))return[]}return r.apply(h,arguments)});var N=h.getTreeChangeCheckedNodes;N&&(h.getTreeChangeCheckedNodes=function(e,i,o){if(i&&0<i.length){var d=i[0].getParentNode();if(d&&h.isHidden(e,d))return[]}return N.apply(h,arguments)});var l=c.expandCollapseSonNode;l&&(c.expandCollapseSonNode=function(e,i,o,d,t){i&&h.isHidden(e,i)||l.apply(c,arguments)});var f=c.setSonNodeCheckBox;f&&(c.setSonNodeCheckBox=function(e,i,o,d){i&&h.isHidden(e,i)||f.apply(c,arguments)});var u=c.repairParentChkClassWithSelf;u&&(c.repairParentChkClassWithSelf=function(e,i){i&&h.isHidden(e,i)||u.apply(c,arguments)})}(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exhide.min.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.all.js
===================================================================
--- base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.all.js (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.all.js (revision 10)
@@ -0,0 +1,3862 @@
+/*
+ * JQuery zTree core
+ * v3.5.43
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: 2020-04-04
+ */
+
+(function ($) {
+ var settings = {}, roots = {}, caches = {},
+ //default consts of core
+ _consts = {
+ className: {
+ BUTTON: "button",
+ LEVEL: "level",
+ ICO_LOADING: "ico_loading",
+ SWITCH: "switch",
+ NAME: 'node_name'
+ },
+ event: {
+ NODECREATED: "ztree_nodeCreated",
+ CLICK: "ztree_click",
+ EXPAND: "ztree_expand",
+ COLLAPSE: "ztree_collapse",
+ ASYNC_SUCCESS: "ztree_async_success",
+ ASYNC_ERROR: "ztree_async_error",
+ REMOVE: "ztree_remove",
+ SELECTED: "ztree_selected",
+ UNSELECTED: "ztree_unselected"
+ },
+ id: {
+ A: "_a",
+ ICON: "_ico",
+ SPAN: "_span",
+ SWITCH: "_switch",
+ UL: "_ul"
+ },
+ line: {
+ ROOT: "root",
+ ROOTS: "roots",
+ CENTER: "center",
+ BOTTOM: "bottom",
+ NOLINE: "noline",
+ LINE: "line"
+ },
+ folder: {
+ OPEN: "open",
+ CLOSE: "close",
+ DOCU: "docu"
+ },
+ node: {
+ CURSELECTED: "curSelectedNode"
+ }
+ },
+ //default setting of core
+ _setting = {
+ treeId: "",
+ treeObj: null,
+ view: {
+ addDiyDom: null,
+ autoCancelSelected: true,
+ dblClickExpand: true,
+ expandSpeed: "fast",
+ fontCss: {},
+ nodeClasses: {},
+ nameIsHTML: false,
+ selectedMulti: true,
+ showIcon: true,
+ showLine: true,
+ showTitle: true,
+ txtSelectedEnable: false
+ },
+ data: {
+ key: {
+ isParent: "isParent",
+ children: "children",
+ name: "name",
+ title: "",
+ url: "url",
+ icon: "icon"
+ },
+ simpleData: {
+ enable: false,
+ idKey: "id",
+ pIdKey: "pId",
+ rootPId: null
+ },
+ keep: {
+ parent: false,
+ leaf: false
+ }
+ },
+ async: {
+ enable: false,
+ contentType: "application/x-www-form-urlencoded",
+ type: "post",
+ dataType: "text",
+ headers: {},
+ xhrFields: {},
+ url: "",
+ autoParam: [],
+ otherParam: [],
+ dataFilter: null
+ },
+ callback: {
+ beforeAsync: null,
+ beforeClick: null,
+ beforeDblClick: null,
+ beforeRightClick: null,
+ beforeMouseDown: null,
+ beforeMouseUp: null,
+ beforeExpand: null,
+ beforeCollapse: null,
+ beforeRemove: null,
+
+ onAsyncError: null,
+ onAsyncSuccess: null,
+ onNodeCreated: null,
+ onClick: null,
+ onDblClick: null,
+ onRightClick: null,
+ onMouseDown: null,
+ onMouseUp: null,
+ onExpand: null,
+ onCollapse: null,
+ onRemove: null
+ }
+ },
+ //default root of core
+ //zTree use root to save full data
+ _initRoot = function (setting) {
+ var r = data.getRoot(setting);
+ if (!r) {
+ r = {};
+ data.setRoot(setting, r);
+ }
+ data.nodeChildren(setting, r, []);
+ r.expandTriggerFlag = false;
+ r.curSelectedList = [];
+ r.noSelection = true;
+ r.createdNodes = [];
+ r.zId = 0;
+ r._ver = (new Date()).getTime();
+ },
+ //default cache of core
+ _initCache = function (setting) {
+ var c = data.getCache(setting);
+ if (!c) {
+ c = {};
+ data.setCache(setting, c);
+ }
+ c.nodes = [];
+ c.doms = [];
+ },
+ //default bindEvent of core
+ _bindEvent = function (setting) {
+ var o = setting.treeObj,
+ c = consts.event;
+ o.bind(c.NODECREATED, function (event, treeId, node) {
+ tools.apply(setting.callback.onNodeCreated, [event, treeId, node]);
+ });
+
+ o.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) {
+ tools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]);
+ });
+
+ o.bind(c.EXPAND, function (event, treeId, node) {
+ tools.apply(setting.callback.onExpand, [event, treeId, node]);
+ });
+
+ o.bind(c.COLLAPSE, function (event, treeId, node) {
+ tools.apply(setting.callback.onCollapse, [event, treeId, node]);
+ });
+
+ o.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) {
+ tools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]);
+ });
+
+ o.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) {
+ tools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]);
+ });
+
+ o.bind(c.REMOVE, function (event, treeId, treeNode) {
+ tools.apply(setting.callback.onRemove, [event, treeId, treeNode]);
+ });
+
+ o.bind(c.SELECTED, function (event, treeId, node) {
+ tools.apply(setting.callback.onSelected, [treeId, node]);
+ });
+ o.bind(c.UNSELECTED, function (event, treeId, node) {
+ tools.apply(setting.callback.onUnSelected, [treeId, node]);
+ });
+ },
+ _unbindEvent = function (setting) {
+ var o = setting.treeObj,
+ c = consts.event;
+ o.unbind(c.NODECREATED)
+ .unbind(c.CLICK)
+ .unbind(c.EXPAND)
+ .unbind(c.COLLAPSE)
+ .unbind(c.ASYNC_SUCCESS)
+ .unbind(c.ASYNC_ERROR)
+ .unbind(c.REMOVE)
+ .unbind(c.SELECTED)
+ .unbind(c.UNSELECTED);
+ },
+ //default event proxy of core
+ _eventProxy = function (event) {
+ var target = event.target,
+ setting = data.getSetting(event.data.treeId),
+ tId = "", node = null,
+ nodeEventType = "", treeEventType = "",
+ nodeEventCallback = null, treeEventCallback = null,
+ tmp = null;
+
+ if (tools.eqs(event.type, "mousedown")) {
+ treeEventType = "mousedown";
+ } else if (tools.eqs(event.type, "mouseup")) {
+ treeEventType = "mouseup";
+ } else if (tools.eqs(event.type, "contextmenu")) {
+ treeEventType = "contextmenu";
+ } else if (tools.eqs(event.type, "click")) {
+ if (tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.SWITCH) !== null) {
+ tId = tools.getNodeMainDom(target).id;
+ nodeEventType = "switchNode";
+ } else {
+ tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (tmp) {
+ tId = tools.getNodeMainDom(tmp).id;
+ nodeEventType = "clickNode";
+ }
+ }
+ } else if (tools.eqs(event.type, "dblclick")) {
+ treeEventType = "dblclick";
+ tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (tmp) {
+ tId = tools.getNodeMainDom(tmp).id;
+ nodeEventType = "switchNode";
+ }
+ }
+ if (treeEventType.length > 0 && tId.length == 0) {
+ tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (tmp) {
+ tId = tools.getNodeMainDom(tmp).id;
+ }
+ }
+ // event to node
+ if (tId.length > 0) {
+ node = data.getNodeCache(setting, tId);
+ switch (nodeEventType) {
+ case "switchNode" :
+ var isParent = data.nodeIsParent(setting, node);
+ if (!isParent) {
+ nodeEventType = "";
+ } else if (tools.eqs(event.type, "click")
+ || (tools.eqs(event.type, "dblclick") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) {
+ nodeEventCallback = handler.onSwitchNode;
+ } else {
+ nodeEventType = "";
+ }
+ break;
+ case "clickNode" :
+ nodeEventCallback = handler.onClickNode;
+ break;
+ }
+ }
+ // event to zTree
+ switch (treeEventType) {
+ case "mousedown" :
+ treeEventCallback = handler.onZTreeMousedown;
+ break;
+ case "mouseup" :
+ treeEventCallback = handler.onZTreeMouseup;
+ break;
+ case "dblclick" :
+ treeEventCallback = handler.onZTreeDblclick;
+ break;
+ case "contextmenu" :
+ treeEventCallback = handler.onZTreeContextmenu;
+ break;
+ }
+ var proxyResult = {
+ stop: false,
+ node: node,
+ nodeEventType: nodeEventType,
+ nodeEventCallback: nodeEventCallback,
+ treeEventType: treeEventType,
+ treeEventCallback: treeEventCallback
+ };
+ return proxyResult
+ },
+ //default init node of core
+ _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
+ if (!n) return;
+ var r = data.getRoot(setting),
+ children = data.nodeChildren(setting, n);
+ n.level = level;
+ n.tId = setting.treeId + "_" + (++r.zId);
+ n.parentTId = parentNode ? parentNode.tId : null;
+ n.open = (typeof n.open == "string") ? tools.eqs(n.open, "true") : !!n.open;
+ var isParent = data.nodeIsParent(setting, n);
+ if (tools.isArray(children)) {
+ data.nodeIsParent(setting, n, true);
+ n.zAsync = true;
+ } else {
+ isParent = data.nodeIsParent(setting, n, isParent);
+ n.open = (isParent && !setting.async.enable) ? n.open : false;
+ n.zAsync = !isParent;
+ }
+ n.isFirstNode = isFirstNode;
+ n.isLastNode = isLastNode;
+ n.getParentNode = function () {
+ return data.getNodeCache(setting, n.parentTId);
+ };
+ n.getPreNode = function () {
+ return data.getPreNode(setting, n);
+ };
+ n.getNextNode = function () {
+ return data.getNextNode(setting, n);
+ };
+ n.getIndex = function () {
+ return data.getNodeIndex(setting, n);
+ };
+ n.getPath = function () {
+ return data.getNodePath(setting, n);
+ };
+ n.isAjaxing = false;
+ data.fixPIdKeyValue(setting, n);
+ },
+ _init = {
+ bind: [_bindEvent],
+ unbind: [_unbindEvent],
+ caches: [_initCache],
+ nodes: [_initNode],
+ proxys: [_eventProxy],
+ roots: [_initRoot],
+ beforeA: [],
+ afterA: [],
+ innerBeforeA: [],
+ innerAfterA: [],
+ zTreeTools: []
+ },
+ //method of operate data
+ data = {
+ addNodeCache: function (setting, node) {
+ data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node;
+ },
+ getNodeCacheId: function (tId) {
+ return tId.substring(tId.lastIndexOf("_") + 1);
+ },
+ addAfterA: function (afterA) {
+ _init.afterA.push(afterA);
+ },
+ addBeforeA: function (beforeA) {
+ _init.beforeA.push(beforeA);
+ },
+ addInnerAfterA: function (innerAfterA) {
+ _init.innerAfterA.push(innerAfterA);
+ },
+ addInnerBeforeA: function (innerBeforeA) {
+ _init.innerBeforeA.push(innerBeforeA);
+ },
+ addInitBind: function (bindEvent) {
+ _init.bind.push(bindEvent);
+ },
+ addInitUnBind: function (unbindEvent) {
+ _init.unbind.push(unbindEvent);
+ },
+ addInitCache: function (initCache) {
+ _init.caches.push(initCache);
+ },
+ addInitNode: function (initNode) {
+ _init.nodes.push(initNode);
+ },
+ addInitProxy: function (initProxy, isFirst) {
+ if (!!isFirst) {
+ _init.proxys.splice(0, 0, initProxy);
+ } else {
+ _init.proxys.push(initProxy);
+ }
+ },
+ addInitRoot: function (initRoot) {
+ _init.roots.push(initRoot);
+ },
+ addNodesData: function (setting, parentNode, index, nodes) {
+ var children = data.nodeChildren(setting, parentNode), params;
+ if (!children) {
+ children = data.nodeChildren(setting, parentNode, []);
+ index = -1;
+ } else if (index >= children.length) {
+ index = -1;
+ }
+
+ if (children.length > 0 && index === 0) {
+ children[0].isFirstNode = false;
+ view.setNodeLineIcos(setting, children[0]);
+ } else if (children.length > 0 && index < 0) {
+ children[children.length - 1].isLastNode = false;
+ view.setNodeLineIcos(setting, children[children.length - 1]);
+ }
+ data.nodeIsParent(setting, parentNode, true);
+
+ if (index < 0) {
+ data.nodeChildren(setting, parentNode, children.concat(nodes));
+ } else {
+ params = [index, 0].concat(nodes);
+ children.splice.apply(children, params);
+ }
+ },
+ addSelectedNode: function (setting, node) {
+ var root = data.getRoot(setting);
+ if (!data.isSelectedNode(setting, node)) {
+ root.curSelectedList.push(node);
+ }
+ },
+ addCreatedNode: function (setting, node) {
+ if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {
+ var root = data.getRoot(setting);
+ root.createdNodes.push(node);
+ }
+ },
+ addZTreeTools: function (zTreeTools) {
+ _init.zTreeTools.push(zTreeTools);
+ },
+ exSetting: function (s) {
+ $.extend(true, _setting, s);
+ },
+ fixPIdKeyValue: function (setting, node) {
+ if (setting.data.simpleData.enable) {
+ node[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId;
+ }
+ },
+ getAfterA: function (setting, node, array) {
+ for (var i = 0, j = _init.afterA.length; i < j; i++) {
+ _init.afterA[i].apply(this, arguments);
+ }
+ },
+ getBeforeA: function (setting, node, array) {
+ for (var i = 0, j = _init.beforeA.length; i < j; i++) {
+ _init.beforeA[i].apply(this, arguments);
+ }
+ },
+ getInnerAfterA: function (setting, node, array) {
+ for (var i = 0, j = _init.innerAfterA.length; i < j; i++) {
+ _init.innerAfterA[i].apply(this, arguments);
+ }
+ },
+ getInnerBeforeA: function (setting, node, array) {
+ for (var i = 0, j = _init.innerBeforeA.length; i < j; i++) {
+ _init.innerBeforeA[i].apply(this, arguments);
+ }
+ },
+ getCache: function (setting) {
+ return caches[setting.treeId];
+ },
+ getNodeIndex: function (setting, node) {
+ if (!node) return null;
+ var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
+ children = data.nodeChildren(setting, p);
+ for (var i = 0, l = children.length - 1; i <= l; i++) {
+ if (children[i] === node) {
+ return i;
+ }
+ }
+ return -1;
+ },
+ getNextNode: function (setting, node) {
+ if (!node) return null;
+ var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
+ children = data.nodeChildren(setting, p);
+ for (var i = 0, l = children.length - 1; i <= l; i++) {
+ if (children[i] === node) {
+ return (i == l ? null : children[i + 1]);
+ }
+ }
+ return null;
+ },
+ getNodeByParam: function (setting, nodes, key, value) {
+ if (!nodes || !key) return null;
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ if (node[key] == value) {
+ return nodes[i];
+ }
+ var children = data.nodeChildren(setting, node);
+ var tmp = data.getNodeByParam(setting, children, key, value);
+ if (tmp) return tmp;
+ }
+ return null;
+ },
+ getNodeCache: function (setting, tId) {
+ if (!tId) return null;
+ var n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)];
+ return n ? n : null;
+ },
+ getNodePath: function (setting, node) {
+ if (!node) return null;
+
+ var path;
+ if (node.parentTId) {
+ path = node.getParentNode().getPath();
+ } else {
+ path = [];
+ }
+
+ if (path) {
+ path.push(node);
+ }
+
+ return path;
+ },
+ getNodes: function (setting) {
+ return data.nodeChildren(setting, data.getRoot(setting));
+ },
+ getNodesByParam: function (setting, nodes, key, value) {
+ if (!nodes || !key) return [];
+ var result = [];
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ if (node[key] == value) {
+ result.push(node);
+ }
+ var children = data.nodeChildren(setting, node);
+ result = result.concat(data.getNodesByParam(setting, children, key, value));
+ }
+ return result;
+ },
+ getNodesByParamFuzzy: function (setting, nodes, key, value) {
+ if (!nodes || !key) return [];
+ var result = [];
+ value = value.toLowerCase();
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ if (typeof node[key] == "string" && nodes[i][key].toLowerCase().indexOf(value) > -1) {
+ result.push(node);
+ }
+ var children = data.nodeChildren(setting, node);
+ result = result.concat(data.getNodesByParamFuzzy(setting, children, key, value));
+ }
+ return result;
+ },
+ getNodesByFilter: function (setting, nodes, filter, isSingle, invokeParam) {
+ if (!nodes) return (isSingle ? null : []);
+ var result = isSingle ? null : [];
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ if (tools.apply(filter, [node, invokeParam], false)) {
+ if (isSingle) {
+ return node;
+ }
+ result.push(node);
+ }
+ var children = data.nodeChildren(setting, node);
+ var tmpResult = data.getNodesByFilter(setting, children, filter, isSingle, invokeParam);
+ if (isSingle && !!tmpResult) {
+ return tmpResult;
+ }
+ result = isSingle ? tmpResult : result.concat(tmpResult);
+ }
+ return result;
+ },
+ getPreNode: function (setting, node) {
+ if (!node) return null;
+ var p = node.parentTId ? node.getParentNode() : data.getRoot(setting),
+ children = data.nodeChildren(setting, p);
+ for (var i = 0, l = children.length; i < l; i++) {
+ if (children[i] === node) {
+ return (i == 0 ? null : children[i - 1]);
+ }
+ }
+ return null;
+ },
+ getRoot: function (setting) {
+ return setting ? roots[setting.treeId] : null;
+ },
+ getRoots: function () {
+ return roots;
+ },
+ getSetting: function (treeId) {
+ return settings[treeId];
+ },
+ getSettings: function () {
+ return settings;
+ },
+ getZTreeTools: function (treeId) {
+ var r = this.getRoot(this.getSetting(treeId));
+ return r ? r.treeTools : null;
+ },
+ initCache: function (setting) {
+ for (var i = 0, j = _init.caches.length; i < j; i++) {
+ _init.caches[i].apply(this, arguments);
+ }
+ },
+ initNode: function (setting, level, node, parentNode, preNode, nextNode) {
+ for (var i = 0, j = _init.nodes.length; i < j; i++) {
+ _init.nodes[i].apply(this, arguments);
+ }
+ },
+ initRoot: function (setting) {
+ for (var i = 0, j = _init.roots.length; i < j; i++) {
+ _init.roots[i].apply(this, arguments);
+ }
+ },
+ isSelectedNode: function (setting, node) {
+ var root = data.getRoot(setting);
+ for (var i = 0, j = root.curSelectedList.length; i < j; i++) {
+ if (node === root.curSelectedList[i]) return true;
+ }
+ return false;
+ },
+ nodeChildren: function (setting, node, newChildren) {
+ if (!node) {
+ return null;
+ }
+ var key = setting.data.key.children;
+ if (typeof newChildren !== 'undefined') {
+ node[key] = newChildren;
+ }
+ return node[key];
+ },
+ nodeIsParent: function (setting, node, newIsParent) {
+ if (!node) {
+ return false;
+ }
+ var key = setting.data.key.isParent;
+ if (typeof newIsParent !== 'undefined') {
+ if (typeof newIsParent === "string") {
+ newIsParent = tools.eqs(newIsParent, "true");
+ }
+ newIsParent = !!newIsParent;
+ node[key] = newIsParent;
+ } else if (typeof node[key] == "string"){
+ node[key] = tools.eqs(node[key], "true");
+ } else {
+ node[key] = !!node[key];
+ }
+ return node[key];
+ },
+ nodeName: function (setting, node, newName) {
+ var key = setting.data.key.name;
+ if (typeof newName !== 'undefined') {
+ node[key] = newName;
+ }
+ return "" + node[key];
+ },
+ nodeTitle: function (setting, node) {
+ var t = setting.data.key.title === "" ? setting.data.key.name : setting.data.key.title;
+ return "" + node[t];
+ },
+ removeNodeCache: function (setting, node) {
+ var children = data.nodeChildren(setting, node);
+ if (children) {
+ for (var i = 0, l = children.length; i < l; i++) {
+ data.removeNodeCache(setting, children[i]);
+ }
+ }
+ data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null;
+ },
+ removeSelectedNode: function (setting, node) {
+ var root = data.getRoot(setting);
+ for (var i = 0, j = root.curSelectedList.length; i < j; i++) {
+ if (node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) {
+ root.curSelectedList.splice(i, 1);
+ setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]);
+ i--;
+ j--;
+ }
+ }
+ },
+ setCache: function (setting, cache) {
+ caches[setting.treeId] = cache;
+ },
+ setRoot: function (setting, root) {
+ roots[setting.treeId] = root;
+ },
+ setZTreeTools: function (setting, zTreeTools) {
+ for (var i = 0, j = _init.zTreeTools.length; i < j; i++) {
+ _init.zTreeTools[i].apply(this, arguments);
+ }
+ },
+ transformToArrayFormat: function (setting, nodes) {
+ if (!nodes) return [];
+ var r = [];
+ if (tools.isArray(nodes)) {
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ _do(node);
+ }
+ } else {
+ _do(nodes);
+ }
+ return r;
+
+ function _do(_node) {
+ r.push(_node);
+ var children = data.nodeChildren(setting, _node);
+ if (children) {
+ r = r.concat(data.transformToArrayFormat(setting, children));
+ }
+ }
+ },
+ transformTozTreeFormat: function (setting, sNodes) {
+ var i, l,
+ key = setting.data.simpleData.idKey,
+ parentKey = setting.data.simpleData.pIdKey;
+ if (!key || key == "" || !sNodes) return [];
+
+ if (tools.isArray(sNodes)) {
+ var r = [];
+ var tmpMap = {};
+ for (i = 0, l = sNodes.length; i < l; i++) {
+ tmpMap[sNodes[i][key]] = sNodes[i];
+ }
+ for (i = 0, l = sNodes.length; i < l; i++) {
+ var p = tmpMap[sNodes[i][parentKey]];
+ if (p && sNodes[i][key] != sNodes[i][parentKey]) {
+ var children = data.nodeChildren(setting, p);
+ if (!children) {
+ children = data.nodeChildren(setting, p, []);
+ }
+ children.push(sNodes[i]);
+ } else {
+ r.push(sNodes[i]);
+ }
+ }
+ return r;
+ } else {
+ return [sNodes];
+ }
+ }
+ },
+ //method of event proxy
+ event = {
+ bindEvent: function (setting) {
+ for (var i = 0, j = _init.bind.length; i < j; i++) {
+ _init.bind[i].apply(this, arguments);
+ }
+ },
+ unbindEvent: function (setting) {
+ for (var i = 0, j = _init.unbind.length; i < j; i++) {
+ _init.unbind[i].apply(this, arguments);
+ }
+ },
+ bindTree: function (setting) {
+ var eventParam = {
+ treeId: setting.treeId
+ },
+ o = setting.treeObj;
+ if (!setting.view.txtSelectedEnable) {
+ // for can't select text
+ o.bind('selectstart', handler.onSelectStart).css({
+ "-moz-user-select": "-moz-none"
+ });
+ }
+ o.bind('click', eventParam, event.proxy);
+ o.bind('dblclick', eventParam, event.proxy);
+ o.bind('mouseover', eventParam, event.proxy);
+ o.bind('mouseout', eventParam, event.proxy);
+ o.bind('mousedown', eventParam, event.proxy);
+ o.bind('mouseup', eventParam, event.proxy);
+ o.bind('contextmenu', eventParam, event.proxy);
+ },
+ unbindTree: function (setting) {
+ var o = setting.treeObj;
+ o.unbind('selectstart', handler.onSelectStart)
+ .unbind('click', event.proxy)
+ .unbind('dblclick', event.proxy)
+ .unbind('mouseover', event.proxy)
+ .unbind('mouseout', event.proxy)
+ .unbind('mousedown', event.proxy)
+ .unbind('mouseup', event.proxy)
+ .unbind('contextmenu', event.proxy);
+ },
+ doProxy: function (e) {
+ var results = [];
+ for (var i = 0, j = _init.proxys.length; i < j; i++) {
+ var proxyResult = _init.proxys[i].apply(this, arguments);
+ results.push(proxyResult);
+ if (proxyResult.stop) {
+ break;
+ }
+ }
+ return results;
+ },
+ proxy: function (e) {
+ var setting = data.getSetting(e.data.treeId);
+ if (!tools.uCanDo(setting, e)) return true;
+ var results = event.doProxy(e),
+ r = true, x = false;
+ for (var i = 0, l = results.length; i < l; i++) {
+ var proxyResult = results[i];
+ if (proxyResult.nodeEventCallback) {
+ x = true;
+ r = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;
+ }
+ if (proxyResult.treeEventCallback) {
+ x = true;
+ r = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;
+ }
+ }
+ return r;
+ }
+ },
+ //method of event handler
+ handler = {
+ onSwitchNode: function (event, node) {
+ var setting = data.getSetting(event.data.treeId);
+ if (node.open) {
+ if (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true;
+ data.getRoot(setting).expandTriggerFlag = true;
+ view.switchNode(setting, node);
+ } else {
+ if (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true;
+ data.getRoot(setting).expandTriggerFlag = true;
+ view.switchNode(setting, node);
+ }
+ return true;
+ },
+ onClickNode: function (event, node) {
+ var setting = data.getSetting(event.data.treeId),
+ clickFlag = ((setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey)) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey) && setting.view.selectedMulti) ? 2 : 1;
+ if (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true;
+ if (clickFlag === 0) {
+ view.cancelPreSelectedNode(setting, node);
+ } else {
+ view.selectNode(setting, node, clickFlag === 2);
+ }
+ setting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]);
+ return true;
+ },
+ onZTreeMousedown: function (event, node) {
+ var setting = data.getSetting(event.data.treeId);
+ if (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) {
+ tools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]);
+ }
+ return true;
+ },
+ onZTreeMouseup: function (event, node) {
+ var setting = data.getSetting(event.data.treeId);
+ if (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) {
+ tools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]);
+ }
+ return true;
+ },
+ onZTreeDblclick: function (event, node) {
+ var setting = data.getSetting(event.data.treeId);
+ if (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) {
+ tools.apply(setting.callback.onDblClick, [event, setting.treeId, node]);
+ }
+ return true;
+ },
+ onZTreeContextmenu: function (event, node) {
+ var setting = data.getSetting(event.data.treeId);
+ if (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) {
+ tools.apply(setting.callback.onRightClick, [event, setting.treeId, node]);
+ }
+ return (typeof setting.callback.onRightClick) != "function";
+ },
+ onSelectStart: function (e) {
+ var n = e.originalEvent.srcElement.nodeName.toLowerCase();
+ return (n === "input" || n === "textarea");
+ }
+ },
+ //method of tools for zTree
+ tools = {
+ apply: function (fun, param, defaultValue) {
+ if ((typeof fun) == "function") {
+ return fun.apply(zt, param ? param : []);
+ }
+ return defaultValue;
+ },
+ canAsync: function (setting, node) {
+ var children = data.nodeChildren(setting, node);
+ var isParent = data.nodeIsParent(setting, node);
+ return (setting.async.enable && node && isParent && !(node.zAsync || (children && children.length > 0)));
+ },
+ clone: function (obj) {
+ if (obj === null) return null;
+ var o = tools.isArray(obj) ? [] : {};
+ for (var i in obj) {
+ o[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === "object" ? tools.clone(obj[i]) : obj[i]);
+ }
+ return o;
+ },
+ eqs: function (str1, str2) {
+ return str1.toLowerCase() === str2.toLowerCase();
+ },
+ isArray: function (arr) {
+ return Object.prototype.toString.apply(arr) === "[object Array]";
+ },
+ isElement: function (o) {
+ return (
+ typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2
+ o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string"
+ );
+ },
+ $: function (node, exp, setting) {
+ if (!!exp && typeof exp != "string") {
+ setting = exp;
+ exp = "";
+ }
+ if (typeof node == "string") {
+ return $(node, setting ? setting.treeObj.get(0).ownerDocument : null);
+ } else {
+ return $("#" + node.tId + exp, setting ? setting.treeObj : null);
+ }
+ },
+ getMDom: function (setting, curDom, targetExpr) {
+ if (!curDom) return null;
+ while (curDom && curDom.id !== setting.treeId) {
+ for (var i = 0, l = targetExpr.length; curDom.tagName && i < l; i++) {
+ if (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) {
+ return curDom;
+ }
+ }
+ curDom = curDom.parentNode;
+ }
+ return null;
+ },
+ getNodeMainDom: function (target) {
+ return ($(target).parent("li").get(0) || $(target).parentsUntil("li").parent().get(0));
+ },
+ isChildOrSelf: function (dom, parentId) {
+ return ($(dom).closest("#" + parentId).length > 0);
+ },
+ uCanDo: function (setting, e) {
+ return true;
+ }
+ },
+ //method of operate ztree dom
+ view = {
+ addNodes: function (setting, parentNode, index, newNodes, isSilent) {
+ var isParent = data.nodeIsParent(setting, parentNode);
+ if (setting.data.keep.leaf && parentNode && !isParent) {
+ return;
+ }
+ if (!tools.isArray(newNodes)) {
+ newNodes = [newNodes];
+ }
+ if (setting.data.simpleData.enable) {
+ newNodes = data.transformTozTreeFormat(setting, newNodes);
+ }
+ if (parentNode) {
+ var target_switchObj = $$(parentNode, consts.id.SWITCH, setting),
+ target_icoObj = $$(parentNode, consts.id.ICON, setting),
+ target_ulObj = $$(parentNode, consts.id.UL, setting);
+
+ if (!parentNode.open) {
+ view.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE);
+ view.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE);
+ parentNode.open = false;
+ target_ulObj.css({
+ "display": "none"
+ });
+ }
+
+ data.addNodesData(setting, parentNode, index, newNodes);
+ view.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index);
+ if (!isSilent) {
+ view.expandCollapseParentNode(setting, parentNode, true);
+ }
+ } else {
+ data.addNodesData(setting, data.getRoot(setting), index, newNodes);
+ view.createNodes(setting, 0, newNodes, null, index);
+ }
+ },
+ appendNodes: function (setting, level, nodes, parentNode, index, initFlag, openFlag) {
+ if (!nodes) return [];
+ var html = [];
+
+ var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting),
+ tmpPChild = data.nodeChildren(setting, tmpPNode),
+ isFirstNode, isLastNode;
+
+ if (!tmpPChild || index >= tmpPChild.length - nodes.length) {
+ index = -1;
+ }
+
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ if (initFlag) {
+ isFirstNode = ((index === 0 || tmpPChild.length == nodes.length) && (i == 0));
+ isLastNode = (index < 0 && i == (nodes.length - 1));
+ data.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag);
+ data.addNodeCache(setting, node);
+ }
+ var isParent = data.nodeIsParent(setting, node);
+
+ var childHtml = [];
+ var children = data.nodeChildren(setting, node);
+ if (children && children.length > 0) {
+ //make child html first, because checkType
+ childHtml = view.appendNodes(setting, level + 1, children, node, -1, initFlag, openFlag && node.open);
+ }
+ if (openFlag) {
+ view.makeDOMNodeMainBefore(html, setting, node);
+ view.makeDOMNodeLine(html, setting, node);
+ data.getBeforeA(setting, node, html);
+ view.makeDOMNodeNameBefore(html, setting, node);
+ data.getInnerBeforeA(setting, node, html);
+ view.makeDOMNodeIcon(html, setting, node);
+ data.getInnerAfterA(setting, node, html);
+ view.makeDOMNodeNameAfter(html, setting, node);
+ data.getAfterA(setting, node, html);
+ if (isParent && node.open) {
+ view.makeUlHtml(setting, node, html, childHtml.join(''));
+ }
+ view.makeDOMNodeMainAfter(html, setting, node);
+ data.addCreatedNode(setting, node);
+ }
+ }
+ return html;
+ },
+ appendParentULDom: function (setting, node) {
+ var html = [],
+ nObj = $$(node, setting);
+ if (!nObj.get(0) && !!node.parentTId) {
+ view.appendParentULDom(setting, node.getParentNode());
+ nObj = $$(node, setting);
+ }
+ var ulObj = $$(node, consts.id.UL, setting);
+ if (ulObj.get(0)) {
+ ulObj.remove();
+ }
+ var children = data.nodeChildren(setting, node),
+ childHtml = view.appendNodes(setting, node.level + 1, children, node, -1, false, true);
+ view.makeUlHtml(setting, node, html, childHtml.join(''));
+ nObj.append(html.join(''));
+ },
+ asyncNode: function (setting, node, isSilent, callback) {
+ var i, l;
+ var isParent = data.nodeIsParent(setting, node);
+ if (node && !isParent) {
+ tools.apply(callback);
+ return false;
+ } else if (node && node.isAjaxing) {
+ return false;
+ } else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) {
+ tools.apply(callback);
+ return false;
+ }
+ if (node) {
+ node.isAjaxing = true;
+ var icoObj = $$(node, consts.id.ICON, setting);
+ icoObj.attr({"style": "", "class": consts.className.BUTTON + " " + consts.className.ICO_LOADING});
+ }
+
+ var tmpParam = {};
+ var autoParam = tools.apply(setting.async.autoParam, [setting.treeId, node], setting.async.autoParam);
+ for (i = 0, l = autoParam.length; node && i < l; i++) {
+ var pKey = autoParam[i].split("="), spKey = pKey;
+ if (pKey.length > 1) {
+ spKey = pKey[1];
+ pKey = pKey[0];
+ }
+ tmpParam[spKey] = node[pKey];
+ }
+ var otherParam = tools.apply(setting.async.otherParam, [setting.treeId, node], setting.async.otherParam);
+ if (tools.isArray(otherParam)) {
+ for (i = 0, l = otherParam.length; i < l; i += 2) {
+ tmpParam[otherParam[i]] = otherParam[i + 1];
+ }
+ } else {
+ for (var p in otherParam) {
+ tmpParam[p] = otherParam[p];
+ }
+ }
+
+ var _tmpV = data.getRoot(setting)._ver;
+ $.ajax({
+ contentType: setting.async.contentType,
+ cache: false,
+ type: setting.async.type,
+ url: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url),
+ data: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam,
+ dataType: setting.async.dataType,
+ headers: setting.async.headers,
+ xhrFields: setting.async.xhrFields,
+ success: function (msg) {
+ if (_tmpV != data.getRoot(setting)._ver) {
+ return;
+ }
+ var newNodes = [];
+ try {
+ if (!msg || msg.length == 0) {
+ newNodes = [];
+ } else if (typeof msg == "string") {
+ newNodes = eval("(" + msg + ")");
+ } else {
+ newNodes = msg;
+ }
+ } catch (err) {
+ newNodes = msg;
+ }
+
+ if (node) {
+ node.isAjaxing = null;
+ node.zAsync = true;
+ }
+ view.setNodeLineIcos(setting, node);
+ if (newNodes && newNodes !== "") {
+ newNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes);
+ view.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent);
+ } else {
+ view.addNodes(setting, node, -1, [], !!isSilent);
+ }
+ setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]);
+ tools.apply(callback);
+ },
+ error: function (XMLHttpRequest, textStatus, errorThrown) {
+ if (_tmpV != data.getRoot(setting)._ver) {
+ return;
+ }
+ if (node) node.isAjaxing = null;
+ view.setNodeLineIcos(setting, node);
+ setting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]);
+ }
+ });
+ return true;
+ },
+ cancelPreSelectedNode: function (setting, node, excludeNode) {
+ var list = data.getRoot(setting).curSelectedList,
+ i, n;
+ for (i = list.length - 1; i >= 0; i--) {
+ n = list[i];
+ if (node === n || (!node && (!excludeNode || excludeNode !== n))) {
+ $$(n, consts.id.A, setting).removeClass(consts.node.CURSELECTED);
+ if (node) {
+ data.removeSelectedNode(setting, node);
+ break;
+ } else {
+ list.splice(i, 1);
+ setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]);
+ }
+ }
+ }
+ },
+ createNodeCallback: function (setting) {
+ if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {
+ var root = data.getRoot(setting);
+ while (root.createdNodes.length > 0) {
+ var node = root.createdNodes.shift();
+ tools.apply(setting.view.addDiyDom, [setting.treeId, node]);
+ if (!!setting.callback.onNodeCreated) {
+ setting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]);
+ }
+ }
+ }
+ },
+ createNodes: function (setting, level, nodes, parentNode, index) {
+ if (!nodes || nodes.length == 0) return;
+ var root = data.getRoot(setting),
+ openFlag = !parentNode || parentNode.open || !!$$(data.nodeChildren(setting, parentNode)[0], setting).get(0);
+ root.createdNodes = [];
+ var zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag),
+ parentObj, nextObj;
+
+ if (!parentNode) {
+ parentObj = setting.treeObj;
+ //setting.treeObj.append(zTreeHtml.join(''));
+ } else {
+ var ulObj = $$(parentNode, consts.id.UL, setting);
+ if (ulObj.get(0)) {
+ parentObj = ulObj;
+ //ulObj.append(zTreeHtml.join(''));
+ }
+ }
+ if (parentObj) {
+ if (index >= 0) {
+ nextObj = parentObj.children()[index];
+ }
+ if (index >= 0 && nextObj) {
+ $(nextObj).before(zTreeHtml.join(''));
+ } else {
+ parentObj.append(zTreeHtml.join(''));
+ }
+ }
+
+ view.createNodeCallback(setting);
+ },
+ destroy: function (setting) {
+ if (!setting) return;
+ data.initCache(setting);
+ data.initRoot(setting);
+ event.unbindTree(setting);
+ event.unbindEvent(setting);
+ setting.treeObj.empty();
+ delete settings[setting.treeId];
+ },
+ expandCollapseNode: function (setting, node, expandFlag, animateFlag, callback) {
+ var root = data.getRoot(setting);
+ var tmpCb, _callback;
+ if (!node) {
+ tools.apply(callback, []);
+ return;
+ }
+ var children = data.nodeChildren(setting, node);
+ var isParent = data.nodeIsParent(setting, node);
+ if (root.expandTriggerFlag) {
+ _callback = callback;
+ tmpCb = function () {
+ if (_callback) _callback();
+ if (node.open) {
+ setting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]);
+ } else {
+ setting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]);
+ }
+ };
+ callback = tmpCb;
+ root.expandTriggerFlag = false;
+ }
+ if (!node.open && isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (children && children.length > 0 && !$$(children[0], setting).get(0)))) {
+ view.appendParentULDom(setting, node);
+ view.createNodeCallback(setting);
+ }
+ if (node.open == expandFlag) {
+ tools.apply(callback, []);
+ return;
+ }
+ var ulObj = $$(node, consts.id.UL, setting),
+ switchObj = $$(node, consts.id.SWITCH, setting),
+ icoObj = $$(node, consts.id.ICON, setting);
+
+ if (isParent) {
+ node.open = !node.open;
+ if (node.iconOpen && node.iconClose) {
+ icoObj.attr("style", view.makeNodeIcoStyle(setting, node));
+ }
+
+ if (node.open) {
+ view.replaceSwitchClass(node, switchObj, consts.folder.OPEN);
+ view.replaceIcoClass(node, icoObj, consts.folder.OPEN);
+ if (animateFlag == false || setting.view.expandSpeed == "") {
+ ulObj.show();
+ tools.apply(callback, []);
+ } else {
+ if (children && children.length > 0) {
+ ulObj.slideDown(setting.view.expandSpeed, callback);
+ } else {
+ ulObj.show();
+ tools.apply(callback, []);
+ }
+ }
+ } else {
+ view.replaceSwitchClass(node, switchObj, consts.folder.CLOSE);
+ view.replaceIcoClass(node, icoObj, consts.folder.CLOSE);
+ if (animateFlag == false || setting.view.expandSpeed == "" || !(children && children.length > 0)) {
+ ulObj.hide();
+ tools.apply(callback, []);
+ } else {
+ ulObj.slideUp(setting.view.expandSpeed, callback);
+ }
+ }
+ } else {
+ tools.apply(callback, []);
+ }
+ },
+ expandCollapseParentNode: function (setting, node, expandFlag, animateFlag, callback) {
+ if (!node) return;
+ if (!node.parentTId) {
+ view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);
+ return;
+ } else {
+ view.expandCollapseNode(setting, node, expandFlag, animateFlag);
+ }
+ if (node.parentTId) {
+ view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback);
+ }
+ },
+ expandCollapseSonNode: function (setting, node, expandFlag, animateFlag, callback) {
+ var root = data.getRoot(setting),
+ treeNodes = (node) ? data.nodeChildren(setting, node) : data.nodeChildren(setting, root),
+ selfAnimateSign = (node) ? false : animateFlag,
+ expandTriggerFlag = data.getRoot(setting).expandTriggerFlag;
+ data.getRoot(setting).expandTriggerFlag = false;
+ if (treeNodes) {
+ for (var i = 0, l = treeNodes.length; i < l; i++) {
+ if (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign);
+ }
+ }
+ data.getRoot(setting).expandTriggerFlag = expandTriggerFlag;
+ view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);
+ },
+ isSelectedNode: function (setting, node) {
+ if (!node) {
+ return false;
+ }
+ var list = data.getRoot(setting).curSelectedList,
+ i;
+ for (i = list.length - 1; i >= 0; i--) {
+ if (node === list[i]) {
+ return true;
+ }
+ }
+ return false;
+ },
+ makeDOMNodeIcon: function (html, setting, node) {
+ var nameStr = data.nodeName(setting, node),
+ name = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
+ html.push("<span id='", node.tId, consts.id.ICON,
+ "' title='' treeNode", consts.id.ICON, " class='", view.makeNodeIcoClass(setting, node),
+ "' style='", view.makeNodeIcoStyle(setting, node), "'></span><span id='", node.tId, consts.id.SPAN,
+ "' class='", consts.className.NAME,
+ "'>", name, "</span>");
+ },
+ makeDOMNodeLine: function (html, setting, node) {
+ html.push("<span id='", node.tId, consts.id.SWITCH, "' title='' class='", view.makeNodeLineClass(setting, node), "' treeNode", consts.id.SWITCH, "></span>");
+ },
+ makeDOMNodeMainAfter: function (html, setting, node) {
+ html.push("</li>");
+ },
+ makeDOMNodeMainBefore: function (html, setting, node) {
+ html.push("<li id='", node.tId, "' class='", consts.className.LEVEL, node.level, "' tabindex='0' hidefocus='true' treenode>");
+ },
+ makeDOMNodeNameAfter: function (html, setting, node) {
+ html.push("</a>");
+ },
+ makeDOMNodeNameBefore: function (html, setting, node) {
+ var title = data.nodeTitle(setting, node),
+ url = view.makeNodeUrl(setting, node),
+ fontcss = view.makeNodeFontCss(setting, node),
+ nodeClasses = view.makeNodeClasses(setting, node),
+ fontStyle = [];
+ for (var f in fontcss) {
+ fontStyle.push(f, ":", fontcss[f], ";");
+ }
+ html.push("<a id='", node.tId, consts.id.A, "' class='", consts.className.LEVEL, node.level,
+ nodeClasses.add ? ' ' + nodeClasses.add.join(' ') : '',
+ "' treeNode", consts.id.A, " onclick=\"", (node.click || ''),
+ "\" ", ((url != null && url.length > 0) ? "href='" + url + "'" : ""), " target='", view.makeNodeTarget(node), "' style='", fontStyle.join(''),
+ "'");
+ if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) {
+ html.push("title='", title.replace(/'/g, "'").replace(/</g, '<').replace(/>/g, '>'), "'");
+ }
+ html.push(">");
+ },
+ makeNodeFontCss: function (setting, node) {
+ var fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss);
+ return (fontCss && ((typeof fontCss) != "function")) ? fontCss : {};
+ },
+ makeNodeClasses: function (setting, node) {
+ var classes = tools.apply(setting.view.nodeClasses, [setting.treeId, node], setting.view.nodeClasses);
+ return (classes && (typeof classes !== "function")) ? classes : {add:[], remove:[]};
+ },
+ makeNodeIcoClass: function (setting, node) {
+ var icoCss = ["ico"];
+ if (!node.isAjaxing) {
+ var isParent = data.nodeIsParent(setting, node);
+ icoCss[0] = (node.iconSkin ? node.iconSkin + "_" : "") + icoCss[0];
+ if (isParent) {
+ icoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);
+ } else {
+ icoCss.push(consts.folder.DOCU);
+ }
+ }
+ return consts.className.BUTTON + " " + icoCss.join('_');
+ },
+ makeNodeIcoStyle: function (setting, node) {
+ var icoStyle = [];
+ if (!node.isAjaxing) {
+ var isParent = data.nodeIsParent(setting, node);
+ var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon];
+ if (icon) icoStyle.push("background:url(", icon, ") 0 0 no-repeat;");
+ if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) {
+ icoStyle.push("display:none;");
+ }
+ }
+ return icoStyle.join('');
+ },
+ makeNodeLineClass: function (setting, node) {
+ var lineClass = [];
+ if (setting.view.showLine) {
+ if (node.level == 0 && node.isFirstNode && node.isLastNode) {
+ lineClass.push(consts.line.ROOT);
+ } else if (node.level == 0 && node.isFirstNode) {
+ lineClass.push(consts.line.ROOTS);
+ } else if (node.isLastNode) {
+ lineClass.push(consts.line.BOTTOM);
+ } else {
+ lineClass.push(consts.line.CENTER);
+ }
+ } else {
+ lineClass.push(consts.line.NOLINE);
+ }
+ if (data.nodeIsParent(setting, node)) {
+ lineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);
+ } else {
+ lineClass.push(consts.folder.DOCU);
+ }
+ return view.makeNodeLineClassEx(node) + lineClass.join('_');
+ },
+ makeNodeLineClassEx: function (node) {
+ return consts.className.BUTTON + " " + consts.className.LEVEL + node.level + " " + consts.className.SWITCH + " ";
+ },
+ makeNodeTarget: function (node) {
+ return (node.target || "_blank");
+ },
+ makeNodeUrl: function (setting, node) {
+ var urlKey = setting.data.key.url;
+ return node[urlKey] ? node[urlKey] : null;
+ },
+ makeUlHtml: function (setting, node, html, content) {
+ html.push("<ul id='", node.tId, consts.id.UL, "' class='", consts.className.LEVEL, node.level, " ", view.makeUlLineClass(setting, node), "' style='display:", (node.open ? "block" : "none"), "'>");
+ html.push(content);
+ html.push("</ul>");
+ },
+ makeUlLineClass: function (setting, node) {
+ return ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : "");
+ },
+ removeChildNodes: function (setting, node) {
+ if (!node) return;
+ var nodes = data.nodeChildren(setting, node);
+ if (!nodes) return;
+
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ data.removeNodeCache(setting, nodes[i]);
+ }
+ data.removeSelectedNode(setting);
+ delete node[setting.data.key.children];
+
+ if (!setting.data.keep.parent) {
+ data.nodeIsParent(setting, node, false);
+ node.open = false;
+ var tmp_switchObj = $$(node, consts.id.SWITCH, setting),
+ tmp_icoObj = $$(node, consts.id.ICON, setting);
+ view.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU);
+ view.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU);
+ $$(node, consts.id.UL, setting).remove();
+ } else {
+ $$(node, consts.id.UL, setting).empty();
+ }
+ },
+ scrollIntoView: function (setting, dom) {
+ if (!dom) {
+ return;
+ }
+ // support IE 7 / 8
+ if (typeof Element === 'undefined' || typeof HTMLElement === 'undefined') {
+ var contRect = setting.treeObj.get(0).getBoundingClientRect(),
+ findMeRect = dom.getBoundingClientRect();
+ if (findMeRect.top < contRect.top || findMeRect.bottom > contRect.bottom
+ || findMeRect.right > contRect.right || findMeRect.left < contRect.left) {
+ dom.scrollIntoView();
+ }
+ return;
+ }
+ // CC-BY jocki84@googlemail.com, https://gist.github.com/jocki84/6ffafd003387179a988e
+ if (!Element.prototype.scrollIntoViewIfNeeded) {
+ Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) {
+ "use strict";
+
+ function makeRange(start, length) {
+ return {"start": start, "length": length, "end": start + length};
+ }
+
+ function coverRange(inner, outer) {
+ if (
+ false === centerIfNeeded ||
+ (outer.start < inner.end && inner.start < outer.end)
+ ) {
+ return Math.max(
+ inner.end - outer.length,
+ Math.min(outer.start, inner.start)
+ );
+ }
+ return (inner.start + inner.end - outer.length) / 2;
+ }
+
+ function makePoint(x, y) {
+ return {
+ "x": x,
+ "y": y,
+ "translate": function translate(dX, dY) {
+ return makePoint(x + dX, y + dY);
+ }
+ };
+ }
+
+ function absolute(elem, pt) {
+ while (elem) {
+ pt = pt.translate(elem.offsetLeft, elem.offsetTop);
+ elem = elem.offsetParent;
+ }
+ return pt;
+ }
+
+ var target = absolute(this, makePoint(0, 0)),
+ extent = makePoint(this.offsetWidth, this.offsetHeight),
+ elem = this.parentNode,
+ origin;
+
+ while (elem instanceof HTMLElement) {
+ // Apply desired scroll amount.
+ origin = absolute(elem, makePoint(elem.clientLeft, elem.clientTop));
+ elem.scrollLeft = coverRange(
+ makeRange(target.x - origin.x, extent.x),
+ makeRange(elem.scrollLeft, elem.clientWidth)
+ );
+ elem.scrollTop = coverRange(
+ makeRange(target.y - origin.y, extent.y),
+ makeRange(elem.scrollTop, elem.clientHeight)
+ );
+
+ // Determine actual scroll amount by reading back scroll properties.
+ target = target.translate(-elem.scrollLeft, -elem.scrollTop);
+ elem = elem.parentNode;
+ }
+ };
+ }
+ dom.scrollIntoViewIfNeeded();
+ },
+ setFirstNode: function (setting, parentNode) {
+ var children = data.nodeChildren(setting, parentNode);
+ if (children.length > 0) {
+ children[0].isFirstNode = true;
+ }
+ },
+ setLastNode: function (setting, parentNode) {
+ var children = data.nodeChildren(setting, parentNode);
+ if (children.length > 0) {
+ children[children.length - 1].isLastNode = true;
+ }
+ },
+ removeNode: function (setting, node) {
+ var root = data.getRoot(setting),
+ parentNode = (node.parentTId) ? node.getParentNode() : root;
+
+ node.isFirstNode = false;
+ node.isLastNode = false;
+ node.getPreNode = function () {
+ return null;
+ };
+ node.getNextNode = function () {
+ return null;
+ };
+
+ if (!data.getNodeCache(setting, node.tId)) {
+ return;
+ }
+
+ $$(node, setting).remove();
+ data.removeNodeCache(setting, node);
+ data.removeSelectedNode(setting, node);
+
+ var children = data.nodeChildren(setting, parentNode);
+ for (var i = 0, l = children.length; i < l; i++) {
+ if (children[i].tId == node.tId) {
+ children.splice(i, 1);
+ break;
+ }
+ }
+ view.setFirstNode(setting, parentNode);
+ view.setLastNode(setting, parentNode);
+
+ var tmp_ulObj, tmp_switchObj, tmp_icoObj,
+ childLength = children.length;
+
+ //repair nodes old parent
+ if (!setting.data.keep.parent && childLength == 0) {
+ //old parentNode has no child nodes
+ data.nodeIsParent(setting, parentNode, false);
+ parentNode.open = false;
+ delete parentNode[setting.data.key.children];
+ tmp_ulObj = $$(parentNode, consts.id.UL, setting);
+ tmp_switchObj = $$(parentNode, consts.id.SWITCH, setting);
+ tmp_icoObj = $$(parentNode, consts.id.ICON, setting);
+ view.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU);
+ view.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU);
+ tmp_ulObj.css("display", "none");
+
+ } else if (setting.view.showLine && childLength > 0) {
+ //old parentNode has child nodes
+ var newLast = children[childLength - 1];
+ tmp_ulObj = $$(newLast, consts.id.UL, setting);
+ tmp_switchObj = $$(newLast, consts.id.SWITCH, setting);
+ tmp_icoObj = $$(newLast, consts.id.ICON, setting);
+ if (parentNode == root) {
+ if (children.length == 1) {
+ //node was root, and ztree has only one root after move node
+ view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT);
+ } else {
+ var tmp_first_switchObj = $$(children[0], consts.id.SWITCH, setting);
+ view.replaceSwitchClass(children[0], tmp_first_switchObj, consts.line.ROOTS);
+ view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);
+ }
+ } else {
+ view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);
+ }
+ tmp_ulObj.removeClass(consts.line.LINE);
+ }
+ },
+ replaceIcoClass: function (node, obj, newName) {
+ if (!obj || node.isAjaxing) return;
+ var tmpName = obj.attr("class");
+ if (tmpName == undefined) return;
+ var tmpList = tmpName.split("_");
+ switch (newName) {
+ case consts.folder.OPEN:
+ case consts.folder.CLOSE:
+ case consts.folder.DOCU:
+ tmpList[tmpList.length - 1] = newName;
+ break;
+ }
+ obj.attr("class", tmpList.join("_"));
+ },
+ replaceSwitchClass: function (node, obj, newName) {
+ if (!obj) return;
+ var tmpName = obj.attr("class");
+ if (tmpName == undefined) return;
+ var tmpList = tmpName.split("_");
+ switch (newName) {
+ case consts.line.ROOT:
+ case consts.line.ROOTS:
+ case consts.line.CENTER:
+ case consts.line.BOTTOM:
+ case consts.line.NOLINE:
+ tmpList[0] = view.makeNodeLineClassEx(node) + newName;
+ break;
+ case consts.folder.OPEN:
+ case consts.folder.CLOSE:
+ case consts.folder.DOCU:
+ tmpList[1] = newName;
+ break;
+ }
+ obj.attr("class", tmpList.join("_"));
+ if (newName !== consts.folder.DOCU) {
+ obj.removeAttr("disabled");
+ } else {
+ obj.attr("disabled", "disabled");
+ }
+ },
+ selectNode: function (setting, node, addFlag) {
+ if (!addFlag) {
+ view.cancelPreSelectedNode(setting, null, node);
+ }
+ $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED);
+ data.addSelectedNode(setting, node);
+ setting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]);
+ },
+ setNodeFontCss: function (setting, treeNode) {
+ var aObj = $$(treeNode, consts.id.A, setting),
+ fontCss = view.makeNodeFontCss(setting, treeNode);
+ if (fontCss) {
+ aObj.css(fontCss);
+ }
+ },
+ setNodeClasses: function (setting, treeNode) {
+ var aObj = $$(treeNode, consts.id.A, setting),
+ classes = view.makeNodeClasses(setting, treeNode);
+ if ('add' in classes && classes.add.length) {
+ aObj.addClass(classes.add.join(' '));
+ }
+ if ('remove' in classes && classes.remove.length) {
+ aObj.removeClass(classes.remove.join(' '));
+ }
+ },
+ setNodeLineIcos: function (setting, node) {
+ if (!node) return;
+ var switchObj = $$(node, consts.id.SWITCH, setting),
+ ulObj = $$(node, consts.id.UL, setting),
+ icoObj = $$(node, consts.id.ICON, setting),
+ ulLine = view.makeUlLineClass(setting, node);
+ if (ulLine.length == 0) {
+ ulObj.removeClass(consts.line.LINE);
+ } else {
+ ulObj.addClass(ulLine);
+ }
+ switchObj.attr("class", view.makeNodeLineClass(setting, node));
+ if (data.nodeIsParent(setting, node)) {
+ switchObj.removeAttr("disabled");
+ } else {
+ switchObj.attr("disabled", "disabled");
+ }
+ icoObj.removeAttr("style");
+ icoObj.attr("style", view.makeNodeIcoStyle(setting, node));
+ icoObj.attr("class", view.makeNodeIcoClass(setting, node));
+ },
+ setNodeName: function (setting, node) {
+ var title = data.nodeTitle(setting, node),
+ nObj = $$(node, consts.id.SPAN, setting);
+ nObj.empty();
+ if (setting.view.nameIsHTML) {
+ nObj.html(data.nodeName(setting, node));
+ } else {
+ nObj.text(data.nodeName(setting, node));
+ }
+ if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) {
+ var aObj = $$(node, consts.id.A, setting);
+ aObj.attr("title", !title ? "" : title);
+ }
+ },
+ setNodeTarget: function (setting, node) {
+ var aObj = $$(node, consts.id.A, setting);
+ aObj.attr("target", view.makeNodeTarget(node));
+ },
+ setNodeUrl: function (setting, node) {
+ var aObj = $$(node, consts.id.A, setting),
+ url = view.makeNodeUrl(setting, node);
+ if (url == null || url.length == 0) {
+ aObj.removeAttr("href");
+ } else {
+ aObj.attr("href", url);
+ }
+ },
+ switchNode: function (setting, node) {
+ if (node.open || !tools.canAsync(setting, node)) {
+ view.expandCollapseNode(setting, node, !node.open);
+ } else if (setting.async.enable) {
+ if (!view.asyncNode(setting, node)) {
+ view.expandCollapseNode(setting, node, !node.open);
+ return;
+ }
+ } else if (node) {
+ view.expandCollapseNode(setting, node, !node.open);
+ }
+ }
+ };
+ // zTree defind
+ $.fn.zTree = {
+ consts: _consts,
+ _z: {
+ tools: tools,
+ view: view,
+ event: event,
+ data: data
+ },
+ getZTreeObj: function (treeId) {
+ var o = data.getZTreeTools(treeId);
+ return o ? o : null;
+ },
+ destroy: function (treeId) {
+ if (!!treeId && treeId.length > 0) {
+ view.destroy(data.getSetting(treeId));
+ } else {
+ for (var s in settings) {
+ view.destroy(settings[s]);
+ }
+ }
+ },
+ init: function (obj, zSetting, zNodes) {
+ var setting = tools.clone(_setting);
+ $.extend(true, setting, zSetting);
+ setting.treeId = obj.attr("id");
+ setting.treeObj = obj;
+ setting.treeObj.empty();
+ settings[setting.treeId] = setting;
+ //For some older browser,(e.g., ie6)
+ if (typeof document.body.style.maxHeight === "undefined") {
+ setting.view.expandSpeed = "";
+ }
+ data.initRoot(setting);
+ var root = data.getRoot(setting);
+ zNodes = zNodes ? tools.clone(tools.isArray(zNodes) ? zNodes : [zNodes]) : [];
+ if (setting.data.simpleData.enable) {
+ data.nodeChildren(setting, root, data.transformTozTreeFormat(setting, zNodes));
+ } else {
+ data.nodeChildren(setting, root, zNodes);
+ }
+
+ data.initCache(setting);
+ event.unbindTree(setting);
+ event.bindTree(setting);
+ event.unbindEvent(setting);
+ event.bindEvent(setting);
+
+ var zTreeTools = {
+ setting: setting,
+ addNodes: function (parentNode, index, newNodes, isSilent) {
+ if (!parentNode) parentNode = null;
+ var isParent = data.nodeIsParent(setting, parentNode);
+ if (parentNode && !isParent && setting.data.keep.leaf) return null;
+
+ var i = parseInt(index, 10);
+ if (isNaN(i)) {
+ isSilent = !!newNodes;
+ newNodes = index;
+ index = -1;
+ } else {
+ index = i;
+ }
+ if (!newNodes) return null;
+
+
+ var xNewNodes = tools.clone(tools.isArray(newNodes) ? newNodes : [newNodes]);
+
+ function addCallback() {
+ view.addNodes(setting, parentNode, index, xNewNodes, (isSilent == true));
+ }
+
+ if (tools.canAsync(setting, parentNode)) {
+ view.asyncNode(setting, parentNode, isSilent, addCallback);
+ } else {
+ addCallback();
+ }
+ return xNewNodes;
+ },
+ cancelSelectedNode: function (node) {
+ view.cancelPreSelectedNode(setting, node);
+ },
+ destroy: function () {
+ view.destroy(setting);
+ },
+ expandAll: function (expandFlag) {
+ expandFlag = !!expandFlag;
+ view.expandCollapseSonNode(setting, null, expandFlag, true);
+ return expandFlag;
+ },
+ expandNode: function (node, expandFlag, sonSign, focus, callbackFlag) {
+ if (!node || !data.nodeIsParent(setting, node)) return null;
+ if (expandFlag !== true && expandFlag !== false) {
+ expandFlag = !node.open;
+ }
+ callbackFlag = !!callbackFlag;
+
+ if (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) {
+ return null;
+ } else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) {
+ return null;
+ }
+ if (expandFlag && node.parentTId) {
+ view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false);
+ }
+ if (expandFlag === node.open && !sonSign) {
+ return null;
+ }
+
+ data.getRoot(setting).expandTriggerFlag = callbackFlag;
+ if (!tools.canAsync(setting, node) && sonSign) {
+ view.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus);
+ } else {
+ node.open = !expandFlag;
+ view.switchNode(this.setting, node);
+ showNodeFocus();
+ }
+ return expandFlag;
+
+ function showNodeFocus() {
+ var a = $$(node, setting).get(0);
+ if (a && focus !== false) {
+ view.scrollIntoView(setting, a);
+ }
+ }
+ },
+ getNodes: function () {
+ return data.getNodes(setting);
+ },
+ getNodeByParam: function (key, value, parentNode) {
+ if (!key) return null;
+ return data.getNodeByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
+ },
+ getNodeByTId: function (tId) {
+ return data.getNodeCache(setting, tId);
+ },
+ getNodesByParam: function (key, value, parentNode) {
+ if (!key) return null;
+ return data.getNodesByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
+ },
+ getNodesByParamFuzzy: function (key, value, parentNode) {
+ if (!key) return null;
+ return data.getNodesByParamFuzzy(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value);
+ },
+ getNodesByFilter: function (filter, isSingle, parentNode, invokeParam) {
+ isSingle = !!isSingle;
+ if (!filter || (typeof filter != "function")) return (isSingle ? null : []);
+ return data.getNodesByFilter(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), filter, isSingle, invokeParam);
+ },
+ getNodeIndex: function (node) {
+ if (!node) return null;
+ var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);
+ var children = data.nodeChildren(setting, parentNode);
+ for (var i = 0, l = children.length; i < l; i++) {
+ if (children[i] == node) return i;
+ }
+ return -1;
+ },
+ getSelectedNodes: function () {
+ var r = [], list = data.getRoot(setting).curSelectedList;
+ for (var i = 0, l = list.length; i < l; i++) {
+ r.push(list[i]);
+ }
+ return r;
+ },
+ isSelectedNode: function (node) {
+ return data.isSelectedNode(setting, node);
+ },
+ reAsyncChildNodesPromise: function (parentNode, reloadType, isSilent) {
+ var promise = new Promise(function (resolve, reject) {
+ try {
+ zTreeTools.reAsyncChildNodes(parentNode, reloadType, isSilent, function () {
+ resolve(parentNode);
+ });
+ } catch (e) {
+ reject(e);
+ }
+ });
+ return promise;
+ },
+ reAsyncChildNodes: function (parentNode, reloadType, isSilent, callback) {
+ if (!this.setting.async.enable) return;
+ var isRoot = !parentNode;
+ if (isRoot) {
+ parentNode = data.getRoot(setting);
+ }
+ if (reloadType == "refresh") {
+ var children = data.nodeChildren(setting, parentNode);
+ for (var i = 0, l = children ? children.length : 0; i < l; i++) {
+ data.removeNodeCache(setting, children[i]);
+ }
+ data.removeSelectedNode(setting);
+ data.nodeChildren(setting, parentNode, []);
+ if (isRoot) {
+ this.setting.treeObj.empty();
+ } else {
+ var ulObj = $$(parentNode, consts.id.UL, setting);
+ ulObj.empty();
+ }
+ }
+ view.asyncNode(this.setting, isRoot ? null : parentNode, !!isSilent, callback);
+ },
+ refresh: function () {
+ this.setting.treeObj.empty();
+ var root = data.getRoot(setting),
+ nodes = data.nodeChildren(setting, root);
+ data.initRoot(setting);
+ data.nodeChildren(setting, root, nodes);
+ data.initCache(setting);
+ view.createNodes(setting, 0, data.nodeChildren(setting, root), null, -1);
+ },
+ removeChildNodes: function (node) {
+ if (!node) return null;
+ var nodes = data.nodeChildren(setting, node);
+ view.removeChildNodes(setting, node);
+ return nodes ? nodes : null;
+ },
+ removeNode: function (node, callbackFlag) {
+ if (!node) return;
+ callbackFlag = !!callbackFlag;
+ if (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return;
+ view.removeNode(setting, node);
+ if (callbackFlag) {
+ this.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
+ }
+ },
+ selectNode: function (node, addFlag, isSilent) {
+ if (!node) return;
+ if (tools.uCanDo(setting)) {
+ addFlag = setting.view.selectedMulti && addFlag;
+ if (node.parentTId) {
+ view.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus);
+ } else if (!isSilent) {
+ try {
+ $$(node, setting).focus().blur();
+ } catch (e) {
+ }
+ }
+ view.selectNode(setting, node, addFlag);
+ }
+
+ function showNodeFocus() {
+ if (isSilent) {
+ return;
+ }
+ var a = $$(node, setting).get(0);
+ view.scrollIntoView(setting, a);
+ }
+ },
+ transformTozTreeNodes: function (simpleNodes) {
+ return data.transformTozTreeFormat(setting, simpleNodes);
+ },
+ transformToArray: function (nodes) {
+ return data.transformToArrayFormat(setting, nodes);
+ },
+ updateNode: function (node, checkTypeFlag) {
+ if (!node) return;
+ var nObj = $$(node, setting);
+ if (nObj.get(0) && tools.uCanDo(setting)) {
+ view.setNodeName(setting, node);
+ view.setNodeTarget(setting, node);
+ view.setNodeUrl(setting, node);
+ view.setNodeLineIcos(setting, node);
+ view.setNodeFontCss(setting, node);
+ view.setNodeClasses(setting, node);
+ }
+ }
+ };
+ root.treeTools = zTreeTools;
+ data.setZTreeTools(setting, zTreeTools);
+ var children = data.nodeChildren(setting, root);
+ if (children && children.length > 0) {
+ view.createNodes(setting, 0, children, null, -1);
+ } else if (setting.async.enable && setting.async.url && setting.async.url !== '') {
+ view.asyncNode(setting);
+ }
+ return zTreeTools;
+ }
+ };
+
+ var zt = $.fn.zTree,
+ $$ = tools.$,
+ consts = zt.consts;
+})(jQuery);
+/*
+ * JQuery zTree excheck
+ * v3.5.43
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: 2020-04-04
+ */
+
+(function ($) {
+ //default consts of excheck
+ var _consts = {
+ event: {
+ CHECK: "ztree_check"
+ },
+ id: {
+ CHECK: "_check"
+ },
+ checkbox: {
+ STYLE: "checkbox",
+ DEFAULT: "chk",
+ DISABLED: "disable",
+ FALSE: "false",
+ TRUE: "true",
+ FULL: "full",
+ PART: "part",
+ FOCUS: "focus"
+ },
+ radio: {
+ STYLE: "radio",
+ TYPE_ALL: "all",
+ TYPE_LEVEL: "level"
+ }
+ },
+ //default setting of excheck
+ _setting = {
+ check: {
+ enable: false,
+ autoCheckTrigger: false,
+ chkStyle: _consts.checkbox.STYLE,
+ nocheckInherit: false,
+ chkDisabledInherit: false,
+ radioType: _consts.radio.TYPE_LEVEL,
+ chkboxType: {
+ "Y": "ps",
+ "N": "ps"
+ }
+ },
+ data: {
+ key: {
+ checked: "checked"
+ }
+ },
+ callback: {
+ beforeCheck: null,
+ onCheck: null
+ }
+ },
+ //default root of excheck
+ _initRoot = function (setting) {
+ var r = data.getRoot(setting);
+ r.radioCheckedList = [];
+ },
+ //default cache of excheck
+ _initCache = function (treeId) {
+ },
+ //default bind event of excheck
+ _bindEvent = function (setting) {
+ var o = setting.treeObj,
+ c = consts.event;
+ o.bind(c.CHECK, function (event, srcEvent, treeId, node) {
+ event.srcEvent = srcEvent;
+ tools.apply(setting.callback.onCheck, [event, treeId, node]);
+ });
+ },
+ _unbindEvent = function (setting) {
+ var o = setting.treeObj,
+ c = consts.event;
+ o.unbind(c.CHECK);
+ },
+ //default event proxy of excheck
+ _eventProxy = function (e) {
+ var target = e.target,
+ setting = data.getSetting(e.data.treeId),
+ tId = "", node = null,
+ nodeEventType = "", treeEventType = "",
+ nodeEventCallback = null, treeEventCallback = null;
+
+ if (tools.eqs(e.type, "mouseover")) {
+ if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
+ tId = tools.getNodeMainDom(target).id;
+ nodeEventType = "mouseoverCheck";
+ }
+ } else if (tools.eqs(e.type, "mouseout")) {
+ if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
+ tId = tools.getNodeMainDom(target).id;
+ nodeEventType = "mouseoutCheck";
+ }
+ } else if (tools.eqs(e.type, "click")) {
+ if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) {
+ tId = tools.getNodeMainDom(target).id;
+ nodeEventType = "checkNode";
+ }
+ }
+ if (tId.length > 0) {
+ node = data.getNodeCache(setting, tId);
+ switch (nodeEventType) {
+ case "checkNode" :
+ nodeEventCallback = _handler.onCheckNode;
+ break;
+ case "mouseoverCheck" :
+ nodeEventCallback = _handler.onMouseoverCheck;
+ break;
+ case "mouseoutCheck" :
+ nodeEventCallback = _handler.onMouseoutCheck;
+ break;
+ }
+ }
+ var proxyResult = {
+ stop: nodeEventType === "checkNode",
+ node: node,
+ nodeEventType: nodeEventType,
+ nodeEventCallback: nodeEventCallback,
+ treeEventType: treeEventType,
+ treeEventCallback: treeEventCallback
+ };
+ return proxyResult
+ },
+ //default init node of excheck
+ _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
+ if (!n) return;
+ var checked = data.nodeChecked(setting, n);
+ n.checkedOld = checked;
+ if (typeof n.nocheck == "string") n.nocheck = tools.eqs(n.nocheck, "true");
+ n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);
+ if (typeof n.chkDisabled == "string") n.chkDisabled = tools.eqs(n.chkDisabled, "true");
+ n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled);
+ if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true");
+ n.halfCheck = !!n.halfCheck;
+ n.check_Child_State = -1;
+ n.check_Focus = false;
+ n.getCheckStatus = function () {
+ return data.getCheckStatus(setting, n);
+ };
+
+ if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && checked) {
+ var r = data.getRoot(setting);
+ r.radioCheckedList.push(n);
+ }
+ },
+ //add dom for check
+ _beforeA = function (setting, node, html) {
+ if (setting.check.enable) {
+ data.makeChkFlag(setting, node);
+ html.push("<span ID='", node.tId, consts.id.CHECK, "' class='", view.makeChkClass(setting, node), "' treeNode", consts.id.CHECK, (node.nocheck === true ? " style='display:none;'" : ""), "></span>");
+ }
+ },
+ //update zTreeObj, add method of check
+ _zTreeTools = function (setting, zTreeTools) {
+ zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) {
+ var nodeChecked = data.nodeChecked(setting, node);
+ if (node.chkDisabled === true) return;
+ if (checked !== true && checked !== false) {
+ checked = !nodeChecked;
+ }
+ callbackFlag = !!callbackFlag;
+
+ if (nodeChecked === checked && !checkTypeFlag) {
+ return;
+ } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {
+ return;
+ }
+ if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {
+ data.nodeChecked(setting, node, checked);
+ var checkObj = $$(node, consts.id.CHECK, this.setting);
+ if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
+ view.setChkClass(this.setting, checkObj, node);
+ view.repairParentChkClassWithSelf(this.setting, node);
+ if (callbackFlag) {
+ this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]);
+ }
+ }
+ }
+
+ zTreeTools.checkAllNodes = function (checked) {
+ view.repairAllChk(this.setting, !!checked);
+ }
+
+ zTreeTools.getCheckedNodes = function (checked) {
+ checked = (checked !== false);
+ var children = data.nodeChildren(setting, data.getRoot(this.setting));
+ return data.getTreeCheckedNodes(this.setting, children, checked);
+ }
+
+ zTreeTools.getChangeCheckedNodes = function () {
+ var children = data.nodeChildren(setting, data.getRoot(this.setting));
+ return data.getTreeChangeCheckedNodes(this.setting, children);
+ }
+
+ zTreeTools.setChkDisabled = function (node, disabled, inheritParent, inheritChildren) {
+ disabled = !!disabled;
+ inheritParent = !!inheritParent;
+ inheritChildren = !!inheritChildren;
+ view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren);
+ view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent);
+ }
+
+ var _updateNode = zTreeTools.updateNode;
+ zTreeTools.updateNode = function (node, checkTypeFlag) {
+ if (_updateNode) _updateNode.apply(zTreeTools, arguments);
+ if (!node || !this.setting.check.enable) return;
+ var nObj = $$(node, this.setting);
+ if (nObj.get(0) && tools.uCanDo(this.setting)) {
+ var checkObj = $$(node, consts.id.CHECK, this.setting);
+ if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);
+ view.setChkClass(this.setting, checkObj, node);
+ view.repairParentChkClassWithSelf(this.setting, node);
+ }
+ }
+ },
+ //method of operate data
+ _data = {
+ getRadioCheckedList: function (setting) {
+ var checkedList = data.getRoot(setting).radioCheckedList;
+ for (var i = 0, j = checkedList.length; i < j; i++) {
+ if (!data.getNodeCache(setting, checkedList[i].tId)) {
+ checkedList.splice(i, 1);
+ i--;
+ j--;
+ }
+ }
+ return checkedList;
+ },
+ getCheckStatus: function (setting, node) {
+ if (!setting.check.enable || node.nocheck || node.chkDisabled) return null;
+ var checked = data.nodeChecked(setting, node),
+ r = {
+ checked: checked,
+ half: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (checked ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))
+ };
+ return r;
+ },
+ getTreeCheckedNodes: function (setting, nodes, checked, results) {
+ if (!nodes) return [];
+ var onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);
+ results = !results ? [] : results;
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ var children = data.nodeChildren(setting, node);
+ var nodeChecked = data.nodeChecked(setting, node);
+ if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked == checked) {
+ results.push(node);
+ if (onlyOne) {
+ break;
+ }
+ }
+ data.getTreeCheckedNodes(setting, children, checked, results);
+ if (onlyOne && results.length > 0) {
+ break;
+ }
+ }
+ return results;
+ },
+ getTreeChangeCheckedNodes: function (setting, nodes, results) {
+ if (!nodes) return [];
+ results = !results ? [] : results;
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ var node = nodes[i];
+ var children = data.nodeChildren(setting, node);
+ var nodeChecked = data.nodeChecked(setting, node);
+ if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked != node.checkedOld) {
+ results.push(node);
+ }
+ data.getTreeChangeCheckedNodes(setting, children, results);
+ }
+ return results;
+ },
+ makeChkFlag: function (setting, node) {
+ if (!node) return;
+ var chkFlag = -1;
+ var children = data.nodeChildren(setting, node);
+ if (children) {
+ for (var i = 0, l = children.length; i < l; i++) {
+ var cNode = children[i];
+ var nodeChecked = data.nodeChecked(setting, cNode);
+ var tmp = -1;
+ if (setting.check.chkStyle == consts.radio.STYLE) {
+ if (cNode.nocheck === true || cNode.chkDisabled === true) {
+ tmp = cNode.check_Child_State;
+ } else if (cNode.halfCheck === true) {
+ tmp = 2;
+ } else if (nodeChecked) {
+ tmp = 2;
+ } else {
+ tmp = cNode.check_Child_State > 0 ? 2 : 0;
+ }
+ if (tmp == 2) {
+ chkFlag = 2;
+ break;
+ } else if (tmp == 0) {
+ chkFlag = 0;
+ }
+ } else if (setting.check.chkStyle == consts.checkbox.STYLE) {
+ if (cNode.nocheck === true || cNode.chkDisabled === true) {
+ tmp = cNode.check_Child_State;
+ } else if (cNode.halfCheck === true) {
+ tmp = 1;
+ } else if (nodeChecked) {
+ tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;
+ } else {
+ tmp = (cNode.check_Child_State > 0) ? 1 : 0;
+ }
+ if (tmp === 1) {
+ chkFlag = 1;
+ break;
+ } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) {
+ chkFlag = 1;
+ break;
+ } else if (chkFlag === 2 && tmp > -1 && tmp < 2) {
+ chkFlag = 1;
+ break;
+ } else if (tmp > -1) {
+ chkFlag = tmp;
+ }
+ }
+ }
+ }
+ node.check_Child_State = chkFlag;
+ }
+ },
+ //method of event proxy
+ _event = {},
+ //method of event handler
+ _handler = {
+ onCheckNode: function (event, node) {
+ if (node.chkDisabled === true) return false;
+ var setting = data.getSetting(event.data.treeId);
+ if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;
+ var nodeChecked = data.nodeChecked(setting, node);
+ data.nodeChecked(setting, node, !nodeChecked);
+ view.checkNodeRelation(setting, node);
+ var checkObj = $$(node, consts.id.CHECK, setting);
+ view.setChkClass(setting, checkObj, node);
+ view.repairParentChkClassWithSelf(setting, node);
+ setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]);
+ return true;
+ },
+ onMouseoverCheck: function (event, node) {
+ if (node.chkDisabled === true) return false;
+ var setting = data.getSetting(event.data.treeId),
+ checkObj = $$(node, consts.id.CHECK, setting);
+ node.check_Focus = true;
+ view.setChkClass(setting, checkObj, node);
+ return true;
+ },
+ onMouseoutCheck: function (event, node) {
+ if (node.chkDisabled === true) return false;
+ var setting = data.getSetting(event.data.treeId),
+ checkObj = $$(node, consts.id.CHECK, setting);
+ node.check_Focus = false;
+ view.setChkClass(setting, checkObj, node);
+ return true;
+ }
+ },
+ //method of tools for zTree
+ _tools = {},
+ //method of operate ztree dom
+ _view = {
+ checkNodeRelation: function (setting, node) {
+ var pNode, i, l,
+ r = consts.radio;
+ var nodeChecked = data.nodeChecked(setting, node);
+ if (setting.check.chkStyle == r.STYLE) {
+ var checkedList = data.getRadioCheckedList(setting);
+ if (nodeChecked) {
+ if (setting.check.radioType == r.TYPE_ALL) {
+ for (i = checkedList.length - 1; i >= 0; i--) {
+ pNode = checkedList[i];
+ var pNodeChecked = data.nodeChecked(setting, pNode);
+ if (pNodeChecked && pNode != node) {
+ data.nodeChecked(setting, pNode, false);
+ checkedList.splice(i, 1);
+
+ view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);
+ if (pNode.parentTId != node.parentTId) {
+ view.repairParentChkClassWithSelf(setting, pNode);
+ }
+ }
+ }
+ checkedList.push(node);
+ } else {
+ var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);
+ var children = data.nodeChildren(setting, parentNode);
+ for (i = 0, l = children.length; i < l; i++) {
+ pNode = children[i];
+ var pNodeChecked = data.nodeChecked(setting, pNode);
+ if (pNodeChecked && pNode != node) {
+ data.nodeChecked(setting, pNode, false);
+ view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);
+ }
+ }
+ }
+ } else if (setting.check.radioType == r.TYPE_ALL) {
+ for (i = 0, l = checkedList.length; i < l; i++) {
+ if (node == checkedList[i]) {
+ checkedList.splice(i, 1);
+ break;
+ }
+ }
+ }
+
+ } else {
+ var children = data.nodeChildren(setting, node);
+ if (nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.Y.indexOf("s") > -1)) {
+ view.setSonNodeCheckBox(setting, node, true);
+ }
+ if (!nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.N.indexOf("s") > -1)) {
+ view.setSonNodeCheckBox(setting, node, false);
+ }
+ if (nodeChecked && setting.check.chkboxType.Y.indexOf("p") > -1) {
+ view.setParentNodeCheckBox(setting, node, true);
+ }
+ if (!nodeChecked && setting.check.chkboxType.N.indexOf("p") > -1) {
+ view.setParentNodeCheckBox(setting, node, false);
+ }
+ }
+ },
+ makeChkClass: function (setting, node) {
+ var c = consts.checkbox, r = consts.radio,
+ fullStyle = "";
+ var nodeChecked = data.nodeChecked(setting, node);
+ if (node.chkDisabled === true) {
+ fullStyle = c.DISABLED;
+ } else if (node.halfCheck) {
+ fullStyle = c.PART;
+ } else if (setting.check.chkStyle == r.STYLE) {
+ fullStyle = (node.check_Child_State < 1) ? c.FULL : c.PART;
+ } else {
+ fullStyle = nodeChecked ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL : c.PART) : ((node.check_Child_State < 1) ? c.FULL : c.PART);
+ }
+ var chkName = setting.check.chkStyle + "_" + (nodeChecked ? c.TRUE : c.FALSE) + "_" + fullStyle;
+ chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName;
+ return consts.className.BUTTON + " " + c.DEFAULT + " " + chkName;
+ },
+ repairAllChk: function (setting, checked) {
+ if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {
+ var root = data.getRoot(setting);
+ var children = data.nodeChildren(setting, root);
+ for (var i = 0, l = children.length; i < l; i++) {
+ var node = children[i];
+ if (node.nocheck !== true && node.chkDisabled !== true) {
+ data.nodeChecked(setting, node, checked);
+ }
+ view.setSonNodeCheckBox(setting, node, checked);
+ }
+ }
+ },
+ repairChkClass: function (setting, node) {
+ if (!node) return;
+ data.makeChkFlag(setting, node);
+ if (node.nocheck !== true) {
+ var checkObj = $$(node, consts.id.CHECK, setting);
+ view.setChkClass(setting, checkObj, node);
+ }
+ },
+ repairParentChkClass: function (setting, node) {
+ if (!node || !node.parentTId) return;
+ var pNode = node.getParentNode();
+ view.repairChkClass(setting, pNode);
+ view.repairParentChkClass(setting, pNode);
+ },
+ repairParentChkClassWithSelf: function (setting, node) {
+ if (!node) return;
+ var children = data.nodeChildren(setting, node);
+ if (children && children.length > 0) {
+ view.repairParentChkClass(setting, children[0]);
+ } else {
+ view.repairParentChkClass(setting, node);
+ }
+ },
+ repairSonChkDisabled: function (setting, node, chkDisabled, inherit) {
+ if (!node) return;
+ if (node.chkDisabled != chkDisabled) {
+ node.chkDisabled = chkDisabled;
+ }
+ view.repairChkClass(setting, node);
+ var children = data.nodeChildren(setting, node);
+ if (children && inherit) {
+ for (var i = 0, l = children.length; i < l; i++) {
+ var sNode = children[i];
+ view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit);
+ }
+ }
+ },
+ repairParentChkDisabled: function (setting, node, chkDisabled, inherit) {
+ if (!node) return;
+ if (node.chkDisabled != chkDisabled && inherit) {
+ node.chkDisabled = chkDisabled;
+ }
+ view.repairChkClass(setting, node);
+ view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit);
+ },
+ setChkClass: function (setting, obj, node) {
+ if (!obj) return;
+ if (node.nocheck === true) {
+ obj.hide();
+ } else {
+ obj.show();
+ }
+ obj.attr('class', view.makeChkClass(setting, node));
+ },
+ setParentNodeCheckBox: function (setting, node, value, srcNode) {
+ var checkObj = $$(node, consts.id.CHECK, setting);
+ if (!srcNode) srcNode = node;
+ data.makeChkFlag(setting, node);
+ if (node.nocheck !== true && node.chkDisabled !== true) {
+ data.nodeChecked(setting, node, value);
+ view.setChkClass(setting, checkObj, node);
+ if (setting.check.autoCheckTrigger && node != srcNode) {
+ setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);
+ }
+ }
+ if (node.parentTId) {
+ var pSign = true;
+ if (!value) {
+ var pNodes = data.nodeChildren(setting, node.getParentNode());
+ for (var i = 0, l = pNodes.length; i < l; i++) {
+ var pNode = pNodes[i];
+ var nodeChecked = data.nodeChecked(setting, pNode);
+ if ((pNode.nocheck !== true && pNode.chkDisabled !== true && nodeChecked)
+ || ((pNode.nocheck === true || pNode.chkDisabled === true) && pNode.check_Child_State > 0)) {
+ pSign = false;
+ break;
+ }
+ }
+ }
+ if (pSign) {
+ view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);
+ }
+ }
+ },
+ setSonNodeCheckBox: function (setting, node, value, srcNode) {
+ if (!node) return;
+ var checkObj = $$(node, consts.id.CHECK, setting);
+ if (!srcNode) srcNode = node;
+
+ var hasDisable = false;
+ var children = data.nodeChildren(setting, node);
+ if (children) {
+ for (var i = 0, l = children.length; i < l; i++) {
+ var sNode = children[i];
+ view.setSonNodeCheckBox(setting, sNode, value, srcNode);
+ if (sNode.chkDisabled === true) hasDisable = true;
+ }
+ }
+
+ if (node != data.getRoot(setting) && node.chkDisabled !== true) {
+ if (hasDisable && node.nocheck !== true) {
+ data.makeChkFlag(setting, node);
+ }
+ if (node.nocheck !== true && node.chkDisabled !== true) {
+ data.nodeChecked(setting, node, value);
+ if (!hasDisable) node.check_Child_State = (children && children.length > 0) ? (value ? 2 : 0) : -1;
+ } else {
+ node.check_Child_State = -1;
+ }
+ view.setChkClass(setting, checkObj, node);
+ if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) {
+ setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);
+ }
+ }
+
+ }
+ },
+
+ _z = {
+ tools: _tools,
+ view: _view,
+ event: _event,
+ data: _data
+ };
+ $.extend(true, $.fn.zTree.consts, _consts);
+ $.extend(true, $.fn.zTree._z, _z);
+
+ var zt = $.fn.zTree,
+ tools = zt._z.tools,
+ consts = zt.consts,
+ view = zt._z.view,
+ data = zt._z.data,
+ event = zt._z.event,
+ $$ = tools.$;
+
+ data.nodeChecked = function (setting, node, newChecked) {
+ if (!node) {
+ return false;
+ }
+ var key = setting.data.key.checked;
+ if (typeof newChecked !== 'undefined') {
+ if (typeof newChecked === "string") {
+ newChecked = tools.eqs(newChecked, "true");
+ }
+ newChecked = !!newChecked;
+ node[key] = newChecked;
+ } else if (typeof node[key] == "string"){
+ node[key] = tools.eqs(node[key], "true");
+ } else {
+ node[key] = !!node[key];
+ }
+ return node[key];
+ };
+
+ data.exSetting(_setting);
+ data.addInitBind(_bindEvent);
+ data.addInitUnBind(_unbindEvent);
+ data.addInitCache(_initCache);
+ data.addInitNode(_initNode);
+ data.addInitProxy(_eventProxy, true);
+ data.addInitRoot(_initRoot);
+ data.addBeforeA(_beforeA);
+ data.addZTreeTools(_zTreeTools);
+
+ var _createNodes = view.createNodes;
+ view.createNodes = function (setting, level, nodes, parentNode, index) {
+ if (_createNodes) _createNodes.apply(view, arguments);
+ if (!nodes) return;
+ view.repairParentChkClassWithSelf(setting, parentNode);
+ }
+ var _removeNode = view.removeNode;
+ view.removeNode = function (setting, node) {
+ var parentNode = node.getParentNode();
+ if (_removeNode) _removeNode.apply(view, arguments);
+ if (!node || !parentNode) return;
+ view.repairChkClass(setting, parentNode);
+ view.repairParentChkClass(setting, parentNode);
+ }
+
+ var _appendNodes = view.appendNodes;
+ view.appendNodes = function (setting, level, nodes, parentNode, index, initFlag, openFlag) {
+ var html = "";
+ if (_appendNodes) {
+ html = _appendNodes.apply(view, arguments);
+ }
+ if (parentNode) {
+ data.makeChkFlag(setting, parentNode);
+ }
+ return html;
+ }
+})(jQuery);
+/*
+ * JQuery zTree exedit
+ * v3.5.43
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: 2020-04-04
+ */
+
+(function ($) {
+ //default consts of exedit
+ var _consts = {
+ event: {
+ DRAG: "ztree_drag",
+ DROP: "ztree_drop",
+ RENAME: "ztree_rename",
+ DRAGMOVE: "ztree_dragmove"
+ },
+ id: {
+ EDIT: "_edit",
+ INPUT: "_input",
+ REMOVE: "_remove"
+ },
+ move: {
+ TYPE_INNER: "inner",
+ TYPE_PREV: "prev",
+ TYPE_NEXT: "next"
+ },
+ node: {
+ CURSELECTED_EDIT: "curSelectedNode_Edit",
+ TMPTARGET_TREE: "tmpTargetzTree",
+ TMPTARGET_NODE: "tmpTargetNode"
+ }
+ },
+ //default setting of exedit
+ _setting = {
+ edit: {
+ enable: false,
+ editNameSelectAll: false,
+ showRemoveBtn: true,
+ showRenameBtn: true,
+ removeTitle: "remove",
+ renameTitle: "rename",
+ drag: {
+ autoExpandTrigger: false,
+ isCopy: true,
+ isMove: true,
+ prev: true,
+ next: true,
+ inner: true,
+ minMoveSize: 5,
+ borderMax: 10,
+ borderMin: -5,
+ maxShowNodeNum: 5,
+ autoOpenTime: 500
+ }
+ },
+ view: {
+ addHoverDom: null,
+ removeHoverDom: null
+ },
+ callback: {
+ beforeDrag: null,
+ beforeDragOpen: null,
+ beforeDrop: null,
+ beforeEditName: null,
+ beforeRename: null,
+ onDrag: null,
+ onDragMove: null,
+ onDrop: null,
+ onRename: null
+ }
+ },
+ //default root of exedit
+ _initRoot = function (setting) {
+ var r = data.getRoot(setting), rs = data.getRoots();
+ r.curEditNode = null;
+ r.curEditInput = null;
+ r.curHoverNode = null;
+ r.dragFlag = 0;
+ r.dragNodeShowBefore = [];
+ r.dragMaskList = new Array();
+ rs.showHoverDom = true;
+ },
+ //default cache of exedit
+ _initCache = function (treeId) {
+ },
+ //default bind event of exedit
+ _bindEvent = function (setting) {
+ var o = setting.treeObj;
+ var c = consts.event;
+ o.bind(c.RENAME, function (event, treeId, treeNode, isCancel) {
+ tools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]);
+ });
+
+ o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {
+ tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);
+ });
+
+ o.bind(c.DRAGMOVE, function (event, srcEvent, treeId, treeNodes) {
+ tools.apply(setting.callback.onDragMove, [srcEvent, treeId, treeNodes]);
+ });
+
+ o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {
+ tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);
+ });
+ },
+ _unbindEvent = function (setting) {
+ var o = setting.treeObj;
+ var c = consts.event;
+ o.unbind(c.RENAME);
+ o.unbind(c.DRAG);
+ o.unbind(c.DRAGMOVE);
+ o.unbind(c.DROP);
+ },
+ //default event proxy of exedit
+ _eventProxy = function (e) {
+ var target = e.target,
+ setting = data.getSetting(e.data.treeId),
+ relatedTarget = e.relatedTarget,
+ tId = "", node = null,
+ nodeEventType = "", treeEventType = "",
+ nodeEventCallback = null, treeEventCallback = null,
+ tmp = null;
+
+ if (tools.eqs(e.type, "mouseover")) {
+ tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (tmp) {
+ tId = tools.getNodeMainDom(tmp).id;
+ nodeEventType = "hoverOverNode";
+ }
+ } else if (tools.eqs(e.type, "mouseout")) {
+ tmp = tools.getMDom(setting, relatedTarget, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (!tmp) {
+ tId = "remove";
+ nodeEventType = "hoverOutNode";
+ }
+ } else if (tools.eqs(e.type, "mousedown")) {
+ tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
+ if (tmp) {
+ tId = tools.getNodeMainDom(tmp).id;
+ nodeEventType = "mousedownNode";
+ }
+ }
+ if (tId.length > 0) {
+ node = data.getNodeCache(setting, tId);
+ switch (nodeEventType) {
+ case "mousedownNode" :
+ nodeEventCallback = _handler.onMousedownNode;
+ break;
+ case "hoverOverNode" :
+ nodeEventCallback = _handler.onHoverOverNode;
+ break;
+ case "hoverOutNode" :
+ nodeEventCallback = _handler.onHoverOutNode;
+ break;
+ }
+ }
+ var proxyResult = {
+ stop: false,
+ node: node,
+ nodeEventType: nodeEventType,
+ nodeEventCallback: nodeEventCallback,
+ treeEventType: treeEventType,
+ treeEventCallback: treeEventCallback
+ };
+ return proxyResult
+ },
+ //default init node of exedit
+ _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
+ if (!n) return;
+ n.isHover = false;
+ n.editNameFlag = false;
+ },
+ //update zTreeObj, add method of edit
+ _zTreeTools = function (setting, zTreeTools) {
+ zTreeTools.cancelEditName = function (newName) {
+ var root = data.getRoot(this.setting);
+ if (!root.curEditNode) return;
+ view.cancelCurEditNode(this.setting, newName ? newName : null, true);
+ }
+ zTreeTools.copyNode = function (targetNode, node, moveType, isSilent) {
+ if (!node) return null;
+ var isParent = data.nodeIsParent(setting, targetNode);
+ if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;
+ var _this = this,
+ newNode = tools.clone(node);
+ if (!targetNode) {
+ targetNode = null;
+ moveType = consts.move.TYPE_INNER;
+ }
+ if (moveType == consts.move.TYPE_INNER) {
+ function copyCallback() {
+ view.addNodes(_this.setting, targetNode, -1, [newNode], isSilent);
+ }
+
+ if (tools.canAsync(this.setting, targetNode)) {
+ view.asyncNode(this.setting, targetNode, isSilent, copyCallback);
+ } else {
+ copyCallback();
+ }
+ } else {
+ view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent);
+ view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent);
+ }
+ return newNode;
+ }
+ zTreeTools.editName = function (node) {
+ if (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return;
+ if (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true);
+ view.editNode(this.setting, node)
+ }
+ zTreeTools.moveNode = function (targetNode, node, moveType, isSilent) {
+ if (!node) return node;
+ var isParent = data.nodeIsParent(setting, targetNode);
+ if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {
+ return null;
+ } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find("#" + targetNode.tId).length > 0)) {
+ return null;
+ } else if (!targetNode) {
+ targetNode = null;
+ }
+ var _this = this;
+
+ function moveCallback() {
+ view.moveNode(_this.setting, targetNode, node, moveType, false, isSilent);
+ }
+
+ if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) {
+ view.asyncNode(this.setting, targetNode, isSilent, moveCallback);
+ } else {
+ moveCallback();
+ }
+ return node;
+ }
+ zTreeTools.setEditable = function (editable) {
+ this.setting.edit.enable = editable;
+ return this.refresh();
+ }
+ },
+ //method of operate data
+ _data = {
+ setSonNodeLevel: function (setting, parentNode, node) {
+ if (!node) return;
+ var children = data.nodeChildren(setting, node);
+ node.level = (parentNode) ? parentNode.level + 1 : 0;
+ if (!children) return;
+ for (var i = 0, l = children.length; i < l; i++) {
+ if (children[i]) data.setSonNodeLevel(setting, node, children[i]);
+ }
+ }
+ },
+ //method of event proxy
+ _event = {},
+ //method of event handler
+ _handler = {
+ onHoverOverNode: function (event, node) {
+ var setting = data.getSetting(event.data.treeId),
+ root = data.getRoot(setting);
+ if (root.curHoverNode != node) {
+ _handler.onHoverOutNode(event);
+ }
+ root.curHoverNode = node;
+ view.addHoverDom(setting, node);
+ },
+ onHoverOutNode: function (event, node) {
+ var setting = data.getSetting(event.data.treeId),
+ root = data.getRoot(setting);
+ if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {
+ view.removeTreeDom(setting, root.curHoverNode);
+ root.curHoverNode = null;
+ }
+ },
+ onMousedownNode: function (eventMouseDown, _node) {
+ var i, l,
+ setting = data.getSetting(eventMouseDown.data.treeId),
+ root = data.getRoot(setting), roots = data.getRoots();
+ //right click can't drag & drop
+ if (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true;
+
+ //input of edit node name can't drag & drop
+ var target = eventMouseDown.target,
+ _nodes = data.getRoot(setting).curSelectedList,
+ nodes = [];
+ if (!data.isSelectedNode(setting, _node)) {
+ nodes = [_node];
+ } else {
+ for (i = 0, l = _nodes.length; i < l; i++) {
+ if (_nodes[i].editNameFlag && tools.eqs(target.tagName, "input") && target.getAttribute("treeNode" + consts.id.INPUT) !== null) {
+ return true;
+ }
+ nodes.push(_nodes[i]);
+ if (nodes[0].parentTId !== _nodes[i].parentTId) {
+ nodes = [_node];
+ break;
+ }
+ }
+ }
+
+ view.editNodeBlur = true;
+ view.cancelCurEditNode(setting);
+
+ var doc = $(setting.treeObj.get(0).ownerDocument),
+ body = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget,
+ isOtherTree = false,
+ targetSetting = setting,
+ sourceSetting = setting,
+ preNode, nextNode,
+ preTmpTargetNodeId = null,
+ preTmpMoveType = null,
+ tmpTargetNodeId = null,
+ moveType = consts.move.TYPE_INNER,
+ mouseDownX = eventMouseDown.clientX,
+ mouseDownY = eventMouseDown.clientY,
+ startTime = (new Date()).getTime();
+
+ if (tools.uCanDo(setting)) {
+ doc.bind("mousemove", _docMouseMove);
+ }
+
+ function _docMouseMove(event) {
+ //avoid start drag after click node
+ if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize
+ && Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) {
+ return true;
+ }
+ var i, l, tmpNode, tmpDom, tmpNodes;
+ body.css("cursor", "pointer");
+
+ if (root.dragFlag == 0) {
+ if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {
+ _docMouseUp(event);
+ return true;
+ }
+
+ for (i = 0, l = nodes.length; i < l; i++) {
+ if (i == 0) {
+ root.dragNodeShowBefore = [];
+ }
+ tmpNode = nodes[i];
+ if (data.nodeIsParent(setting, tmpNode) && tmpNode.open) {
+ view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
+ root.dragNodeShowBefore[tmpNode.tId] = true;
+ } else {
+ root.dragNodeShowBefore[tmpNode.tId] = false;
+ }
+ }
+
+ root.dragFlag = 1;
+ roots.showHoverDom = false;
+ tools.showIfameMask(setting, true);
+
+ //sort
+ var isOrder = true, lastIndex = -1;
+ if (nodes.length > 1) {
+ var pNodes = nodes[0].parentTId ? data.nodeChildren(setting, nodes[0].getParentNode()) : data.getNodes(setting);
+ tmpNodes = [];
+ for (i = 0, l = pNodes.length; i < l; i++) {
+ if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {
+ if (isOrder && lastIndex > -1 && (lastIndex + 1) !== i) {
+ isOrder = false;
+ }
+ tmpNodes.push(pNodes[i]);
+ lastIndex = i;
+ }
+ if (nodes.length === tmpNodes.length) {
+ nodes = tmpNodes;
+ break;
+ }
+ }
+ }
+ if (isOrder) {
+ preNode = nodes[0].getPreNode();
+ nextNode = nodes[nodes.length - 1].getNextNode();
+ }
+
+ //set node in selected
+ curNode = $$("<ul class='zTreeDragUL'></ul>", setting);
+ for (i = 0, l = nodes.length; i < l; i++) {
+ tmpNode = nodes[i];
+ tmpNode.editNameFlag = false;
+ view.selectNode(setting, tmpNode, i > 0);
+ view.removeTreeDom(setting, tmpNode);
+
+ if (i > setting.edit.drag.maxShowNodeNum - 1) {
+ continue;
+ }
+
+ tmpDom = $$("<li id='" + tmpNode.tId + "_tmp'></li>", setting);
+ tmpDom.append($$(tmpNode, consts.id.A, setting).clone());
+ tmpDom.css("padding", "0");
+ tmpDom.children("#" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);
+ curNode.append(tmpDom);
+ if (i == setting.edit.drag.maxShowNodeNum - 1) {
+ tmpDom = $$("<li id='" + tmpNode.tId + "_moretmp'><a> ... </a></li>", setting);
+ curNode.append(tmpDom);
+ }
+ }
+ curNode.attr("id", nodes[0].tId + consts.id.UL + "_tmp");
+ curNode.addClass(setting.treeObj.attr("class"));
+ curNode.appendTo(body);
+
+ tmpArrow = $$("<span class='tmpzTreeMove_arrow'></span>", setting);
+ tmpArrow.attr("id", "zTreeMove_arrow_tmp");
+ tmpArrow.appendTo(body);
+
+ setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);
+ }
+
+ if (root.dragFlag == 1) {
+ if (tmpTarget && tmpArrow.attr("id") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft() + 2) > ($("#" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {
+ var xT = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget);
+ event.target = (xT.length > 0) ? xT.get(0) : event.target;
+ } else if (tmpTarget) {
+ tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
+ if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
+ .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
+ }
+ tmpTarget = null;
+ tmpTargetNodeId = null;
+
+ //judge drag & drop in multi ztree
+ isOtherTree = false;
+ targetSetting = setting;
+ var settings = data.getSettings();
+ for (var s in settings) {
+ if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId
+ && (event.target.id == settings[s].treeId || $(event.target).parents("#" + settings[s].treeId).length > 0)) {
+ isOtherTree = true;
+ targetSetting = settings[s];
+ }
+ }
+
+ var docScrollTop = doc.scrollTop(),
+ docScrollLeft = doc.scrollLeft(),
+ treeOffset = targetSetting.treeObj.offset(),
+ scrollHeight = targetSetting.treeObj.get(0).scrollHeight,
+ scrollWidth = targetSetting.treeObj.get(0).scrollWidth,
+ dTop = (event.clientY + docScrollTop - treeOffset.top),
+ dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),
+ dLeft = (event.clientX + docScrollLeft - treeOffset.left),
+ dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),
+ isTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin),
+ isBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin),
+ isLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin),
+ isRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin),
+ isTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin,
+ isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),
+ isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height() + 10) >= scrollHeight),
+ isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),
+ isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width() + 10) >= scrollWidth);
+
+ if (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) {
+ //get node <li> dom
+ var targetObj = event.target;
+ while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, "li") && targetObj.id != targetSetting.treeId) {
+ targetObj = targetObj.parentNode;
+ }
+
+ var canMove = true;
+ //don't move to self or children of self
+ for (i = 0, l = nodes.length; i < l; i++) {
+ tmpNode = nodes[i];
+ if (targetObj.id === tmpNode.tId) {
+ canMove = false;
+ break;
+ } else if ($$(tmpNode, setting).find("#" + targetObj.id).length > 0) {
+ canMove = false;
+ break;
+ }
+ }
+ if (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) {
+ tmpTarget = $(targetObj);
+ tmpTargetNodeId = targetObj.id;
+ }
+ }
+
+ //the mouse must be in zTree
+ tmpNode = nodes[0];
+ if (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) {
+ //judge mouse move in root of ztree
+ if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {
+ tmpTarget = targetSetting.treeObj;
+ }
+ //auto scroll top
+ if (isTop) {
+ targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() - 10);
+ } else if (isBottom) {
+ targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() + 10);
+ }
+ if (isLeft) {
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() - 10);
+ } else if (isRight) {
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + 10);
+ }
+ //auto scroll left
+ if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {
+ targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + tmpTarget.offset().left - targetSetting.treeObj.offset().left);
+ }
+ }
+
+ curNode.css({
+ "top": (event.clientY + docScrollTop + 3) + "px",
+ "left": (event.clientX + docScrollLeft + 3) + "px"
+ });
+
+ var dX = 0;
+ var dY = 0;
+ if (tmpTarget && tmpTarget.attr("id") != targetSetting.treeId) {
+ var tmpTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId),
+ isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy),
+ isPrev = !!(preNode && tmpTargetNodeId === preNode.tId),
+ isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),
+ isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),
+ canPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev),
+ canNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next),
+ canInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !data.nodeIsParent(setting, tmpTargetNode)) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner);
+
+ function clearMove() {
+ tmpTarget = null;
+ tmpTargetNodeId = "";
+ moveType = consts.move.TYPE_INNER;
+ tmpArrow.css({
+ "display": "none"
+ });
+ if (window.zTreeMoveTimer) {
+ clearTimeout(window.zTreeMoveTimer);
+ window.zTreeMoveTargetNodeTId = null
+ }
+ }
+
+ if (!canPrev && !canNext && !canInner) {
+ clearMove();
+ } else {
+ var tmpTargetA = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget),
+ tmpNextA = tmpTargetNode.isLastNode ? null : $("#" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),
+ tmpTop = tmpTargetA.offset().top,
+ tmpLeft = tmpTargetA.offset().left,
+ prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1)) : -1,
+ nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0)) : -1,
+ dY_percent = (event.clientY + docScrollTop - tmpTop) / tmpTargetA.height();
+
+ if ((prevPercent == 1 || dY_percent <= prevPercent && dY_percent >= -.2) && canPrev) {
+ dX = 1 - tmpArrow.width();
+ dY = tmpTop - tmpArrow.height() / 2;
+ moveType = consts.move.TYPE_PREV;
+ } else if ((nextPercent == 0 || dY_percent >= nextPercent && dY_percent <= 1.2) && canNext) {
+ dX = 1 - tmpArrow.width();
+ dY = (tmpNextA == null || (data.nodeIsParent(setting, tmpTargetNode) && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height() / 2) : (tmpNextA.offset().top - tmpArrow.height() / 2);
+ moveType = consts.move.TYPE_NEXT;
+ } else if (canInner) {
+ dX = 5 - tmpArrow.width();
+ dY = tmpTop;
+ moveType = consts.move.TYPE_INNER;
+ } else {
+ clearMove();
+ }
+
+ if (tmpTarget) {
+ tmpArrow.css({
+ "display": "block",
+ "top": dY + "px",
+ "left": (tmpLeft + dX) + "px"
+ });
+ tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType);
+
+ if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {
+ startTime = (new Date()).getTime();
+ }
+ if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && moveType == consts.move.TYPE_INNER) {
+ var startTimer = true;
+ if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {
+ clearTimeout(window.zTreeMoveTimer);
+ window.zTreeMoveTargetNodeTId = null;
+ } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {
+ startTimer = false;
+ }
+ if (startTimer) {
+ window.zTreeMoveTimer = setTimeout(function () {
+ if (moveType != consts.move.TYPE_INNER) return;
+ if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime
+ && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {
+ view.switchNode(targetSetting, tmpTargetNode);
+ if (targetSetting.edit.drag.autoExpandTrigger) {
+ targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);
+ }
+ }
+ }, targetSetting.edit.drag.autoOpenTime + 50);
+ window.zTreeMoveTargetNodeTId = tmpTargetNode.tId;
+ }
+ }
+ }
+ }
+ } else {
+ moveType = consts.move.TYPE_INNER;
+ if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) {
+ tmpTarget.addClass(consts.node.TMPTARGET_TREE);
+ } else {
+ tmpTarget = null;
+ }
+ tmpArrow.css({
+ "display": "none"
+ });
+ if (window.zTreeMoveTimer) {
+ clearTimeout(window.zTreeMoveTimer);
+ window.zTreeMoveTargetNodeTId = null;
+ }
+ }
+ preTmpTargetNodeId = tmpTargetNodeId;
+ preTmpMoveType = moveType;
+
+ setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]);
+ }
+ return false;
+ }
+
+ doc.bind("mouseup", _docMouseUp);
+
+ function _docMouseUp(event) {
+ if (window.zTreeMoveTimer) {
+ clearTimeout(window.zTreeMoveTimer);
+ window.zTreeMoveTargetNodeTId = null;
+ }
+ preTmpTargetNodeId = null;
+ preTmpMoveType = null;
+ doc.unbind("mousemove", _docMouseMove);
+ doc.unbind("mouseup", _docMouseUp);
+ doc.unbind("selectstart", _docSelect);
+ body.css("cursor", "");
+ if (tmpTarget) {
+ tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
+ if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
+ .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
+ }
+ tools.showIfameMask(setting, false);
+
+ roots.showHoverDom = true;
+ if (root.dragFlag == 0) return;
+ root.dragFlag = 0;
+
+ var i, l, tmpNode;
+ for (i = 0, l = nodes.length; i < l; i++) {
+ tmpNode = nodes[i];
+ if (data.nodeIsParent(setting, tmpNode) && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {
+ view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
+ delete root.dragNodeShowBefore[tmpNode.tId];
+ }
+ }
+
+ if (curNode) curNode.remove();
+ if (tmpArrow) tmpArrow.remove();
+
+ var isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy);
+ if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId == nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {
+ tmpTarget = null;
+ }
+ if (tmpTarget) {
+ var dragTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId);
+ if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) {
+ view.selectNodes(sourceSetting, nodes);
+ return;
+ }
+ var newNodes = isCopy ? tools.clone(nodes) : nodes;
+
+ function dropCallback() {
+ if (isOtherTree) {
+ if (!isCopy) {
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ view.removeNode(setting, nodes[i]);
+ }
+ }
+ if (moveType == consts.move.TYPE_INNER) {
+ view.addNodes(targetSetting, dragTargetNode, -1, newNodes);
+ } else {
+ view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);
+ }
+ } else {
+ if (isCopy && moveType == consts.move.TYPE_INNER) {
+ view.addNodes(targetSetting, dragTargetNode, -1, newNodes);
+ } else if (isCopy) {
+ view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);
+ } else {
+ if (moveType != consts.move.TYPE_NEXT) {
+ for (i = 0, l = newNodes.length; i < l; i++) {
+ view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);
+ }
+ } else {
+ for (i = -1, l = newNodes.length - 1; i < l; l--) {
+ view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);
+ }
+ }
+ }
+ }
+ view.selectNodes(targetSetting, newNodes);
+
+ var a = $$(newNodes[0], setting).get(0);
+ view.scrollIntoView(setting, a);
+
+ setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);
+ }
+
+ if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {
+ view.asyncNode(targetSetting, dragTargetNode, false, dropCallback);
+ } else {
+ dropCallback();
+ }
+
+ } else {
+ view.selectNodes(sourceSetting, nodes);
+ setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);
+ }
+ }
+
+ doc.bind("selectstart", _docSelect);
+
+ function _docSelect() {
+ return false;
+ }
+
+ // 2018-03-30 FireFox has fixed this issue.
+ //Avoid FireFox's Bug
+ //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.
+ // if(eventMouseDown.preventDefault) {
+ // eventMouseDown.preventDefault();
+ // }
+ return true;
+ }
+ },
+ //method of tools for zTree
+ _tools = {
+ getAbs: function (obj) {
+ var oRect = obj.getBoundingClientRect(),
+ scrollTop = document.body.scrollTop + document.documentElement.scrollTop,
+ scrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;
+ return [oRect.left + scrollLeft, oRect.top + scrollTop];
+ },
+ inputFocus: function (inputObj) {
+ if (inputObj.get(0)) {
+ inputObj.focus();
+ tools.setCursorPosition(inputObj.get(0), inputObj.val().length);
+ }
+ },
+ inputSelect: function (inputObj) {
+ if (inputObj.get(0)) {
+ inputObj.focus();
+ inputObj.select();
+ }
+ },
+ setCursorPosition: function (obj, pos) {
+ if (obj.setSelectionRange) {
+ obj.focus();
+ obj.setSelectionRange(pos, pos);
+ } else if (obj.createTextRange) {
+ var range = obj.createTextRange();
+ range.collapse(true);
+ range.moveEnd('character', pos);
+ range.moveStart('character', pos);
+ range.select();
+ }
+ },
+ showIfameMask: function (setting, showSign) {
+ var root = data.getRoot(setting);
+ //clear full mask
+ while (root.dragMaskList.length > 0) {
+ root.dragMaskList[0].remove();
+ root.dragMaskList.shift();
+ }
+ if (showSign) {
+ //show mask
+ var iframeList = $$("iframe", setting);
+ for (var i = 0, l = iframeList.length; i < l; i++) {
+ var obj = iframeList.get(i),
+ r = tools.getAbs(obj),
+ dragMask = $$("<div id='zTreeMask_" + i + "' class='zTreeMask' style='top:" + r[1] + "px; left:" + r[0] + "px; width:" + obj.offsetWidth + "px; height:" + obj.offsetHeight + "px;'></div>", setting);
+ dragMask.appendTo($$("body", setting));
+ root.dragMaskList.push(dragMask);
+ }
+ }
+ }
+ },
+ //method of operate ztree dom
+ _view = {
+ addEditBtn: function (setting, node) {
+ if (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) {
+ return;
+ }
+ if (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) {
+ return;
+ }
+ var aObj = $$(node, consts.id.A, setting),
+ editStr = "<span class='" + consts.className.BUTTON + " edit' id='" + node.tId + consts.id.EDIT + "' title='" + tools.apply(setting.edit.renameTitle, [setting.treeId, node], setting.edit.renameTitle) + "' treeNode" + consts.id.EDIT + " style='display:none;'></span>";
+ aObj.append(editStr);
+
+ $$(node, consts.id.EDIT, setting).bind('click',
+ function () {
+ if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;
+ view.editNode(setting, node);
+ return false;
+ }
+ ).show();
+ },
+ addRemoveBtn: function (setting, node) {
+ if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) {
+ return;
+ }
+ if (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) {
+ return;
+ }
+ var aObj = $$(node, consts.id.A, setting),
+ removeStr = "<span class='" + consts.className.BUTTON + " remove' id='" + node.tId + consts.id.REMOVE + "' title='" + tools.apply(setting.edit.removeTitle, [setting.treeId, node], setting.edit.removeTitle) + "' treeNode" + consts.id.REMOVE + " style='display:none;'></span>";
+ aObj.append(removeStr);
+
+ $$(node, consts.id.REMOVE, setting).bind('click',
+ function () {
+ if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;
+ view.removeNode(setting, node);
+ setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
+ return false;
+ }
+ ).bind('mousedown',
+ function (eventMouseDown) {
+ return true;
+ }
+ ).show();
+ },
+ addHoverDom: function (setting, node) {
+ if (data.getRoots().showHoverDom) {
+ node.isHover = true;
+ if (setting.edit.enable) {
+ view.addEditBtn(setting, node);
+ view.addRemoveBtn(setting, node);
+ }
+ tools.apply(setting.view.addHoverDom, [setting.treeId, node]);
+ }
+ },
+ cancelCurEditNode: function (setting, forceName, isCancel) {
+ var root = data.getRoot(setting),
+ node = root.curEditNode;
+
+ if (node) {
+ var inputObj = root.curEditInput,
+ newName = forceName ? forceName : (isCancel ? data.nodeName(setting, node) : inputObj.val());
+ if (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) {
+ return false;
+ }
+ data.nodeName(setting, node, newName);
+ var aObj = $$(node, consts.id.A, setting);
+ aObj.removeClass(consts.node.CURSELECTED_EDIT);
+ inputObj.unbind();
+ view.setNodeName(setting, node);
+ node.editNameFlag = false;
+ root.curEditNode = null;
+ root.curEditInput = null;
+ view.selectNode(setting, node, false);
+ setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]);
+ }
+ root.noSelection = true;
+ return true;
+ },
+ editNode: function (setting, node) {
+ var root = data.getRoot(setting);
+ view.editNodeBlur = false;
+ if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
+ setTimeout(function () {
+ tools.inputFocus(root.curEditInput);
+ }, 0);
+ return;
+ }
+ node.editNameFlag = true;
+ view.removeTreeDom(setting, node);
+ view.cancelCurEditNode(setting);
+ view.selectNode(setting, node, false);
+ $$(node, consts.id.SPAN, setting).html("<input type=text class='rename' id='" + node.tId + consts.id.INPUT + "' treeNode" + consts.id.INPUT + " >");
+ var inputObj = $$(node, consts.id.INPUT, setting);
+ inputObj.attr("value", data.nodeName(setting, node));
+ if (setting.edit.editNameSelectAll) {
+ tools.inputSelect(inputObj);
+ } else {
+ tools.inputFocus(inputObj);
+ }
+
+ inputObj.bind('blur', function (event) {
+ if (!view.editNodeBlur) {
+ view.cancelCurEditNode(setting);
+ }
+ }).bind('keydown', function (event) {
+ if (event.keyCode == "13") {
+ view.editNodeBlur = true;
+ view.cancelCurEditNode(setting);
+ } else if (event.keyCode == "27") {
+ view.cancelCurEditNode(setting, null, true);
+ }
+ }).bind('click', function (event) {
+ return false;
+ }).bind('dblclick', function (event) {
+ return false;
+ });
+
+ $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT);
+ root.curEditInput = inputObj;
+ root.noSelection = false;
+ root.curEditNode = node;
+ },
+ moveNode: function (setting, targetNode, node, moveType, animateFlag, isSilent) {
+ var root = data.getRoot(setting);
+ if (targetNode == node) return;
+ if (setting.data.keep.leaf && targetNode && !data.nodeIsParent(setting, targetNode) && moveType == consts.move.TYPE_INNER) return;
+ var oldParentNode = (node.parentTId ? node.getParentNode() : root),
+ targetNodeIsRoot = (targetNode === null || targetNode == root);
+ if (targetNodeIsRoot && targetNode === null) targetNode = root;
+ if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;
+ var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);
+
+ if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {
+ moveType = consts.move.TYPE_INNER;
+ }
+
+ if (moveType == consts.move.TYPE_INNER) {
+ if (targetNodeIsRoot) {
+ //parentTId of root node is null
+ node.parentTId = null;
+ } else {
+ if (!data.nodeIsParent(setting, targetNode)) {
+ data.nodeIsParent(setting, targetNode, true);
+ targetNode.open = !!targetNode.open;
+ view.setNodeLineIcos(setting, targetNode);
+ }
+ node.parentTId = targetNode.tId;
+ }
+ }
+
+ //move node Dom
+ var targetObj, target_ulObj;
+ if (targetNodeIsRoot) {
+ targetObj = setting.treeObj;
+ target_ulObj = targetObj;
+ } else {
+ if (!isSilent && moveType == consts.move.TYPE_INNER) {
+ view.expandCollapseNode(setting, targetNode, true, false);
+ } else if (!isSilent) {
+ view.expandCollapseNode(setting, targetNode.getParentNode(), true, false);
+ }
+ targetObj = $$(targetNode, setting);
+ target_ulObj = $$(targetNode, consts.id.UL, setting);
+ if (!!targetObj.get(0) && !target_ulObj.get(0)) {
+ var ulstr = [];
+ view.makeUlHtml(setting, targetNode, ulstr, '');
+ targetObj.append(ulstr.join(''));
+ }
+ target_ulObj = $$(targetNode, consts.id.UL, setting);
+ }
+ var nodeDom = $$(node, setting);
+ if (!nodeDom.get(0)) {
+ nodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join('');
+ } else if (!targetObj.get(0)) {
+ nodeDom.remove();
+ }
+ if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {
+ target_ulObj.append(nodeDom);
+ } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {
+ targetObj.before(nodeDom);
+ } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {
+ targetObj.after(nodeDom);
+ }
+
+ //repair the data after move
+ var i, l,
+ tmpSrcIndex = -1,
+ tmpTargetIndex = 0,
+ oldNeighbor = null,
+ newNeighbor = null,
+ oldLevel = node.level;
+ var oldChildren = data.nodeChildren(setting, oldParentNode);
+ var targetParentChildren = data.nodeChildren(setting, targetParentNode);
+ var targetChildren = data.nodeChildren(setting, targetNode);
+ if (node.isFirstNode) {
+ tmpSrcIndex = 0;
+ if (oldChildren.length > 1) {
+ oldNeighbor = oldChildren[1];
+ oldNeighbor.isFirstNode = true;
+ }
+ } else if (node.isLastNode) {
+ tmpSrcIndex = oldChildren.length - 1;
+ oldNeighbor = oldChildren[tmpSrcIndex - 1];
+ oldNeighbor.isLastNode = true;
+ } else {
+ for (i = 0, l = oldChildren.length; i < l; i++) {
+ if (oldChildren[i].tId == node.tId) {
+ tmpSrcIndex = i;
+ break;
+ }
+ }
+ }
+ if (tmpSrcIndex >= 0) {
+ oldChildren.splice(tmpSrcIndex, 1);
+ }
+ if (moveType != consts.move.TYPE_INNER) {
+ for (i = 0, l = targetParentChildren.length; i < l; i++) {
+ if (targetParentChildren[i].tId == targetNode.tId) tmpTargetIndex = i;
+ }
+ }
+ if (moveType == consts.move.TYPE_INNER) {
+ if (!targetChildren) {
+ targetChildren = data.nodeChildren(setting, targetNode, []);
+ }
+ if (targetChildren.length > 0) {
+ newNeighbor = targetChildren[targetChildren.length - 1];
+ newNeighbor.isLastNode = false;
+ }
+ targetChildren.splice(targetChildren.length, 0, node);
+ node.isLastNode = true;
+ node.isFirstNode = (targetChildren.length == 1);
+ } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {
+ targetParentChildren.splice(tmpTargetIndex, 0, node);
+ newNeighbor = targetNode;
+ newNeighbor.isFirstNode = false;
+ node.parentTId = targetNode.parentTId;
+ node.isFirstNode = true;
+ node.isLastNode = false;
+
+ } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {
+ targetParentChildren.splice(tmpTargetIndex + 1, 0, node);
+ newNeighbor = targetNode;
+ newNeighbor.isLastNode = false;
+ node.parentTId = targetNode.parentTId;
+ node.isFirstNode = false;
+ node.isLastNode = true;
+
+ } else {
+ if (moveType == consts.move.TYPE_PREV) {
+ targetParentChildren.splice(tmpTargetIndex, 0, node);
+ } else {
+ targetParentChildren.splice(tmpTargetIndex + 1, 0, node);
+ }
+ node.parentTId = targetNode.parentTId;
+ node.isFirstNode = false;
+ node.isLastNode = false;
+ }
+ data.fixPIdKeyValue(setting, node);
+ data.setSonNodeLevel(setting, node.getParentNode(), node);
+
+ //repair node what been moved
+ view.setNodeLineIcos(setting, node);
+ view.repairNodeLevelClass(setting, node, oldLevel);
+
+ //repair node's old parentNode dom
+ if (!setting.data.keep.parent && oldChildren.length < 1) {
+ //old parentNode has no child nodes
+ data.nodeIsParent(setting, oldParentNode, false);
+ oldParentNode.open = false;
+ var tmp_ulObj = $$(oldParentNode, consts.id.UL, setting),
+ tmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting),
+ tmp_icoObj = $$(oldParentNode, consts.id.ICON, setting);
+ view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);
+ view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);
+ tmp_ulObj.css("display", "none");
+
+ } else if (oldNeighbor) {
+ //old neigbor node
+ view.setNodeLineIcos(setting, oldNeighbor);
+ }
+
+ //new neigbor node
+ if (newNeighbor) {
+ view.setNodeLineIcos(setting, newNeighbor);
+ }
+
+ //repair checkbox / radio
+ if (!!setting.check && setting.check.enable && view.repairChkClass) {
+ view.repairChkClass(setting, oldParentNode);
+ view.repairParentChkClassWithSelf(setting, oldParentNode);
+ if (oldParentNode != node.parent)
+ view.repairParentChkClassWithSelf(setting, node);
+ }
+
+ //expand parents after move
+ if (!isSilent) {
+ view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);
+ }
+ },
+ removeEditBtn: function (setting, node) {
+ $$(node, consts.id.EDIT, setting).unbind().remove();
+ },
+ removeRemoveBtn: function (setting, node) {
+ $$(node, consts.id.REMOVE, setting).unbind().remove();
+ },
+ removeTreeDom: function (setting, node) {
+ node.isHover = false;
+ view.removeEditBtn(setting, node);
+ view.removeRemoveBtn(setting, node);
+ tools.apply(setting.view.removeHoverDom, [setting.treeId, node]);
+ },
+ repairNodeLevelClass: function (setting, node, oldLevel) {
+ if (oldLevel === node.level) return;
+ var liObj = $$(node, setting),
+ aObj = $$(node, consts.id.A, setting),
+ ulObj = $$(node, consts.id.UL, setting),
+ oldClass = consts.className.LEVEL + oldLevel,
+ newClass = consts.className.LEVEL + node.level;
+ liObj.removeClass(oldClass);
+ liObj.addClass(newClass);
+ aObj.removeClass(oldClass);
+ aObj.addClass(newClass);
+ ulObj.removeClass(oldClass);
+ ulObj.addClass(newClass);
+ },
+ selectNodes: function (setting, nodes) {
+ for (var i = 0, l = nodes.length; i < l; i++) {
+ view.selectNode(setting, nodes[i], i > 0);
+ }
+ }
+ },
+
+ _z = {
+ tools: _tools,
+ view: _view,
+ event: _event,
+ data: _data
+ };
+ $.extend(true, $.fn.zTree.consts, _consts);
+ $.extend(true, $.fn.zTree._z, _z);
+
+ var zt = $.fn.zTree,
+ tools = zt._z.tools,
+ consts = zt.consts,
+ view = zt._z.view,
+ data = zt._z.data,
+ event = zt._z.event,
+ $$ = tools.$;
+
+ data.exSetting(_setting);
+ data.addInitBind(_bindEvent);
+ data.addInitUnBind(_unbindEvent);
+ data.addInitCache(_initCache);
+ data.addInitNode(_initNode);
+ data.addInitProxy(_eventProxy);
+ data.addInitRoot(_initRoot);
+ data.addZTreeTools(_zTreeTools);
+
+ var _cancelPreSelectedNode = view.cancelPreSelectedNode;
+ view.cancelPreSelectedNode = function (setting, node) {
+ var list = data.getRoot(setting).curSelectedList;
+ for (var i = 0, j = list.length; i < j; i++) {
+ if (!node || node === list[i]) {
+ view.removeTreeDom(setting, list[i]);
+ if (node) break;
+ }
+ }
+ if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);
+ }
+
+ var _createNodes = view.createNodes;
+ view.createNodes = function (setting, level, nodes, parentNode, index) {
+ if (_createNodes) {
+ _createNodes.apply(view, arguments);
+ }
+ if (!nodes) return;
+ if (view.repairParentChkClassWithSelf) {
+ view.repairParentChkClassWithSelf(setting, parentNode);
+ }
+ }
+
+ var _makeNodeUrl = view.makeNodeUrl;
+ view.makeNodeUrl = function (setting, node) {
+ return setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments));
+ }
+
+ var _removeNode = view.removeNode;
+ view.removeNode = function (setting, node) {
+ var root = data.getRoot(setting);
+ if (root.curEditNode === node) root.curEditNode = null;
+ if (_removeNode) {
+ _removeNode.apply(view, arguments);
+ }
+ }
+
+ var _selectNode = view.selectNode;
+ view.selectNode = function (setting, node, addFlag) {
+ var root = data.getRoot(setting);
+ if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
+ return false;
+ }
+ if (_selectNode) _selectNode.apply(view, arguments);
+ view.addHoverDom(setting, node);
+ return true;
+ }
+
+ var _uCanDo = tools.uCanDo;
+ tools.uCanDo = function (setting, e) {
+ var root = data.getRoot(setting);
+ if (e && (tools.eqs(e.type, "mouseover") || tools.eqs(e.type, "mouseout") || tools.eqs(e.type, "mousedown") || tools.eqs(e.type, "mouseup"))) {
+ return true;
+ }
+ if (root.curEditNode) {
+ view.editNodeBlur = false;
+ root.curEditInput.focus();
+ }
+ return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);
+ }
+})(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.all.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exhide.js
===================================================================
--- base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exhide.js (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exhide.js (revision 10)
@@ -0,0 +1,405 @@
+/*
+ * JQuery zTree exHideNodes
+ * v3.5.43
+ * http://treejs.cn/
+ *
+ * Copyright (c) 2010 Hunter.z
+ *
+ * Licensed same as jquery - MIT License
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: 2020-04-04
+ */
+
+(function ($) {
+ var _setting = {
+ data: {
+ key: {
+ isHidden: "isHidden"
+ }
+ }
+ };
+ //default init node of exLib
+ var _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
+ var isHidden = data.isHidden(setting, n);
+ data.isHidden(setting, n, isHidden);
+ data.initHideForExCheck(setting, n);
+ },
+ //add dom for check
+ _beforeA = function (setting, node, html) {
+ },
+ //update zTreeObj, add method of exLib
+ _zTreeTools = function (setting, zTreeTools) {
+ zTreeTools.showNodes = function (nodes, options) {
+ view.showNodes(setting, nodes, options);
+ }
+ zTreeTools.showNode = function (node, options) {
+ if (!node) {
+ return;
+ }
+ view.showNodes(setting, [node], options);
+ }
+ zTreeTools.hideNodes = function (nodes, options) {
+ view.hideNodes(setting, nodes, options);
+ }
+ zTreeTools.hideNode = function (node, options) {
+ if (!node) {
+ return;
+ }
+ view.hideNodes(setting, [node], options);
+ }
+
+ var _checkNode = zTreeTools.checkNode;
+ if (_checkNode) {
+ zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) {
+ if (!!node && !!data.isHidden(setting, node)) {
+ return;
+ }
+ _checkNode.apply(zTreeTools, arguments);
+ }
+ }
+ },
+ //method of operate data
+ _data = {
+ initHideForExCheck: function (setting, n) {
+ var isHidden = data.isHidden(setting, n);
+ if (isHidden && setting.check && setting.check.enable) {
+ if (typeof n._nocheck == "undefined") {
+ n._nocheck = !!n.nocheck
+ n.nocheck = true;
+ }
+ n.check_Child_State = -1;
+ if (view.repairParentChkClassWithSelf) {
+ view.repairParentChkClassWithSelf(setting, n);
+ }
+ }
+ },
+ initShowForExCheck: function (setting, n) {
+ var isHidden = data.isHidden(setting, n);
+ if (!isHidden && setting.check && setting.check.enable) {
+ if (typeof n._nocheck != "undefined") {
+ n.nocheck = n._nocheck;
+ delete n._nocheck;
+ }
+ if (view.setChkClass) {
+ var checkObj = $$(n, consts.id.CHECK, setting);
+ view.setChkClass(setting, checkObj, n);
+ }
+ if (view.repairParentChkClassWithSelf) {
+ view.repairParentChkClassWithSelf(setting, n);
+ }
+ }
+ }
+ },
+ //method of operate ztree dom
+ _view = {
+ clearOldFirstNode: function (setting, node) {
+ var n = node.getNextNode();
+ while (!!n) {
+ if (n.isFirstNode) {
+ n.isFirstNode = false;
+ view.setNodeLineIcos(setting, n);
+ break;
+ }
+ if (n.isLastNode) {
+ break;
+ }
+ n = n.getNextNode();
+ }
+ },
+ clearOldLastNode: function (setting, node, openFlag) {
+ var n = node.getPreNode();
+ while (!!n) {
+ if (n.isLastNode) {
+ n.isLastNode = false;
+ if (openFlag) {
+ view.setNodeLineIcos(setting, n);
+ }
+ break;
+ }
+ if (n.isFirstNode) {
+ break;
+ }
+ n = n.getPreNode();
+ }
+ },
+ makeDOMNodeMainBefore: function (html, setting, node) {
+ var isHidden = data.isHidden(setting, node);
+ html.push("<li ", (isHidden ? "style='display:none;' " : ""), "id='", node.tId, "' class='", consts.className.LEVEL, node.level, "' tabindex='0' hidefocus='true' treenode>");
+ },
+ showNode: function (setting, node, options) {
+ data.isHidden(setting, node, false);
+ data.initShowForExCheck(setting, node);
+ $$(node, setting).show();
+ },
+ showNodes: function (setting, nodes, options) {
+ if (!nodes || nodes.length == 0) {
+ return;
+ }
+ var pList = {}, i, j;
+ for (i = 0, j = nodes.length; i < j; i++) {
+ var n = nodes[i];
+ if (!pList[n.parentTId]) {
+ var pn = n.getParentNode();
+ pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();
+ }
+ view.showNode(setting, n, options);
+ }
+ for (var tId in pList) {
+ var children = data.nodeChildren(setting, pList[tId]);
+ view.setFirstNodeForShow(setting, children);
+ view.setLastNodeForShow(setting, children);
+ }
+ },
+ hideNode: function (setting, node, options) {
+ data.isHidden(setting, node, true);
+ node.isFirstNode = false;
+ node.isLastNode = false;
+ data.initHideForExCheck(setting, node);
+ view.cancelPreSelectedNode(setting, node);
+ $$(node, setting).hide();
+ },
+ hideNodes: function (setting, nodes, options) {
+ if (!nodes || nodes.length == 0) {
+ return;
+ }
+ var pList = {}, i, j;
+ for (i = 0, j = nodes.length; i < j; i++) {
+ var n = nodes[i];
+ if ((n.isFirstNode || n.isLastNode) && !pList[n.parentTId]) {
+ var pn = n.getParentNode();
+ pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();
+ }
+ view.hideNode(setting, n, options);
+ }
+ for (var tId in pList) {
+ var children = data.nodeChildren(setting, pList[tId]);
+ view.setFirstNodeForHide(setting, children);
+ view.setLastNodeForHide(setting, children);
+ }
+ },
+ setFirstNode: function (setting, parentNode) {
+ var children = data.nodeChildren(setting, parentNode);
+ var isHidden = data.isHidden(setting, children[0], false);
+ if (children.length > 0 && !isHidden) {
+ children[0].isFirstNode = true;
+ } else if (children.length > 0) {
+ view.setFirstNodeForHide(setting, children);
+ }
+ },
+ setLastNode: function (setting, parentNode) {
+ var children = data.nodeChildren(setting, parentNode);
+ var isHidden = data.isHidden(setting, children[0]);
+ if (children.length > 0 && !isHidden) {
+ children[children.length - 1].isLastNode = true;
+ } else if (children.length > 0) {
+ view.setLastNodeForHide(setting, children);
+ }
+ },
+ setFirstNodeForHide: function (setting, nodes) {
+ var n, i, j;
+ for (i = 0, j = nodes.length; i < j; i++) {
+ n = nodes[i];
+ if (n.isFirstNode) {
+ break;
+ }
+ var isHidden = data.isHidden(setting, n);
+ if (!isHidden && !n.isFirstNode) {
+ n.isFirstNode = true;
+ view.setNodeLineIcos(setting, n);
+ break;
+ } else {
+ n = null;
+ }
+ }
+ return n;
+ },
+ setFirstNodeForShow: function (setting, nodes) {
+ var n, i, j, first, old;
+ for (i = 0, j = nodes.length; i < j; i++) {
+ n = nodes[i];
+ var isHidden = data.isHidden(setting, n);
+ if (!first && !isHidden && n.isFirstNode) {
+ first = n;
+ break;
+ } else if (!first && !isHidden && !n.isFirstNode) {
+ n.isFirstNode = true;
+ first = n;
+ view.setNodeLineIcos(setting, n);
+ } else if (first && n.isFirstNode) {
+ n.isFirstNode = false;
+ old = n;
+ view.setNodeLineIcos(setting, n);
+ break;
+ } else {
+ n = null;
+ }
+ }
+ return {"new": first, "old": old};
+ },
+ setLastNodeForHide: function (setting, nodes) {
+ var n, i;
+ for (i = nodes.length - 1; i >= 0; i--) {
+ n = nodes[i];
+ if (n.isLastNode) {
+ break;
+ }
+ var isHidden = data.isHidden(setting, n);
+ if (!isHidden && !n.isLastNode) {
+ n.isLastNode = true;
+ view.setNodeLineIcos(setting, n);
+ break;
+ } else {
+ n = null;
+ }
+ }
+ return n;
+ },
+ setLastNodeForShow: function (setting, nodes) {
+ var n, i, j, last, old;
+ for (i = nodes.length - 1; i >= 0; i--) {
+ n = nodes[i];
+ var isHidden = data.isHidden(setting, n);
+ if (!last && !isHidden && n.isLastNode) {
+ last = n;
+ break;
+ } else if (!last && !isHidden && !n.isLastNode) {
+ n.isLastNode = true;
+ last = n;
+ view.setNodeLineIcos(setting, n);
+ } else if (last && n.isLastNode) {
+ n.isLastNode = false;
+ old = n;
+ view.setNodeLineIcos(setting, n);
+ break;
+ } else {
+ n = null;
+ }
+ }
+ return {"new": last, "old": old};
+ }
+ },
+
+ _z = {
+ view: _view,
+ data: _data
+ };
+ $.extend(true, $.fn.zTree._z, _z);
+
+ var zt = $.fn.zTree,
+ tools = zt._z.tools,
+ consts = zt.consts,
+ view = zt._z.view,
+ data = zt._z.data,
+ event = zt._z.event,
+ $$ = tools.$;
+
+ data.isHidden = function (setting, node, newIsHidden) {
+ if (!node) {
+ return false;
+ }
+ var key = setting.data.key.isHidden;
+ if (typeof newIsHidden !== 'undefined') {
+ if (typeof newIsHidden === "string") {
+ newIsHidden = tools.eqs(newIsHidden, "true");
+ }
+ newIsHidden = !!newIsHidden;
+ node[key] = newIsHidden;
+ } else if (typeof node[key] == "string"){
+ node[key] = tools.eqs(node[key], "true");
+ } else {
+ node[key] = !!node[key];
+ }
+ return node[key];
+ };
+
+ data.exSetting(_setting);
+ data.addInitNode(_initNode);
+ data.addBeforeA(_beforeA);
+ data.addZTreeTools(_zTreeTools);
+
+// Override method in core
+ var _dInitNode = data.initNode;
+ data.initNode = function (setting, level, node, parentNode, isFirstNode, isLastNode, openFlag) {
+ var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting),
+ children = tmpPNode[setting.data.key.children];
+ data.tmpHideFirstNode = view.setFirstNodeForHide(setting, children);
+ data.tmpHideLastNode = view.setLastNodeForHide(setting, children);
+ if (openFlag) {
+ view.setNodeLineIcos(setting, data.tmpHideFirstNode);
+ view.setNodeLineIcos(setting, data.tmpHideLastNode);
+ }
+ isFirstNode = (data.tmpHideFirstNode === node);
+ isLastNode = (data.tmpHideLastNode === node);
+ if (_dInitNode) _dInitNode.apply(data, arguments);
+ if (openFlag && isLastNode) {
+ view.clearOldLastNode(setting, node, openFlag);
+ }
+ };
+
+ var _makeChkFlag = data.makeChkFlag;
+ if (!!_makeChkFlag) {
+ data.makeChkFlag = function (setting, node) {
+ if (!!node && !!data.isHidden(setting, node)) {
+ return;
+ }
+ _makeChkFlag.apply(data, arguments);
+ }
+ }
+
+ var _getTreeCheckedNodes = data.getTreeCheckedNodes;
+ if (!!_getTreeCheckedNodes) {
+ data.getTreeCheckedNodes = function (setting, nodes, checked, results) {
+ if (!!nodes && nodes.length > 0) {
+ var p = nodes[0].getParentNode();
+ if (!!p && !!data.isHidden(setting, p)) {
+ return [];
+ }
+ }
+ return _getTreeCheckedNodes.apply(data, arguments);
+ }
+ }
+
+ var _getTreeChangeCheckedNodes = data.getTreeChangeCheckedNodes;
+ if (!!_getTreeChangeCheckedNodes) {
+ data.getTreeChangeCheckedNodes = function (setting, nodes, results) {
+ if (!!nodes && nodes.length > 0) {
+ var p = nodes[0].getParentNode();
+ if (!!p && !!data.isHidden(setting, p)) {
+ return [];
+ }
+ }
+ return _getTreeChangeCheckedNodes.apply(data, arguments);
+ }
+ }
+
+ var _expandCollapseSonNode = view.expandCollapseSonNode;
+ if (!!_expandCollapseSonNode) {
+ view.expandCollapseSonNode = function (setting, node, expandFlag, animateFlag, callback) {
+ if (!!node && !!data.isHidden(setting, node)) {
+ return;
+ }
+ _expandCollapseSonNode.apply(view, arguments);
+ }
+ }
+
+ var _setSonNodeCheckBox = view.setSonNodeCheckBox;
+ if (!!_setSonNodeCheckBox) {
+ view.setSonNodeCheckBox = function (setting, node, value, srcNode) {
+ if (!!node && !!data.isHidden(setting, node)) {
+ return;
+ }
+ _setSonNodeCheckBox.apply(view, arguments);
+ }
+ }
+
+ var _repairParentChkClassWithSelf = view.repairParentChkClassWithSelf;
+ if (!!_repairParentChkClassWithSelf) {
+ view.repairParentChkClassWithSelf = function (setting, node) {
+ if (!!node && !!data.isHidden(setting, node)) {
+ return;
+ }
+ _repairParentChkClassWithSelf.apply(view, arguments);
+ }
+ }
+})(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.exhide.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.core.min.js
===================================================================
--- base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.core.min.js (nonexistent)
+++ base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.core.min.js (revision 10)
@@ -0,0 +1 @@
+!function($){var settings={},roots={},caches={},_consts={className:{BUTTON:"button",LEVEL:"level",ICO_LOADING:"ico_loading",SWITCH:"switch",NAME:"node_name"},event:{NODECREATED:"ztree_nodeCreated",CLICK:"ztree_click",EXPAND:"ztree_expand",COLLAPSE:"ztree_collapse",ASYNC_SUCCESS:"ztree_async_success",ASYNC_ERROR:"ztree_async_error",REMOVE:"ztree_remove",SELECTED:"ztree_selected",UNSELECTED:"ztree_unselected"},id:{A:"_a",ICON:"_ico",SPAN:"_span",SWITCH:"_switch",UL:"_ul"},line:{ROOT:"root",ROOTS:"roots",CENTER:"center",BOTTOM:"bottom",NOLINE:"noline",LINE:"line"},folder:{OPEN:"open",CLOSE:"close",DOCU:"docu"},node:{CURSELECTED:"curSelectedNode"}},_setting={treeId:"",treeObj:null,view:{addDiyDom:null,autoCancelSelected:!0,dblClickExpand:!0,expandSpeed:"fast",fontCss:{},nodeClasses:{},nameIsHTML:!1,selectedMulti:!0,showIcon:!0,showLine:!0,showTitle:!0,txtSelectedEnable:!1},data:{key:{isParent:"isParent",children:"children",name:"name",title:"",url:"url",icon:"icon"},simpleData:{enable:!1,idKey:"id",pIdKey:"pId",rootPId:null},keep:{parent:!1,leaf:!1}},async:{enable:!1,contentType:"application/x-www-form-urlencoded",type:"post",dataType:"text",headers:{},xhrFields:{},url:"",autoParam:[],otherParam:[],dataFilter:null},callback:{beforeAsync:null,beforeClick:null,beforeDblClick:null,beforeRightClick:null,beforeMouseDown:null,beforeMouseUp:null,beforeExpand:null,beforeCollapse:null,beforeRemove:null,onAsyncError:null,onAsyncSuccess:null,onNodeCreated:null,onClick:null,onDblClick:null,onRightClick:null,onMouseDown:null,onMouseUp:null,onExpand:null,onCollapse:null,onRemove:null}},_initRoot=function(e){var t=data.getRoot(e);t||(t={},data.setRoot(e,t)),data.nodeChildren(e,t,[]),t.expandTriggerFlag=!1,t.curSelectedList=[],t.noSelection=!0,t.createdNodes=[],t.zId=0,t._ver=(new Date).getTime()},_initCache=function(e){var t=data.getCache(e);t||(t={},data.setCache(e,t)),t.nodes=[],t.doms=[]},_bindEvent=function(d){var e=d.treeObj,t=consts.event;e.bind(t.NODECREATED,function(e,t,n){tools.apply(d.callback.onNodeCreated,[e,t,n])}),e.bind(t.CLICK,function(e,t,n,o,a){tools.apply(d.callback.onClick,[t,n,o,a])}),e.bind(t.EXPAND,function(e,t,n){tools.apply(d.callback.onExpand,[e,t,n])}),e.bind(t.COLLAPSE,function(e,t,n){tools.apply(d.callback.onCollapse,[e,t,n])}),e.bind(t.ASYNC_SUCCESS,function(e,t,n,o){tools.apply(d.callback.onAsyncSuccess,[e,t,n,o])}),e.bind(t.ASYNC_ERROR,function(e,t,n,o,a,r){tools.apply(d.callback.onAsyncError,[e,t,n,o,a,r])}),e.bind(t.REMOVE,function(e,t,n){tools.apply(d.callback.onRemove,[e,t,n])}),e.bind(t.SELECTED,function(e,t,n){tools.apply(d.callback.onSelected,[t,n])}),e.bind(t.UNSELECTED,function(e,t,n){tools.apply(d.callback.onUnSelected,[t,n])})},_unbindEvent=function(e){var t=e.treeObj,n=consts.event;t.unbind(n.NODECREATED).unbind(n.CLICK).unbind(n.EXPAND).unbind(n.COLLAPSE).unbind(n.ASYNC_SUCCESS).unbind(n.ASYNC_ERROR).unbind(n.REMOVE).unbind(n.SELECTED).unbind(n.UNSELECTED)},_eventProxy=function(e){var t=e.target,n=data.getSetting(e.data.treeId),o="",a=null,r="",d="",i=null,s=null,l=null;if(tools.eqs(e.type,"mousedown")?d="mousedown":tools.eqs(e.type,"mouseup")?d="mouseup":tools.eqs(e.type,"contextmenu")?d="contextmenu":tools.eqs(e.type,"click")?tools.eqs(t.tagName,"span")&&null!==t.getAttribute("treeNode"+consts.id.SWITCH)?(o=tools.getNodeMainDom(t).id,r="switchNode"):(l=tools.getMDom(n,t,[{tagName:"a",attrName:"treeNode"+consts.id.A}]))&&(o=tools.getNodeMainDom(l).id,r="clickNode"):tools.eqs(e.type,"dblclick")&&(d="dblclick",(l=tools.getMDom(n,t,[{tagName:"a",attrName:"treeNode"+consts.id.A}]))&&(o=tools.getNodeMainDom(l).id,r="switchNode")),0<d.length&&0==o.length&&(l=tools.getMDom(n,t,[{tagName:"a",attrName:"treeNode"+consts.id.A}]))&&(o=tools.getNodeMainDom(l).id),0<o.length)switch(a=data.getNodeCache(n,o),r){case"switchNode":data.nodeIsParent(n,a)&&(tools.eqs(e.type,"click")||tools.eqs(e.type,"dblclick")&&tools.apply(n.view.dblClickExpand,[n.treeId,a],n.view.dblClickExpand))?i=handler.onSwitchNode:r="";break;case"clickNode":i=handler.onClickNode}switch(d){case"mousedown":s=handler.onZTreeMousedown;break;case"mouseup":s=handler.onZTreeMouseup;break;case"dblclick":s=handler.onZTreeDblclick;break;case"contextmenu":s=handler.onZTreeContextmenu}return{stop:!1,node:a,nodeEventType:r,nodeEventCallback:i,treeEventType:d,treeEventCallback:s}},_initNode=function(e,t,n,o,a,r,d){if(n){var i=data.getRoot(e),s=data.nodeChildren(e,n);n.level=t,n.tId=e.treeId+"_"+ ++i.zId,n.parentTId=o?o.tId:null,n.open="string"==typeof n.open?tools.eqs(n.open,"true"):!!n.open;var l=data.nodeIsParent(e,n);tools.isArray(s)?(data.nodeIsParent(e,n,!0),n.zAsync=!0):(l=data.nodeIsParent(e,n,l),n.open=!(!l||e.async.enable)&&n.open,n.zAsync=!l),n.isFirstNode=a,n.isLastNode=r,n.getParentNode=function(){return data.getNodeCache(e,n.parentTId)},n.getPreNode=function(){return data.getPreNode(e,n)},n.getNextNode=function(){return data.getNextNode(e,n)},n.getIndex=function(){return data.getNodeIndex(e,n)},n.getPath=function(){return data.getNodePath(e,n)},n.isAjaxing=!1,data.fixPIdKeyValue(e,n)}},_init={bind:[_bindEvent],unbind:[_unbindEvent],caches:[_initCache],nodes:[_initNode],proxys:[_eventProxy],roots:[_initRoot],beforeA:[],afterA:[],innerBeforeA:[],innerAfterA:[],zTreeTools:[]},data={addNodeCache:function(e,t){data.getCache(e).nodes[data.getNodeCacheId(t.tId)]=t},getNodeCacheId:function(e){return e.substring(e.lastIndexOf("_")+1)},addAfterA:function(e){_init.afterA.push(e)},addBeforeA:function(e){_init.beforeA.push(e)},addInnerAfterA:function(e){_init.innerAfterA.push(e)},addInnerBeforeA:function(e){_init.innerBeforeA.push(e)},addInitBind:function(e){_init.bind.push(e)},addInitUnBind:function(e){_init.unbind.push(e)},addInitCache:function(e){_init.caches.push(e)},addInitNode:function(e){_init.nodes.push(e)},addInitProxy:function(e,t){t?_init.proxys.splice(0,0,e):_init.proxys.push(e)},addInitRoot:function(e){_init.roots.push(e)},addNodesData:function(e,t,n,o){var a,r=data.nodeChildren(e,t);r?n>=r.length&&(n=-1):(r=data.nodeChildren(e,t,[]),n=-1),0<r.length&&0===n?(r[0].isFirstNode=!1,view.setNodeLineIcos(e,r[0])):0<r.length&&n<0&&(r[r.length-1].isLastNode=!1,view.setNodeLineIcos(e,r[r.length-1])),data.nodeIsParent(e,t,!0),n<0?data.nodeChildren(e,t,r.concat(o)):(a=[n,0].concat(o),r.splice.apply(r,a))},addSelectedNode:function(e,t){var n=data.getRoot(e);data.isSelectedNode(e,t)||n.curSelectedList.push(t)},addCreatedNode:function(e,t){(e.callback.onNodeCreated||e.view.addDiyDom)&&data.getRoot(e).createdNodes.push(t)},addZTreeTools:function(e){_init.zTreeTools.push(e)},exSetting:function(e){$.extend(!0,_setting,e)},fixPIdKeyValue:function(e,t){e.data.simpleData.enable&&(t[e.data.simpleData.pIdKey]=t.parentTId?t.getParentNode()[e.data.simpleData.idKey]:e.data.simpleData.rootPId)},getAfterA:function(e,t,n){for(var o=0,a=_init.afterA.length;o<a;o++)_init.afterA[o].apply(this,arguments)},getBeforeA:function(e,t,n){for(var o=0,a=_init.beforeA.length;o<a;o++)_init.beforeA[o].apply(this,arguments)},getInnerAfterA:function(e,t,n){for(var o=0,a=_init.innerAfterA.length;o<a;o++)_init.innerAfterA[o].apply(this,arguments)},getInnerBeforeA:function(e,t,n){for(var o=0,a=_init.innerBeforeA.length;o<a;o++)_init.innerBeforeA[o].apply(this,arguments)},getCache:function(e){return caches[e.treeId]},getNodeIndex:function(e,t){if(!t)return null;for(var n=t.parentTId?t.getParentNode():data.getRoot(e),o=data.nodeChildren(e,n),a=0,r=o.length-1;a<=r;a++)if(o[a]===t)return a;return-1},getNextNode:function(e,t){if(!t)return null;for(var n=t.parentTId?t.getParentNode():data.getRoot(e),o=data.nodeChildren(e,n),a=0,r=o.length-1;a<=r;a++)if(o[a]===t)return a==r?null:o[a+1];return null},getNodeByParam:function(e,t,n,o){if(!t||!n)return null;for(var a=0,r=t.length;a<r;a++){var d=t[a];if(d[n]==o)return t[a];var i=data.nodeChildren(e,d),s=data.getNodeByParam(e,i,n,o);if(s)return s}return null},getNodeCache:function(e,t){if(!t)return null;var n=caches[e.treeId].nodes[data.getNodeCacheId(t)];return n||null},getNodePath:function(e,t){return t?((n=t.parentTId?t.getParentNode().getPath():[])&&n.push(t),n):null;var n},getNodes:function(e){return data.nodeChildren(e,data.getRoot(e))},getNodesByParam:function(e,t,n,o){if(!t||!n)return[];for(var a=[],r=0,d=t.length;r<d;r++){var i=t[r];i[n]==o&&a.push(i);var s=data.nodeChildren(e,i);a=a.concat(data.getNodesByParam(e,s,n,o))}return a},getNodesByParamFuzzy:function(e,t,n,o){if(!t||!n)return[];var a=[];o=o.toLowerCase();for(var r=0,d=t.length;r<d;r++){var i=t[r];"string"==typeof i[n]&&-1<t[r][n].toLowerCase().indexOf(o)&&a.push(i);var s=data.nodeChildren(e,i);a=a.concat(data.getNodesByParamFuzzy(e,s,n,o))}return a},getNodesByFilter:function(e,t,n,o,a){if(!t)return o?null:[];for(var r=o?null:[],d=0,i=t.length;d<i;d++){var s=t[d];if(tools.apply(n,[s,a],!1)){if(o)return s;r.push(s)}var l=data.nodeChildren(e,s),c=data.getNodesByFilter(e,l,n,o,a);if(o&&c)return c;r=o?c:r.concat(c)}return r},getPreNode:function(e,t){if(!t)return null;for(var n=t.parentTId?t.getParentNode():data.getRoot(e),o=data.nodeChildren(e,n),a=0,r=o.length;a<r;a++)if(o[a]===t)return 0==a?null:o[a-1];return null},getRoot:function(e){return e?roots[e.treeId]:null},getRoots:function(){return roots},getSetting:function(e){return settings[e]},getSettings:function(){return settings},getZTreeTools:function(e){var t=this.getRoot(this.getSetting(e));return t?t.treeTools:null},initCache:function(e){for(var t=0,n=_init.caches.length;t<n;t++)_init.caches[t].apply(this,arguments)},initNode:function(e,t,n,o,a,r){for(var d=0,i=_init.nodes.length;d<i;d++)_init.nodes[d].apply(this,arguments)},initRoot:function(e){for(var t=0,n=_init.roots.length;t<n;t++)_init.roots[t].apply(this,arguments)},isSelectedNode:function(e,t){for(var n=data.getRoot(e),o=0,a=n.curSelectedList.length;o<a;o++)if(t===n.curSelectedList[o])return!0;return!1},nodeChildren:function(e,t,n){if(!t)return null;var o=e.data.key.children;return void 0!==n&&(t[o]=n),t[o]},nodeIsParent:function(e,t,n){if(!t)return!1;var o=e.data.key.isParent;return void 0!==n?("string"==typeof n&&(n=tools.eqs(n,"true")),n=!!n,t[o]=n):"string"==typeof t[o]?t[o]=tools.eqs(t[o],"true"):t[o]=!!t[o],t[o]},nodeName:function(e,t,n){var o=e.data.key.name;return void 0!==n&&(t[o]=n),""+t[o]},nodeTitle:function(e,t){return""+t[""===e.data.key.title?e.data.key.name:e.data.key.title]},removeNodeCache:function(e,t){var n=data.nodeChildren(e,t);if(n)for(var o=0,a=n.length;o<a;o++)data.removeNodeCache(e,n[o]);data.getCache(e).nodes[data.getNodeCacheId(t.tId)]=null},removeSelectedNode:function(e,t){for(var n=data.getRoot(e),o=0,a=n.curSelectedList.length;o<a;o++)t!==n.curSelectedList[o]&&data.getNodeCache(e,n.curSelectedList[o].tId)||(n.curSelectedList.splice(o,1),e.treeObj.trigger(consts.event.UNSELECTED,[e.treeId,t]),o--,a--)},setCache:function(e,t){caches[e.treeId]=t},setRoot:function(e,t){roots[e.treeId]=t},setZTreeTools:function(e,t){for(var n=0,o=_init.zTreeTools.length;n<o;n++)_init.zTreeTools[n].apply(this,arguments)},transformToArrayFormat:function(n,e){if(!e)return[];var o=[];if(tools.isArray(e))for(var t=0,a=e.length;t<a;t++){r(e[t])}else r(e);return o;function r(e){o.push(e);var t=data.nodeChildren(n,e);t&&(o=o.concat(data.transformToArrayFormat(n,t)))}},transformTozTreeFormat:function(e,t){var n,o,a=e.data.simpleData.idKey,r=e.data.simpleData.pIdKey;if(!a||""==a||!t)return[];if(tools.isArray(t)){var d=[],i={};for(n=0,o=t.length;n<o;n++)i[t[n][a]]=t[n];for(n=0,o=t.length;n<o;n++){var s=i[t[n][r]];if(s&&t[n][a]!=t[n][r]){var l=data.nodeChildren(e,s);(l=l||data.nodeChildren(e,s,[])).push(t[n])}else d.push(t[n])}return d}return[t]}},event={bindEvent:function(e){for(var t=0,n=_init.bind.length;t<n;t++)_init.bind[t].apply(this,arguments)},unbindEvent:function(e){for(var t=0,n=_init.unbind.length;t<n;t++)_init.unbind[t].apply(this,arguments)},bindTree:function(e){var t={treeId:e.treeId},n=e.treeObj;e.view.txtSelectedEnable||n.bind("selectstart",handler.onSelectStart).css({"-moz-user-select":"-moz-none"}),n.bind("click",t,event.proxy),n.bind("dblclick",t,event.proxy),n.bind("mouseover",t,event.proxy),n.bind("mouseout",t,event.proxy),n.bind("mousedown",t,event.proxy),n.bind("mouseup",t,event.proxy),n.bind("contextmenu",t,event.proxy)},unbindTree:function(e){e.treeObj.unbind("selectstart",handler.onSelectStart).unbind("click",event.proxy).unbind("dblclick",event.proxy).unbind("mouseover",event.proxy).unbind("mouseout",event.proxy).unbind("mousedown",event.proxy).unbind("mouseup",event.proxy).unbind("contextmenu",event.proxy)},doProxy:function(e){for(var t=[],n=0,o=_init.proxys.length;n<o;n++){var a=_init.proxys[n].apply(this,arguments);if(t.push(a),a.stop)break}return t},proxy:function(e){var t=data.getSetting(e.data.treeId);if(!tools.uCanDo(t,e))return!0;for(var n=event.doProxy(e),o=!0,a=0,r=n.length;a<r;a++){var d=n[a];d.nodeEventCallback&&(o=d.nodeEventCallback.apply(d,[e,d.node])&&o),d.treeEventCallback&&(o=d.treeEventCallback.apply(d,[e,d.node])&&o)}return o}},handler={onSwitchNode:function(e,t){var n=data.getSetting(e.data.treeId);if(t.open){if(0==tools.apply(n.callback.beforeCollapse,[n.treeId,t],!0))return!0;data.getRoot(n).expandTriggerFlag=!0,view.switchNode(n,t)}else{if(0==tools.apply(n.callback.beforeExpand,[n.treeId,t],!0))return!0;data.getRoot(n).expandTriggerFlag=!0,view.switchNode(n,t)}return!0},onClickNode:function(e,t){var n=data.getSetting(e.data.treeId),o=n.view.autoCancelSelected&&(e.ctrlKey||e.metaKey)&&data.isSelectedNode(n,t)?0:n.view.autoCancelSelected&&(e.ctrlKey||e.metaKey)&&n.view.selectedMulti?2:1;return 0==tools.apply(n.callback.beforeClick,[n.treeId,t,o],!0)||(0==o?view.cancelPreSelectedNode(n,t):view.selectNode(n,t,2==o),n.treeObj.trigger(consts.event.CLICK,[e,n.treeId,t,o])),!0},onZTreeMousedown:function(e,t){var n=data.getSetting(e.data.treeId);return tools.apply(n.callback.beforeMouseDown,[n.treeId,t],!0)&&tools.apply(n.callback.onMouseDown,[e,n.treeId,t]),!0},onZTreeMouseup:function(e,t){var n=data.getSetting(e.data.treeId);return tools.apply(n.callback.beforeMouseUp,[n.treeId,t],!0)&&tools.apply(n.callback.onMouseUp,[e,n.treeId,t]),!0},onZTreeDblclick:function(e,t){var n=data.getSetting(e.data.treeId);return tools.apply(n.callback.beforeDblClick,[n.treeId,t],!0)&&tools.apply(n.callback.onDblClick,[e,n.treeId,t]),!0},onZTreeContextmenu:function(e,t){var n=data.getSetting(e.data.treeId);return tools.apply(n.callback.beforeRightClick,[n.treeId,t],!0)&&tools.apply(n.callback.onRightClick,[e,n.treeId,t]),"function"!=typeof n.callback.onRightClick},onSelectStart:function(e){var t=e.originalEvent.srcElement.nodeName.toLowerCase();return"input"===t||"textarea"===t}},tools={apply:function(e,t,n){return"function"==typeof e?e.apply(zt,t||[]):n},canAsync:function(e,t){var n=data.nodeChildren(e,t),o=data.nodeIsParent(e,t);return e.async.enable&&t&&o&&!(t.zAsync||n&&0<n.length)},clone:function(e){if(null===e)return null;var t=tools.isArray(e)?[]:{};for(var n in e)t[n]=e[n]instanceof Date?new Date(e[n].getTime()):"object"==typeof e[n]?tools.clone(e[n]):e[n];return t},eqs:function(e,t){return e.toLowerCase()===t.toLowerCase()},isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},isElement:function(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName},$:function(e,t,n){return t&&"string"!=typeof t&&(n=t,t=""),"string"==typeof e?$(e,n?n.treeObj.get(0).ownerDocument:null):$("#"+e.tId+t,n?n.treeObj:null)},getMDom:function(e,t,n){if(!t)return null;for(;t&&t.id!==e.treeId;){for(var o=0,a=n.length;t.tagName&&o<a;o++)if(tools.eqs(t.tagName,n[o].tagName)&&null!==t.getAttribute(n[o].attrName))return t;t=t.parentNode}return null},getNodeMainDom:function(e){return $(e).parent("li").get(0)||$(e).parentsUntil("li").parent().get(0)},isChildOrSelf:function(e,t){return 0<$(e).closest("#"+t).length},uCanDo:function(e,t){return!0}},view={addNodes:function(e,t,n,o,a){var r=data.nodeIsParent(e,t);if(!e.data.keep.leaf||!t||r)if(tools.isArray(o)||(o=[o]),e.data.simpleData.enable&&(o=data.transformTozTreeFormat(e,o)),t){var d=$$(t,consts.id.SWITCH,e),i=$$(t,consts.id.ICON,e),s=$$(t,consts.id.UL,e);t.open||(view.replaceSwitchClass(t,d,consts.folder.CLOSE),view.replaceIcoClass(t,i,consts.folder.CLOSE),t.open=!1,s.css({display:"none"})),data.addNodesData(e,t,n,o),view.createNodes(e,t.level+1,o,t,n),a||view.expandCollapseParentNode(e,t,!0)}else data.addNodesData(e,data.getRoot(e),n,o),view.createNodes(e,0,o,null,n)},appendNodes:function(e,t,n,o,a,r,d){if(!n)return[];var i,s,l=[],c=o||data.getRoot(e),u=data.nodeChildren(e,c);(!u||a>=u.length-n.length)&&(a=-1);for(var p=0,f=n.length;p<f;p++){var g=n[p];r&&(i=(0===a||u.length==n.length)&&0==p,s=a<0&&p==n.length-1,data.initNode(e,t,g,o,i,s,d),data.addNodeCache(e,g));var v=data.nodeIsParent(e,g),N=[],h=data.nodeChildren(e,g);h&&0<h.length&&(N=view.appendNodes(e,t+1,h,g,-1,r,d&&g.open)),d&&(view.makeDOMNodeMainBefore(l,e,g),view.makeDOMNodeLine(l,e,g),data.getBeforeA(e,g,l),view.makeDOMNodeNameBefore(l,e,g),data.getInnerBeforeA(e,g,l),view.makeDOMNodeIcon(l,e,g),data.getInnerAfterA(e,g,l),view.makeDOMNodeNameAfter(l,e,g),data.getAfterA(e,g,l),v&&g.open&&view.makeUlHtml(e,g,l,N.join("")),view.makeDOMNodeMainAfter(l,e,g),data.addCreatedNode(e,g))}return l},appendParentULDom:function(e,t){var n=[],o=$$(t,e);!o.get(0)&&t.parentTId&&(view.appendParentULDom(e,t.getParentNode()),o=$$(t,e));var a=$$(t,consts.id.UL,e);a.get(0)&&a.remove();var r=data.nodeChildren(e,t),d=view.appendNodes(e,t.level+1,r,t,-1,!1,!0);view.makeUlHtml(e,t,n,d.join("")),o.append(n.join(""))},asyncNode:function(setting,node,isSilent,callback){var i,l,isParent=data.nodeIsParent(setting,node);if(node&&!isParent)return tools.apply(callback),!1;if(node&&node.isAjaxing)return!1;if(0==tools.apply(setting.callback.beforeAsync,[setting.treeId,node],!0))return tools.apply(callback),!1;if(node){node.isAjaxing=!0;var icoObj=$$(node,consts.id.ICON,setting);icoObj.attr({style:"",class:consts.className.BUTTON+" "+consts.className.ICO_LOADING})}var tmpParam={},autoParam=tools.apply(setting.async.autoParam,[setting.treeId,node],setting.async.autoParam);for(i=0,l=autoParam.length;node&&i<l;i++){var pKey=autoParam[i].split("="),spKey=pKey;1<pKey.length&&(spKey=pKey[1],pKey=pKey[0]),tmpParam[spKey]=node[pKey]}var otherParam=tools.apply(setting.async.otherParam,[setting.treeId,node],setting.async.otherParam);if(tools.isArray(otherParam))for(i=0,l=otherParam.length;i<l;i+=2)tmpParam[otherParam[i]]=otherParam[i+1];else for(var p in otherParam)tmpParam[p]=otherParam[p];var _tmpV=data.getRoot(setting)._ver;return $.ajax({contentType:setting.async.contentType,cache:!1,type:setting.async.type,url:tools.apply(setting.async.url,[setting.treeId,node],setting.async.url),data:-1<setting.async.contentType.indexOf("application/json")?JSON.stringify(tmpParam):tmpParam,dataType:setting.async.dataType,headers:setting.async.headers,xhrFields:setting.async.xhrFields,success:function(msg){if(_tmpV==data.getRoot(setting)._ver){var newNodes=[];try{newNodes=msg&&0!=msg.length?"string"==typeof msg?eval("("+msg+")"):msg:[]}catch(e){newNodes=msg}node&&(node.isAjaxing=null,node.zAsync=!0),view.setNodeLineIcos(setting,node),newNodes&&""!==newNodes?(newNodes=tools.apply(setting.async.dataFilter,[setting.treeId,node,newNodes],newNodes),view.addNodes(setting,node,-1,newNodes?tools.clone(newNodes):[],!!isSilent)):view.addNodes(setting,node,-1,[],!!isSilent),setting.treeObj.trigger(consts.event.ASYNC_SUCCESS,[setting.treeId,node,msg]),tools.apply(callback)}},error:function(e,t,n){_tmpV==data.getRoot(setting)._ver&&(node&&(node.isAjaxing=null),view.setNodeLineIcos(setting,node),setting.treeObj.trigger(consts.event.ASYNC_ERROR,[setting.treeId,node,e,t,n]))}}),!0},cancelPreSelectedNode:function(e,t,n){var o,a,r=data.getRoot(e).curSelectedList;for(o=r.length-1;0<=o;o--)if(t===(a=r[o])||!t&&(!n||n!==a)){if($$(a,consts.id.A,e).removeClass(consts.node.CURSELECTED),t){data.removeSelectedNode(e,t);break}r.splice(o,1),e.treeObj.trigger(consts.event.UNSELECTED,[e.treeId,a])}},createNodeCallback:function(e){if(e.callback.onNodeCreated||e.view.addDiyDom)for(var t=data.getRoot(e);0<t.createdNodes.length;){var n=t.createdNodes.shift();tools.apply(e.view.addDiyDom,[e.treeId,n]),e.callback.onNodeCreated&&e.treeObj.trigger(consts.event.NODECREATED,[e.treeId,n])}},createNodes:function(e,t,n,o,a){if(n&&0!=n.length){var r=data.getRoot(e),d=!o||o.open||!!$$(data.nodeChildren(e,o)[0],e).get(0);r.createdNodes=[];var i,s,l=view.appendNodes(e,t,n,o,a,!0,d);if(o){var c=$$(o,consts.id.UL,e);c.get(0)&&(i=c)}else i=e.treeObj;i&&(0<=a&&(s=i.children()[a]),0<=a&&s?$(s).before(l.join("")):i.append(l.join(""))),view.createNodeCallback(e)}},destroy:function(e){e&&(data.initCache(e),data.initRoot(e),event.unbindTree(e),event.unbindEvent(e),e.treeObj.empty(),delete settings[e.treeId])},expandCollapseNode:function(e,t,n,o,a){var r,d=data.getRoot(e);if(t){var i=data.nodeChildren(e,t),s=data.nodeIsParent(e,t);if(d.expandTriggerFlag&&(r=a,a=function(){r&&r(),t.open?e.treeObj.trigger(consts.event.EXPAND,[e.treeId,t]):e.treeObj.trigger(consts.event.COLLAPSE,[e.treeId,t])},d.expandTriggerFlag=!1),!t.open&&s&&(!$$(t,consts.id.UL,e).get(0)||i&&0<i.length&&!$$(i[0],e).get(0))&&(view.appendParentULDom(e,t),view.createNodeCallback(e)),t.open!=n){var l=$$(t,consts.id.UL,e),c=$$(t,consts.id.SWITCH,e),u=$$(t,consts.id.ICON,e);s?(t.open=!t.open,t.iconOpen&&t.iconClose&&u.attr("style",view.makeNodeIcoStyle(e,t)),t.open?(view.replaceSwitchClass(t,c,consts.folder.OPEN),view.replaceIcoClass(t,u,consts.folder.OPEN),0==o||""==e.view.expandSpeed?(l.show(),tools.apply(a,[])):i&&0<i.length?l.slideDown(e.view.expandSpeed,a):(l.show(),tools.apply(a,[]))):(view.replaceSwitchClass(t,c,consts.folder.CLOSE),view.replaceIcoClass(t,u,consts.folder.CLOSE),0!=o&&""!=e.view.expandSpeed&&i&&0<i.length?l.slideUp(e.view.expandSpeed,a):(l.hide(),tools.apply(a,[])))):tools.apply(a,[])}else tools.apply(a,[])}else tools.apply(a,[])},expandCollapseParentNode:function(e,t,n,o,a){t&&(t.parentTId?(view.expandCollapseNode(e,t,n,o),t.parentTId&&view.expandCollapseParentNode(e,t.getParentNode(),n,o,a)):view.expandCollapseNode(e,t,n,o,a))},expandCollapseSonNode:function(e,t,n,o,a){var r=data.getRoot(e),d=t?data.nodeChildren(e,t):data.nodeChildren(e,r),i=!t&&o,s=data.getRoot(e).expandTriggerFlag;if(data.getRoot(e).expandTriggerFlag=!1,d)for(var l=0,c=d.length;l<c;l++)d[l]&&view.expandCollapseSonNode(e,d[l],n,i);data.getRoot(e).expandTriggerFlag=s,view.expandCollapseNode(e,t,n,o,a)},isSelectedNode:function(e,t){if(!t)return!1;var n,o=data.getRoot(e).curSelectedList;for(n=o.length-1;0<=n;n--)if(t===o[n])return!0;return!1},makeDOMNodeIcon:function(e,t,n){var o=data.nodeName(t,n),a=t.view.nameIsHTML?o:o.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");e.push("<span id='",n.tId,consts.id.ICON,"' title='' treeNode",consts.id.ICON," class='",view.makeNodeIcoClass(t,n),"' style='",view.makeNodeIcoStyle(t,n),"'></span><span id='",n.tId,consts.id.SPAN,"' class='",consts.className.NAME,"'>",a,"</span>")},makeDOMNodeLine:function(e,t,n){e.push("<span id='",n.tId,consts.id.SWITCH,"' title='' class='",view.makeNodeLineClass(t,n),"' treeNode",consts.id.SWITCH,"></span>")},makeDOMNodeMainAfter:function(e,t,n){e.push("</li>")},makeDOMNodeMainBefore:function(e,t,n){e.push("<li id='",n.tId,"' class='",consts.className.LEVEL,n.level,"' tabindex='0' hidefocus='true' treenode>")},makeDOMNodeNameAfter:function(e,t,n){e.push("</a>")},makeDOMNodeNameBefore:function(e,t,n){var o=data.nodeTitle(t,n),a=view.makeNodeUrl(t,n),r=view.makeNodeFontCss(t,n),d=view.makeNodeClasses(t,n),i=[];for(var s in r)i.push(s,":",r[s],";");e.push("<a id='",n.tId,consts.id.A,"' class='",consts.className.LEVEL,n.level,d.add?" "+d.add.join(" "):"","' treeNode",consts.id.A,' onclick="',n.click||"",'" ',null!=a&&0<a.length?"href='"+a+"'":""," target='",view.makeNodeTarget(n),"' style='",i.join(""),"'"),tools.apply(t.view.showTitle,[t.treeId,n],t.view.showTitle)&&o&&e.push("title='",o.replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">"),"'"),e.push(">")},makeNodeFontCss:function(e,t){var n=tools.apply(e.view.fontCss,[e.treeId,t],e.view.fontCss);return n&&"function"!=typeof n?n:{}},makeNodeClasses:function(e,t){var n=tools.apply(e.view.nodeClasses,[e.treeId,t],e.view.nodeClasses);return n&&"function"!=typeof n?n:{add:[],remove:[]}},makeNodeIcoClass:function(e,t){var n=["ico"];if(!t.isAjaxing){var o=data.nodeIsParent(e,t);n[0]=(t.iconSkin?t.iconSkin+"_":"")+n[0],o?n.push(t.open?consts.folder.OPEN:consts.folder.CLOSE):n.push(consts.folder.DOCU)}return consts.className.BUTTON+" "+n.join("_")},makeNodeIcoStyle:function(e,t){var n=[];if(!t.isAjaxing){var o=data.nodeIsParent(e,t)&&t.iconOpen&&t.iconClose?t.open?t.iconOpen:t.iconClose:t[e.data.key.icon];o&&n.push("background:url(",o,") 0 0 no-repeat;"),0!=e.view.showIcon&&tools.apply(e.view.showIcon,[e.treeId,t],!0)||n.push("display:none;")}return n.join("")},makeNodeLineClass:function(e,t){var n=[];return e.view.showLine?0==t.level&&t.isFirstNode&&t.isLastNode?n.push(consts.line.ROOT):0==t.level&&t.isFirstNode?n.push(consts.line.ROOTS):t.isLastNode?n.push(consts.line.BOTTOM):n.push(consts.line.CENTER):n.push(consts.line.NOLINE),data.nodeIsParent(e,t)?n.push(t.open?consts.folder.OPEN:consts.folder.CLOSE):n.push(consts.folder.DOCU),view.makeNodeLineClassEx(t)+n.join("_")},makeNodeLineClassEx:function(e){return consts.className.BUTTON+" "+consts.className.LEVEL+e.level+" "+consts.className.SWITCH+" "},makeNodeTarget:function(e){return e.target||"_blank"},makeNodeUrl:function(e,t){var n=e.data.key.url;return t[n]?t[n]:null},makeUlHtml:function(e,t,n,o){n.push("<ul id='",t.tId,consts.id.UL,"' class='",consts.className.LEVEL,t.level," ",view.makeUlLineClass(e,t),"' style='display:",t.open?"block":"none","'>"),n.push(o),n.push("</ul>")},makeUlLineClass:function(e,t){return e.view.showLine&&!t.isLastNode?consts.line.LINE:""},removeChildNodes:function(e,t){if(t){var n=data.nodeChildren(e,t);if(n){for(var o=0,a=n.length;o<a;o++)data.removeNodeCache(e,n[o]);if(data.removeSelectedNode(e),delete t[e.data.key.children],e.data.keep.parent)$$(t,consts.id.UL,e).empty();else{data.nodeIsParent(e,t,!1),t.open=!1;var r=$$(t,consts.id.SWITCH,e),d=$$(t,consts.id.ICON,e);view.replaceSwitchClass(t,r,consts.folder.DOCU),view.replaceIcoClass(t,d,consts.folder.DOCU),$$(t,consts.id.UL,e).remove()}}}},scrollIntoView:function(e,t){if(t)if("undefined"!=typeof Element&&"undefined"!=typeof HTMLElement)Element.prototype.scrollIntoViewIfNeeded||(Element.prototype.scrollIntoViewIfNeeded=function(n){"use strict";function e(e,t){return{start:e,length:t,end:e+t}}function t(e,t){return!1===n||t.start<e.end&&e.start<t.end?Math.max(e.end-t.length,Math.min(t.start,e.start)):(e.start+e.end-t.length)/2}function a(n,o){return{x:n,y:o,translate:function(e,t){return a(n+e,o+t)}}}function o(e,t){for(;e;)t=t.translate(e.offsetLeft,e.offsetTop),e=e.offsetParent;return t}for(var r,d=o(this,a(0,0)),i=a(this.offsetWidth,this.offsetHeight),s=this.parentNode;s instanceof HTMLElement;)r=o(s,a(s.clientLeft,s.clientTop)),s.scrollLeft=t(e(d.x-r.x,i.x),e(s.scrollLeft,s.clientWidth)),s.scrollTop=t(e(d.y-r.y,i.y),e(s.scrollTop,s.clientHeight)),d=d.translate(-s.scrollLeft,-s.scrollTop),s=s.parentNode}),t.scrollIntoViewIfNeeded();else{var n=e.treeObj.get(0).getBoundingClientRect(),o=t.getBoundingClientRect();(o.top<n.top||o.bottom>n.bottom||o.right>n.right||o.left<n.left)&&t.scrollIntoView()}},setFirstNode:function(e,t){var n=data.nodeChildren(e,t);0<n.length&&(n[0].isFirstNode=!0)},setLastNode:function(e,t){var n=data.nodeChildren(e,t);0<n.length&&(n[n.length-1].isLastNode=!0)},removeNode:function(e,t){var n=data.getRoot(e),o=t.parentTId?t.getParentNode():n;if(t.isFirstNode=!1,t.isLastNode=!1,t.getPreNode=function(){return null},t.getNextNode=function(){return null},data.getNodeCache(e,t.tId)){$$(t,e).remove(),data.removeNodeCache(e,t),data.removeSelectedNode(e,t);for(var a=data.nodeChildren(e,o),r=0,d=a.length;r<d;r++)if(a[r].tId==t.tId){a.splice(r,1);break}view.setFirstNode(e,o),view.setLastNode(e,o);var i,s,l,c=a.length;if(e.data.keep.parent||0!=c){if(e.view.showLine&&0<c){var u=a[c-1];if(i=$$(u,consts.id.UL,e),s=$$(u,consts.id.SWITCH,e),l=$$(u,consts.id.ICON,e),o==n)if(1==a.length)view.replaceSwitchClass(u,s,consts.line.ROOT);else{var p=$$(a[0],consts.id.SWITCH,e);view.replaceSwitchClass(a[0],p,consts.line.ROOTS),view.replaceSwitchClass(u,s,consts.line.BOTTOM)}else view.replaceSwitchClass(u,s,consts.line.BOTTOM);i.removeClass(consts.line.LINE)}}else data.nodeIsParent(e,o,!1),o.open=!1,delete o[e.data.key.children],i=$$(o,consts.id.UL,e),s=$$(o,consts.id.SWITCH,e),l=$$(o,consts.id.ICON,e),view.replaceSwitchClass(o,s,consts.folder.DOCU),view.replaceIcoClass(o,l,consts.folder.DOCU),i.css("display","none")}},replaceIcoClass:function(e,t,n){if(t&&!e.isAjaxing){var o=t.attr("class");if(null!=o){var a=o.split("_");switch(n){case consts.folder.OPEN:case consts.folder.CLOSE:case consts.folder.DOCU:a[a.length-1]=n}t.attr("class",a.join("_"))}}},replaceSwitchClass:function(e,t,n){if(t){var o=t.attr("class");if(null!=o){var a=o.split("_");switch(n){case consts.line.ROOT:case consts.line.ROOTS:case consts.line.CENTER:case consts.line.BOTTOM:case consts.line.NOLINE:a[0]=view.makeNodeLineClassEx(e)+n;break;case consts.folder.OPEN:case consts.folder.CLOSE:case consts.folder.DOCU:a[1]=n}t.attr("class",a.join("_")),n!==consts.folder.DOCU?t.removeAttr("disabled"):t.attr("disabled","disabled")}}},selectNode:function(e,t,n){n||view.cancelPreSelectedNode(e,null,t),$$(t,consts.id.A,e).addClass(consts.node.CURSELECTED),data.addSelectedNode(e,t),e.treeObj.trigger(consts.event.SELECTED,[e.treeId,t])},setNodeFontCss:function(e,t){var n=$$(t,consts.id.A,e),o=view.makeNodeFontCss(e,t);o&&n.css(o)},setNodeClasses:function(e,t){var n=$$(t,consts.id.A,e),o=view.makeNodeClasses(e,t);"add"in o&&o.add.length&&n.addClass(o.add.join(" ")),"remove"in o&&o.remove.length&&n.removeClass(o.remove.join(" "))},setNodeLineIcos:function(e,t){if(t){var n=$$(t,consts.id.SWITCH,e),o=$$(t,consts.id.UL,e),a=$$(t,consts.id.ICON,e),r=view.makeUlLineClass(e,t);0==r.length?o.removeClass(consts.line.LINE):o.addClass(r),n.attr("class",view.makeNodeLineClass(e,t)),data.nodeIsParent(e,t)?n.removeAttr("disabled"):n.attr("disabled","disabled"),a.removeAttr("style"),a.attr("style",view.makeNodeIcoStyle(e,t)),a.attr("class",view.makeNodeIcoClass(e,t))}},setNodeName:function(e,t){var n=data.nodeTitle(e,t),o=$$(t,consts.id.SPAN,e);o.empty(),e.view.nameIsHTML?o.html(data.nodeName(e,t)):o.text(data.nodeName(e,t)),tools.apply(e.view.showTitle,[e.treeId,t],e.view.showTitle)&&$$(t,consts.id.A,e).attr("title",n||"")},setNodeTarget:function(e,t){$$(t,consts.id.A,e).attr("target",view.makeNodeTarget(t))},setNodeUrl:function(e,t){var n=$$(t,consts.id.A,e),o=view.makeNodeUrl(e,t);null==o||0==o.length?n.removeAttr("href"):n.attr("href",o)},switchNode:function(e,t){if(t.open||!tools.canAsync(e,t))view.expandCollapseNode(e,t,!t.open);else if(e.async.enable){if(!view.asyncNode(e,t))return void view.expandCollapseNode(e,t,!t.open)}else t&&view.expandCollapseNode(e,t,!t.open)}};$.fn.zTree={consts:_consts,_z:{tools:tools,view:view,event:event,data:data},getZTreeObj:function(e){var t=data.getZTreeTools(e);return t||null},destroy:function(e){if(e&&0<e.length)view.destroy(data.getSetting(e));else for(var t in settings)view.destroy(settings[t])},init:function(e,t,n){var s=tools.clone(_setting);$.extend(!0,s,t),s.treeId=e.attr("id"),s.treeObj=e,s.treeObj.empty(),settings[s.treeId]=s,void 0===document.body.style.maxHeight&&(s.view.expandSpeed=""),data.initRoot(s);var o=data.getRoot(s);n=n?tools.clone(tools.isArray(n)?n:[n]):[],s.data.simpleData.enable?data.nodeChildren(s,o,data.transformTozTreeFormat(s,n)):data.nodeChildren(s,o,n),data.initCache(s),event.unbindTree(s),event.bindTree(s),event.unbindEvent(s),event.bindEvent(s);var r={setting:s,addNodes:function(e,t,n,o){e=e||null;var a=data.nodeIsParent(s,e);if(e&&!a&&s.data.keep.leaf)return null;var r=parseInt(t,10);if(t=isNaN(r)?(o=!!n,n=t,-1):r,!n)return null;var d=tools.clone(tools.isArray(n)?n:[n]);function i(){view.addNodes(s,e,t,d,1==o)}return tools.canAsync(s,e)?view.asyncNode(s,e,o,i):i(),d},cancelSelectedNode:function(e){view.cancelPreSelectedNode(s,e)},destroy:function(){view.destroy(s)},expandAll:function(e){return e=!!e,view.expandCollapseSonNode(s,null,e,!0),e},expandNode:function(t,e,n,o,a){return t&&data.nodeIsParent(s,t)?(!0!==e&&!1!==e&&(e=!t.open),(a=!!a)&&e&&0==tools.apply(s.callback.beforeExpand,[s.treeId,t],!0)||a&&!e&&0==tools.apply(s.callback.beforeCollapse,[s.treeId,t],!0)?null:(e&&t.parentTId&&view.expandCollapseParentNode(s,t.getParentNode(),e,!1),e!==t.open||n?(data.getRoot(s).expandTriggerFlag=a,!tools.canAsync(s,t)&&n?view.expandCollapseSonNode(s,t,e,!0,r):(t.open=!e,view.switchNode(this.setting,t),r()),e):null)):null;function r(){var e=$$(t,s).get(0);e&&!1!==o&&view.scrollIntoView(s,e)}},getNodes:function(){return data.getNodes(s)},getNodeByParam:function(e,t,n){return e?data.getNodeByParam(s,n?data.nodeChildren(s,n):data.getNodes(s),e,t):null},getNodeByTId:function(e){return data.getNodeCache(s,e)},getNodesByParam:function(e,t,n){return e?data.getNodesByParam(s,n?data.nodeChildren(s,n):data.getNodes(s),e,t):null},getNodesByParamFuzzy:function(e,t,n){return e?data.getNodesByParamFuzzy(s,n?data.nodeChildren(s,n):data.getNodes(s),e,t):null},getNodesByFilter:function(e,t,n,o){return t=!!t,e&&"function"==typeof e?data.getNodesByFilter(s,n?data.nodeChildren(s,n):data.getNodes(s),e,t,o):t?null:[]},getNodeIndex:function(e){if(!e)return null;for(var t=e.parentTId?e.getParentNode():data.getRoot(s),n=data.nodeChildren(s,t),o=0,a=n.length;o<a;o++)if(n[o]==e)return o;return-1},getSelectedNodes:function(){for(var e=[],t=data.getRoot(s).curSelectedList,n=0,o=t.length;n<o;n++)e.push(t[n]);return e},isSelectedNode:function(e){return data.isSelectedNode(s,e)},reAsyncChildNodesPromise:function(n,o,a){return new Promise(function(e,t){try{r.reAsyncChildNodes(n,o,a,function(){e(n)})}catch(e){t(e)}})},reAsyncChildNodes:function(e,t,n,o){if(this.setting.async.enable){var a=!e;if(a&&(e=data.getRoot(s)),"refresh"==t){for(var r=data.nodeChildren(s,e),d=0,i=r?r.length:0;d<i;d++)data.removeNodeCache(s,r[d]);if(data.removeSelectedNode(s),data.nodeChildren(s,e,[]),a)this.setting.treeObj.empty();else $$(e,consts.id.UL,s).empty()}view.asyncNode(this.setting,a?null:e,!!n,o)}},refresh:function(){this.setting.treeObj.empty();var e=data.getRoot(s),t=data.nodeChildren(s,e);data.initRoot(s),data.nodeChildren(s,e,t),data.initCache(s),view.createNodes(s,0,data.nodeChildren(s,e),null,-1)},removeChildNodes:function(e){if(!e)return null;var t=data.nodeChildren(s,e);return view.removeChildNodes(s,e),t||null},removeNode:function(e,t){e&&((t=!!t)&&0==tools.apply(s.callback.beforeRemove,[s.treeId,e],!0)||(view.removeNode(s,e),t&&this.setting.treeObj.trigger(consts.event.REMOVE,[s.treeId,e])))},selectNode:function(t,e,n){if(t&&tools.uCanDo(s)){if(e=s.view.selectedMulti&&e,t.parentTId)view.expandCollapseParentNode(s,t.getParentNode(),!0,!1,function(){if(n)return;var e=$$(t,s).get(0);view.scrollIntoView(s,e)});else if(!n)try{$$(t,s).focus().blur()}catch(e){}view.selectNode(s,t,e)}},transformTozTreeNodes:function(e){return data.transformTozTreeFormat(s,e)},transformToArray:function(e){return data.transformToArrayFormat(s,e)},updateNode:function(e,t){e&&$$(e,s).get(0)&&tools.uCanDo(s)&&(view.setNodeName(s,e),view.setNodeTarget(s,e),view.setNodeUrl(s,e),view.setNodeLineIcos(s,e),view.setNodeFontCss(s,e),view.setNodeClasses(s,e))}};o.treeTools=r,data.setZTreeTools(s,r);var a=data.nodeChildren(s,o);return a&&0<a.length?view.createNodes(s,0,a,null,-1):s.async.enable&&s.async.url&&""!==s.async.url&&view.asyncNode(s),r}};var zt=$.fn.zTree,$$=tools.$,consts=zt.consts}(jQuery);
\ No newline at end of file
Property changes on: base3.10/src/main/webapp/resource/zTree/js/jquery.ztree.core.min.js
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Index: base3.10/script/postgres2.sql
===================================================================
--- base3.10/script/postgres2.sql (revision 9)
+++ base3.10/script/postgres2.sql (revision 10)
@@ -138,4 +138,74 @@
COMMENT ON COLUMN public.tnmenuprograminfo.last_updusr_id IS '최종수정자ID';
+CREATE OR REPLACE FUNCTION fnconvertfileid(param character varying)
+ RETURNS character varying
+ LANGUAGE plpgsql
+AS $function$BEGIN
+RETURN (
+select array_to_string(array_agg(xx.link), ',')
+from tnfile xx, (
+select unnest(string_to_array(param, ',')) as fileid
+) yy
+where xx.file_id = yy.fileid
+);
+end; $function$
+;
+
+
+CREATE OR REPLACE FUNCTION fncmenudownurl(param1 character varying, param2 character varying)
+ RETURNS character varying
+ LANGUAGE plpgsql
+AS $function$BEGIN
+RETURN (
+ with recursive menuView as (
+ select a.menu_no
+ , upper_menu_no
+ , b.progr_url
+ , 1 as depth
+ , array[b.progr_url::text] as path
+ , array[a.menu_ordr] as ordr
+ , false as cycle
+ from TNMENUINFO a
+ inner join TNMENUPROGRAMINFO b on a.menu_no = b.menu_no
+ where a.menu_no = param1
+ and a.use_yn = 'Y'
+ and b.default_yn = 'Y'
+ union all
+ select b.menu_no
+ , b.upper_menu_no
+ , c.progr_url
+ , depth + 1
+ , array_append(path, c.progr_url::text)
+ , array_append(ordr, b.menu_ordr)
+ , c.progr_url::text <> any(a.path)
+ from menuView a
+ inner join TNMENUINFO b on a.menu_no = b.upper_menu_no
+ inner join TNMENUPROGRAMINFO c on b.menu_no = c.menu_no
+ inner join TNMENUAUTHOINFO d on c.progr_url = d.progr_url
+ where b.use_yn = 'Y'
+ and c.default_yn = 'Y'
+ and a.upper_menu_no <> 'ROOT'
+ and not a.cycle
+ and (
+ d.author_code IN
+ (
+ select unnest(string_to_array(coalesce(
+ (
+ select author_code
+ from comtnemplyrscrtyestbs c
+ where scrty_dtrmn_trget_id = param2
+ )
+ , 'ROLE_ANONYMOUS'), ','))
+ )
+ or d.USER_ID = param2
+ )
+ )
+ select a.progr_url
+ from menuView a
+ order by a.cycle desc, a.ordr
+ limit 1
+);
+ end; $function$
+;
Index: base3.10/script/postgres.erm
===================================================================
--- base3.10/script/postgres.erm (revision 9)
+++ base3.10/script/postgres.erm (revision 10)
@@ -11,8 +11,8 @@
</page_setting>
<category_index>0</category_index>
<zoom>1.0</zoom>
- <x>1443</x>
- <y>1039</y>
+ <x>1826</x>
+ <y>902</y>
<default_color>
<r>255</r>
<g>128</g>
@@ -112,7 +112,7 @@
<show_referred_tables>false</show_referred_tables>
<categories>
<category>
- <id>42</id>
+ <id>43</id>
<height>167</height>
<width>601</width>
<font_name>맑은 고딕</font_name>
@@ -132,7 +132,7 @@
<node_element>21</node_element>
</category>
<category>
- <id>43</id>
+ <id>44</id>
<height>400</height>
<width>941</width>
<font_name>맑은 고딕</font_name>
@@ -153,7 +153,7 @@
<node_element>19</node_element>
</category>
<category>
- <id>44</id>
+ <id>45</id>
<height>864</height>
<width>1568</width>
<font_name>맑은 고딕</font_name>
@@ -182,7 +182,7 @@
<node_element>39</node_element>
</category>
<category>
- <id>45</id>
+ <id>46</id>
<height>1185</height>
<width>1592</width>
<font_name>맑은 고딕</font_name>
@@ -208,7 +208,7 @@
<node_element>25</node_element>
</category>
<category>
- <id>46</id>
+ <id>47</id>
<height>440</height>
<width>1404</width>
<font_name>맑은 고딕</font_name>
@@ -232,13 +232,13 @@
<node_element>33</node_element>
</category>
<category>
- <id>47</id>
+ <id>48</id>
<height>1041</height>
<width>1020</width>
<font_name>맑은 고딕</font_name>
<font_size>9</font_size>
- <x>1681</x>
- <y>785</y>
+ <x>1857</x>
+ <y>755</y>
<color>
<r>255</r>
<g>128</g>
@@ -248,7 +248,7 @@
</connections>
<name>게시판</name>
<selected>true</selected>
- <node_element>41</node_element>
+ <node_element>42</node_element>
<node_element>11</node_element>
<node_element>31</node_element>
<node_element>36</node_element>
@@ -281,7 +281,7 @@
</connections>
<display>false</display>
<creation_date>2022-01-26 16:20:32</creation_date>
- <updated_date>2022-02-07 15:58:07</updated_date>
+ <updated_date>2022-02-08 15:47:10</updated_date>
<model_property>
<name>프로젝트명</name>
<value></value>
@@ -1133,6 +1133,22 @@
</word>
<word>
<id>51</id>
+ <length>1</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>false</char_semantics>
+ <description>삭제여부</description>
+ <logical_name>삭제여부</logical_name>
+ <physical_name>delete_at</physical_name>
+ <type>character(n)</type>
+ </word>
+ <word>
+ <id>52</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -1148,7 +1164,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>52</id>
+ <id>53</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -1164,7 +1180,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>53</id>
+ <id>54</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -1180,7 +1196,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>54</id>
+ <id>55</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1196,7 +1212,7 @@
<type>char</type>
</word>
<word>
- <id>55</id>
+ <id>56</id>
<length>50</length>
<decimal>null</decimal>
<array>false</array>
@@ -1212,7 +1228,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>56</id>
+ <id>57</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1228,7 +1244,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>57</id>
+ <id>58</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1244,7 +1260,7 @@
<type>char</type>
</word>
<word>
- <id>58</id>
+ <id>59</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1260,7 +1276,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>59</id>
+ <id>60</id>
<length>4</length>
<decimal>null</decimal>
<array>false</array>
@@ -1276,7 +1292,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>60</id>
+ <id>61</id>
<length>4</length>
<decimal>null</decimal>
<array>false</array>
@@ -1292,7 +1308,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>61</id>
+ <id>62</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1308,7 +1324,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>62</id>
+ <id>63</id>
<length>200</length>
<decimal>null</decimal>
<array>false</array>
@@ -1324,7 +1340,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>63</id>
+ <id>64</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -1340,7 +1356,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>64</id>
+ <id>65</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -1356,7 +1372,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>65</id>
+ <id>66</id>
<length>15</length>
<decimal>null</decimal>
<array>false</array>
@@ -1372,7 +1388,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>66</id>
+ <id>67</id>
<length>4</length>
<decimal>null</decimal>
<array>false</array>
@@ -1388,7 +1404,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>67</id>
+ <id>68</id>
<length>8</length>
<decimal>null</decimal>
<array>false</array>
@@ -1404,7 +1420,7 @@
<type>character(n)</type>
</word>
<word>
- <id>68</id>
+ <id>69</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -1420,7 +1436,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>69</id>
+ <id>70</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -1436,7 +1452,23 @@
<type>numeric(p)</type>
</word>
<word>
- <id>70</id>
+ <id>71</id>
+ <length>10</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>오류수</description>
+ <logical_name>오류수</logical_name>
+ <physical_name>error_co</physical_name>
+ <type>numeric(p)</type>
+ </word>
+ <word>
+ <id>72</id>
<length>3</length>
<decimal>null</decimal>
<array>false</array>
@@ -1452,7 +1484,23 @@
<type>character(n)</type>
</word>
<word>
- <id>71</id>
+ <id>73</id>
+ <length>3</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>오류코드</description>
+ <logical_name>오류코드</logical_name>
+ <physical_name>error_code</physical_name>
+ <type>character(n)</type>
+ </word>
+ <word>
+ <id>74</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1468,7 +1516,7 @@
<type>char</type>
</word>
<word>
- <id>72</id>
+ <id>75</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1484,7 +1532,23 @@
<type>char</type>
</word>
<word>
- <id>73</id>
+ <id>76</id>
+ <length>null</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>오류구분</description>
+ <logical_name>오류구분</logical_name>
+ <physical_name>error_se</physical_name>
+ <type>char</type>
+ </word>
+ <word>
+ <id>77</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1500,7 +1564,7 @@
<type>character(n)</type>
</word>
<word>
- <id>74</id>
+ <id>78</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1516,7 +1580,7 @@
<type>character(n)</type>
</word>
<word>
- <id>75</id>
+ <id>79</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1532,7 +1596,7 @@
<type>char</type>
</word>
<word>
- <id>76</id>
+ <id>80</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1548,7 +1612,7 @@
<type>text</type>
</word>
<word>
- <id>77</id>
+ <id>81</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1564,7 +1628,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>78</id>
+ <id>82</id>
<length>32</length>
<decimal>null</decimal>
<array>false</array>
@@ -1580,7 +1644,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>79</id>
+ <id>83</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1596,7 +1660,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>80</id>
+ <id>84</id>
<length>8</length>
<decimal>null</decimal>
<array>false</array>
@@ -1612,7 +1676,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>81</id>
+ <id>85</id>
<length>15</length>
<decimal>null</decimal>
<array>false</array>
@@ -1628,7 +1692,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>82</id>
+ <id>86</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -1644,7 +1708,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>83</id>
+ <id>87</id>
<length>2000</length>
<decimal>null</decimal>
<array>false</array>
@@ -1660,7 +1724,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>84</id>
+ <id>88</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1676,7 +1740,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>85</id>
+ <id>89</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1692,7 +1756,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>86</id>
+ <id>90</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1708,7 +1772,7 @@
<type>timestamp</type>
</word>
<word>
- <id>87</id>
+ <id>91</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1724,7 +1788,7 @@
<type>timestamp</type>
</word>
<word>
- <id>88</id>
+ <id>92</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1740,7 +1804,7 @@
<type>text</type>
</word>
<word>
- <id>89</id>
+ <id>93</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1756,7 +1820,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>90</id>
+ <id>94</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1772,7 +1836,7 @@
<type>timestamp</type>
</word>
<word>
- <id>91</id>
+ <id>95</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -1788,7 +1852,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>92</id>
+ <id>96</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1804,7 +1868,7 @@
<type></type>
</word>
<word>
- <id>93</id>
+ <id>97</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1820,7 +1884,7 @@
<type>character(n)</type>
</word>
<word>
- <id>94</id>
+ <id>98</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -1836,7 +1900,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>95</id>
+ <id>99</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -1852,7 +1916,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>96</id>
+ <id>100</id>
<length>4</length>
<decimal>null</decimal>
<array>false</array>
@@ -1868,7 +1932,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>97</id>
+ <id>101</id>
<length>4</length>
<decimal>null</decimal>
<array>false</array>
@@ -1884,7 +1948,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>98</id>
+ <id>102</id>
<length>30</length>
<decimal>null</decimal>
<array>false</array>
@@ -1900,7 +1964,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>99</id>
+ <id>103</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -1916,7 +1980,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>100</id>
+ <id>104</id>
<length>200</length>
<decimal>null</decimal>
<array>false</array>
@@ -1932,7 +1996,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>101</id>
+ <id>105</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -1948,7 +2012,7 @@
<type>char</type>
</word>
<word>
- <id>102</id>
+ <id>106</id>
<length>7</length>
<decimal>null</decimal>
<array>false</array>
@@ -1964,7 +2028,23 @@
<type>character(n)</type>
</word>
<word>
- <id>103</id>
+ <id>107</id>
+ <length>7</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>기관코드</description>
+ <logical_name>기관코드</logical_name>
+ <physical_name>instt_code</physical_name>
+ <type>character(n)</type>
+ </word>
+ <word>
+ <id>108</id>
<length>23</length>
<decimal>null</decimal>
<array>false</array>
@@ -1980,7 +2060,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>104</id>
+ <id>109</id>
<length>3</length>
<decimal>null</decimal>
<array>false</array>
@@ -1996,7 +2076,23 @@
<type>character(n)</type>
</word>
<word>
- <id>105</id>
+ <id>110</id>
+ <length>3</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>업무구분코드</description>
+ <logical_name>업무구분코드</logical_name>
+ <physical_name>job_se_code</physical_name>
+ <type>character(n)</type>
+ </word>
+ <word>
+ <id>111</id>
<length>13</length>
<decimal>null</decimal>
<array>false</array>
@@ -2012,7 +2108,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>106</id>
+ <id>112</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2028,7 +2124,7 @@
<type>timestamp</type>
</word>
<word>
- <id>107</id>
+ <id>113</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2044,7 +2140,7 @@
<type>timestamp</type>
</word>
<word>
- <id>108</id>
+ <id>114</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2060,7 +2156,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>109</id>
+ <id>115</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2076,7 +2172,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>110</id>
+ <id>116</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2092,7 +2188,7 @@
<type>text</type>
</word>
<word>
- <id>111</id>
+ <id>117</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2108,7 +2204,7 @@
<type>char</type>
</word>
<word>
- <id>112</id>
+ <id>118</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2124,7 +2220,7 @@
<type>char</type>
</word>
<word>
- <id>113</id>
+ <id>119</id>
<length>3</length>
<decimal>null</decimal>
<array>false</array>
@@ -2140,7 +2236,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>114</id>
+ <id>120</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2156,7 +2252,7 @@
<type>timestamp</type>
</word>
<word>
- <id>115</id>
+ <id>121</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2172,7 +2268,7 @@
<type>character(n)</type>
</word>
<word>
- <id>116</id>
+ <id>122</id>
<length>30</length>
<decimal>null</decimal>
<array>false</array>
@@ -2188,7 +2284,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>117</id>
+ <id>123</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -2204,7 +2300,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>118</id>
+ <id>124</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -2220,7 +2316,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>119</id>
+ <id>125</id>
<length>50</length>
<decimal>null</decimal>
<array>false</array>
@@ -2236,7 +2332,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>120</id>
+ <id>126</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2252,7 +2348,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>121</id>
+ <id>127</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2268,7 +2364,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>122</id>
+ <id>128</id>
<length>50</length>
<decimal>null</decimal>
<array>false</array>
@@ -2284,7 +2380,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>123</id>
+ <id>129</id>
<length>15</length>
<decimal>null</decimal>
<array>false</array>
@@ -2300,7 +2396,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>124</id>
+ <id>130</id>
<length>5</length>
<decimal>null</decimal>
<array>false</array>
@@ -2316,7 +2412,7 @@
<type>character(n)</type>
</word>
<word>
- <id>125</id>
+ <id>131</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2332,7 +2428,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>126</id>
+ <id>132</id>
<length>250</length>
<decimal>null</decimal>
<array>false</array>
@@ -2348,7 +2444,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>127</id>
+ <id>133</id>
<length>250</length>
<decimal>null</decimal>
<array>false</array>
@@ -2364,7 +2460,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>128</id>
+ <id>134</id>
<length>1</length>
<decimal>null</decimal>
<array>false</array>
@@ -2380,7 +2476,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>129</id>
+ <id>135</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2396,7 +2492,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>130</id>
+ <id>136</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -2412,7 +2508,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>131</id>
+ <id>137</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -2428,7 +2524,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>132</id>
+ <id>138</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2444,7 +2540,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>133</id>
+ <id>139</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2460,7 +2556,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>134</id>
+ <id>140</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2476,7 +2572,7 @@
<type>integer</type>
</word>
<word>
- <id>135</id>
+ <id>141</id>
<length>5</length>
<decimal>null</decimal>
<array>false</array>
@@ -2492,7 +2588,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>136</id>
+ <id>142</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -2508,7 +2604,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>137</id>
+ <id>143</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -2524,7 +2620,23 @@
<type>varchar(n)</type>
</word>
<word>
- <id>138</id>
+ <id>144</id>
+ <length>60</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>메서드명</description>
+ <logical_name>메서드명</logical_name>
+ <physical_name>method_nm</physical_name>
+ <type>varchar(n)</type>
+ </word>
+ <word>
+ <id>145</id>
<length>4</length>
<decimal>null</decimal>
<array>false</array>
@@ -2540,7 +2652,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>139</id>
+ <id>146</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2556,7 +2668,7 @@
<type>text</type>
</word>
<word>
- <id>140</id>
+ <id>147</id>
<length>30</length>
<decimal>null</decimal>
<array>false</array>
@@ -2572,7 +2684,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>141</id>
+ <id>148</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2588,7 +2700,7 @@
<type>char</type>
</word>
<word>
- <id>142</id>
+ <id>149</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2604,7 +2716,7 @@
<type>character(n)</type>
</word>
<word>
- <id>143</id>
+ <id>150</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2620,7 +2732,7 @@
<type>character(n)</type>
</word>
<word>
- <id>144</id>
+ <id>151</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2636,7 +2748,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>145</id>
+ <id>152</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2652,7 +2764,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>146</id>
+ <id>153</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2668,7 +2780,7 @@
<type>text</type>
</word>
<word>
- <id>147</id>
+ <id>154</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2684,7 +2796,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>148</id>
+ <id>155</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2700,7 +2812,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>149</id>
+ <id>156</id>
<length>2000</length>
<decimal>null</decimal>
<array>false</array>
@@ -2716,7 +2828,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>150</id>
+ <id>157</id>
<length>8</length>
<decimal>null</decimal>
<array>false</array>
@@ -2732,7 +2844,7 @@
<type>character(n)</type>
</word>
<word>
- <id>151</id>
+ <id>158</id>
<length>8</length>
<decimal>null</decimal>
<array>false</array>
@@ -2748,7 +2860,7 @@
<type>character(n)</type>
</word>
<word>
- <id>152</id>
+ <id>159</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2764,7 +2876,23 @@
<type>timestamp</type>
</word>
<word>
- <id>153</id>
+ <id>160</id>
+ <length>null</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>발생일</description>
+ <logical_name>발생일</logical_name>
+ <physical_name>occrrnc_de</physical_name>
+ <type>timestamp</type>
+ </word>
+ <word>
+ <id>161</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -2780,7 +2908,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>154</id>
+ <id>162</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2796,7 +2924,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>155</id>
+ <id>163</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2812,7 +2940,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>156</id>
+ <id>164</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -2828,7 +2956,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>157</id>
+ <id>165</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2844,7 +2972,7 @@
<type></type>
</word>
<word>
- <id>158</id>
+ <id>166</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2860,7 +2988,7 @@
<type>character(n)</type>
</word>
<word>
- <id>159</id>
+ <id>167</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -2876,7 +3004,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>160</id>
+ <id>168</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -2892,7 +3020,7 @@
<type>text</type>
</word>
<word>
- <id>161</id>
+ <id>169</id>
<length>255</length>
<decimal>null</decimal>
<array>false</array>
@@ -2908,7 +3036,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>162</id>
+ <id>170</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -2924,7 +3052,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>163</id>
+ <id>171</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -2940,7 +3068,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>164</id>
+ <id>172</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -2956,7 +3084,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>165</id>
+ <id>173</id>
<length>200</length>
<decimal>null</decimal>
<array>false</array>
@@ -2972,7 +3100,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>166</id>
+ <id>174</id>
<length>200</length>
<decimal>null</decimal>
<array>false</array>
@@ -2988,7 +3116,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>167</id>
+ <id>175</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -3004,7 +3132,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>168</id>
+ <id>176</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -3020,7 +3148,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>169</id>
+ <id>177</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -3036,7 +3164,23 @@
<type>numeric(p)</type>
</word>
<word>
- <id>170</id>
+ <id>178</id>
+ <length>10</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>처리수</description>
+ <logical_name>처리수</logical_name>
+ <physical_name>process_co</physical_name>
+ <type>numeric(p)</type>
+ </word>
+ <word>
+ <id>179</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -3052,7 +3196,7 @@
<type>character(n)</type>
</word>
<word>
- <id>171</id>
+ <id>180</id>
<length>3</length>
<decimal>null</decimal>
<array>false</array>
@@ -3068,7 +3212,23 @@
<type>character(n)</type>
</word>
<word>
- <id>172</id>
+ <id>181</id>
+ <length>3</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>처리구분코드</description>
+ <logical_name>처리구분코드</logical_name>
+ <physical_name>process_se_code</physical_name>
+ <type>character(n)</type>
+ </word>
+ <word>
+ <id>182</id>
<length>15</length>
<decimal>null</decimal>
<array>false</array>
@@ -3084,7 +3244,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>173</id>
+ <id>183</id>
<length>14</length>
<decimal>null</decimal>
<array>false</array>
@@ -3100,7 +3260,23 @@
<type>varchar(n)</type>
</word>
<word>
- <id>174</id>
+ <id>184</id>
+ <length>14</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>처리시간</description>
+ <logical_name>처리시간</logical_name>
+ <physical_name>process_time</physical_name>
+ <type>varchar(n)</type>
+ </word>
+ <word>
+ <id>185</id>
<length>200</length>
<decimal>null</decimal>
<array>false</array>
@@ -3116,7 +3292,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>175</id>
+ <id>186</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -3132,7 +3308,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>176</id>
+ <id>187</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -3148,7 +3324,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>177</id>
+ <id>188</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -3164,7 +3340,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>178</id>
+ <id>189</id>
<length>1</length>
<decimal>null</decimal>
<array>false</array>
@@ -3180,7 +3356,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>179</id>
+ <id>190</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -3196,7 +3372,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>180</id>
+ <id>191</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -3212,7 +3388,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>181</id>
+ <id>192</id>
<length>8</length>
<decimal>null</decimal>
<array>false</array>
@@ -3228,7 +3404,7 @@
<type>character(n)</type>
</word>
<word>
- <id>182</id>
+ <id>193</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -3244,7 +3420,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>183</id>
+ <id>194</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -3260,7 +3436,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>184</id>
+ <id>195</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -3276,7 +3452,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>185</id>
+ <id>196</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3292,7 +3468,7 @@
<type>timestamp</type>
</word>
<word>
- <id>186</id>
+ <id>197</id>
<length>6</length>
<decimal>null</decimal>
<array>false</array>
@@ -3308,7 +3484,7 @@
<type>character(n)</type>
</word>
<word>
- <id>187</id>
+ <id>198</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -3324,7 +3500,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>188</id>
+ <id>199</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -3340,7 +3516,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>189</id>
+ <id>200</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -3356,7 +3532,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>190</id>
+ <id>201</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3372,7 +3548,7 @@
<type>char</type>
</word>
<word>
- <id>191</id>
+ <id>202</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -3388,7 +3564,23 @@
<type>varchar(n)</type>
</word>
<word>
- <id>192</id>
+ <id>203</id>
+ <length>20</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>요청ID</description>
+ <logical_name>요청ID</logical_name>
+ <physical_name>requst_id</physical_name>
+ <type>varchar(n)</type>
+ </word>
+ <word>
+ <id>204</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -3404,7 +3596,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>193</id>
+ <id>205</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3420,7 +3612,7 @@
<type>text</type>
</word>
<word>
- <id>194</id>
+ <id>206</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -3436,7 +3628,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>195</id>
+ <id>207</id>
<length>50</length>
<decimal>null</decimal>
<array>false</array>
@@ -3452,7 +3644,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>196</id>
+ <id>208</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3468,7 +3660,7 @@
<type>timestamp</type>
</word>
<word>
- <id>197</id>
+ <id>209</id>
<length>200</length>
<decimal>null</decimal>
<array>false</array>
@@ -3484,7 +3676,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>198</id>
+ <id>210</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -3500,7 +3692,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>199</id>
+ <id>211</id>
<length>300</length>
<decimal>null</decimal>
<array>false</array>
@@ -3516,7 +3708,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>200</id>
+ <id>212</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -3532,7 +3724,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>201</id>
+ <id>213</id>
<length>80</length>
<decimal>null</decimal>
<array>false</array>
@@ -3548,7 +3740,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>202</id>
+ <id>214</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -3564,7 +3756,7 @@
<type>character(n)</type>
</word>
<word>
- <id>203</id>
+ <id>215</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -3580,7 +3772,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>204</id>
+ <id>216</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -3596,8 +3788,24 @@
<type>varchar(n)</type>
</word>
<word>
- <id>205</id>
- <length>23</length>
+ <id>217</id>
+ <length>20</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>요청자ID</description>
+ <logical_name>요청자ID</logical_name>
+ <physical_name>rqester_id</physical_name>
+ <type>varchar(n)</type>
+ </word>
+ <word>
+ <id>218</id>
+ <length>23</length>
<decimal>null</decimal>
<array>false</array>
<array_dimension>null</array_dimension>
@@ -3612,7 +3820,23 @@
<type>varchar(n)</type>
</word>
<word>
- <id>206</id>
+ <id>219</id>
+ <length>23</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>요청자IP</description>
+ <logical_name>요청자IP</logical_name>
+ <physical_name>rqester_ip</physical_name>
+ <type>varchar(n)</type>
+ </word>
+ <word>
+ <id>220</id>
<length>3</length>
<decimal>null</decimal>
<array>false</array>
@@ -3628,7 +3852,23 @@
<type>character(n)</type>
</word>
<word>
- <id>207</id>
+ <id>221</id>
+ <length>3</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>응답코드</description>
+ <logical_name>응답코드</logical_name>
+ <physical_name>rspns_code</physical_name>
+ <type>character(n)</type>
+ </word>
+ <word>
+ <id>222</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3644,7 +3884,7 @@
<type>timestamp</type>
</word>
<word>
- <id>208</id>
+ <id>223</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -3660,7 +3900,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>209</id>
+ <id>224</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3676,7 +3916,7 @@
<type>char</type>
</word>
<word>
- <id>210</id>
+ <id>225</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3692,7 +3932,7 @@
<type>char</type>
</word>
<word>
- <id>211</id>
+ <id>226</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3708,7 +3948,7 @@
<type>char</type>
</word>
<word>
- <id>212</id>
+ <id>227</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3724,7 +3964,7 @@
<type>text</type>
</word>
<word>
- <id>213</id>
+ <id>228</id>
<length>8</length>
<decimal>null</decimal>
<array>false</array>
@@ -3740,7 +3980,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>214</id>
+ <id>229</id>
<length>255</length>
<decimal>null</decimal>
<array>false</array>
@@ -3756,7 +3996,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>215</id>
+ <id>230</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3772,7 +4012,7 @@
<type>char</type>
</word>
<word>
- <id>216</id>
+ <id>231</id>
<length>255</length>
<decimal>null</decimal>
<array>false</array>
@@ -3788,7 +4028,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>217</id>
+ <id>232</id>
<length>255</length>
<decimal>null</decimal>
<array>false</array>
@@ -3804,7 +4044,23 @@
<type>varchar(n)</type>
</word>
<word>
- <id>218</id>
+ <id>233</id>
+ <length>255</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>서비스명</description>
+ <logical_name>서비스명</logical_name>
+ <physical_name>svc_nm</physical_name>
+ <type>varchar(n)</type>
+ </word>
+ <word>
+ <id>234</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3820,7 +4076,7 @@
<type>text</type>
</word>
<word>
- <id>219</id>
+ <id>235</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -3836,7 +4092,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>220</id>
+ <id>236</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -3852,7 +4108,7 @@
<type>character(n)</type>
</word>
<word>
- <id>221</id>
+ <id>237</id>
<length>255</length>
<decimal>null</decimal>
<array>false</array>
@@ -3868,7 +4124,23 @@
<type>varchar(n)</type>
</word>
<word>
- <id>222</id>
+ <id>238</id>
+ <length>255</length>
+ <decimal>null</decimal>
+ <array>false</array>
+ <array_dimension>null</array_dimension>
+ <unsigned>false</unsigned>
+ <zerofill>false</zerofill>
+ <binary>false</binary>
+ <args></args>
+ <char_semantics>true</char_semantics>
+ <description>대상메뉴명</description>
+ <logical_name>대상메뉴명</logical_name>
+ <physical_name>trget_menu_nm</physical_name>
+ <type>varchar(n)</type>
+ </word>
+ <word>
+ <id>239</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -3884,7 +4156,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>223</id>
+ <id>240</id>
<length>10</length>
<decimal>null</decimal>
<array>false</array>
@@ -3900,7 +4172,7 @@
<type>numeric(p)</type>
</word>
<word>
- <id>224</id>
+ <id>241</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3916,7 +4188,7 @@
<type>timestamp</type>
</word>
<word>
- <id>225</id>
+ <id>242</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -3932,7 +4204,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>226</id>
+ <id>243</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -3948,7 +4220,7 @@
<type>text</type>
</word>
<word>
- <id>227</id>
+ <id>244</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -3964,7 +4236,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>228</id>
+ <id>245</id>
<length>200</length>
<decimal>null</decimal>
<array>false</array>
@@ -3980,7 +4252,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>229</id>
+ <id>246</id>
<length>100</length>
<decimal>null</decimal>
<array>false</array>
@@ -3996,7 +4268,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>230</id>
+ <id>247</id>
<length>50</length>
<decimal>null</decimal>
<array>false</array>
@@ -4012,7 +4284,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>231</id>
+ <id>248</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -4028,7 +4300,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>232</id>
+ <id>249</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -4044,7 +4316,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>233</id>
+ <id>250</id>
<length>60</length>
<decimal>null</decimal>
<array>false</array>
@@ -4060,7 +4332,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>234</id>
+ <id>251</id>
<length>50</length>
<decimal>null</decimal>
<array>false</array>
@@ -4076,7 +4348,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>235</id>
+ <id>252</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -4092,7 +4364,7 @@
<type></type>
</word>
<word>
- <id>236</id>
+ <id>253</id>
<length>6</length>
<decimal>null</decimal>
<array>false</array>
@@ -4108,7 +4380,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>237</id>
+ <id>254</id>
<length>null</length>
<decimal>null</decimal>
<array>false</array>
@@ -4124,7 +4396,7 @@
<type>char</type>
</word>
<word>
- <id>238</id>
+ <id>255</id>
<length>1</length>
<decimal>null</decimal>
<array>false</array>
@@ -4140,7 +4412,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>239</id>
+ <id>256</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -4156,7 +4428,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>240</id>
+ <id>257</id>
<length>20</length>
<decimal>null</decimal>
<array>false</array>
@@ -4172,7 +4444,7 @@
<type>varchar(n)</type>
</word>
<word>
- <id>241</id>
+ <id>258</id>
<length>6</length>
<decimal>null</decimal>
<array>false</array>
@@ -4212,7 +4484,7 @@
<sql>SELECT comtngnrlmber.esntl_id,
 comtngnrlmber.mber_id AS user_id,
 comtngnrlmber.password,
 comtngnrlmber.mber_nm AS user_nm,
 comtngnrlmber.zip AS user_zip,
 comtngnrlmber.adres AS user_adres,
 comtngnrlmber.mber_email_adres AS user_email,
 ' '::bpchar AS group_id,
 'GNR'::text AS user_se,
 ' '::bpchar AS orgnzt_id
 FROM comtngnrlmber
UNION ALL
 SELECT comtnemplyrinfo.esntl_id,
 comtnemplyrinfo.emplyr_id AS user_id,
 comtnemplyrinfo.password,
 comtnemplyrinfo.user_nm,
 comtnemplyrinfo.zip AS user_zip,
 comtnemplyrinfo.house_adres AS user_adres,
 comtnemplyrinfo.email_adres AS user_email,
 comtnemplyrinfo.group_id,
 'USR'::text AS user_se,
 comtnemplyrinfo.orgnzt_id
 FROM comtnemplyrinfo
UNION ALL
 SELECT comtnentrprsmber.esntl_id,
 comtnentrprsmber.entrprs_mber_id AS user_id,
 comtnentrprsmber.entrprs_mber_password AS password,
 comtnentrprsmber.cmpny_nm AS user_nm,
 comtnentrprsmber.zip AS user_zip,
 comtnentrprsmber.adres AS user_adres,
 comtnentrprsmber.applcnt_email_adres AS user_email,
 ' '::bpchar AS group_id,
 'ENT'::text AS user_se,
 ' '::bpchar AS orgnzt_id
 FROM comtnentrprsmber
 ORDER BY 1;</sql>
<columns>
<normal_column>
- <word_id>73</word_id>
+ <word_id>78</word_id>
<id>null</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4245,7 +4517,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>232</word_id>
+ <word_id>249</word_id>
<id>null</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4278,7 +4550,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>166</word_id>
+ <word_id>174</word_id>
<id>null</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4311,7 +4583,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>234</word_id>
+ <word_id>251</word_id>
<id>null</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4344,7 +4616,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>236</word_id>
+ <word_id>253</word_id>
<id>null</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4377,7 +4649,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>229</word_id>
+ <word_id>246</word_id>
<id>null</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4410,7 +4682,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>230</word_id>
+ <word_id>247</word_id>
<id>null</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4443,7 +4715,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>92</word_id>
+ <word_id>96</word_id>
<id>null</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4476,7 +4748,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>235</word_id>
+ <word_id>252</word_id>
<id>null</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4509,7 +4781,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>157</word_id>
+ <word_id>165</word_id>
<id>null</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4569,7 +4841,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>150</word_id>
+ <word_id>158</word_id>
<id>0</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4602,7 +4874,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>228</word_id>
+ <word_id>245</word_id>
<id>1</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4635,7 +4907,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>182</word_id>
+ <word_id>193</word_id>
<id>2</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4700,7 +4972,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>150</word_id>
+ <word_id>158</word_id>
<id>3</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4733,7 +5005,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>217</word_id>
+ <word_id>232</word_id>
<id>4</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4766,7 +5038,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>137</word_id>
+ <word_id>142</word_id>
<id>5</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4799,7 +5071,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>45</word_id>
+ <word_id>46</word_id>
<id>6</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4832,7 +5104,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>222</word_id>
+ <word_id>239</word_id>
<id>7</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4865,7 +5137,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>182</word_id>
+ <word_id>193</word_id>
<id>8</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4898,7 +5170,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>51</word_id>
+ <word_id>52</word_id>
<id>9</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4931,7 +5203,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>163</word_id>
+ <word_id>170</word_id>
<id>10</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -4964,7 +5236,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>69</word_id>
+ <word_id>70</word_id>
<id>11</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5033,10 +5305,10 @@
<g>0</g>
<b>0</b>
</color>
- <child_cardinality>1..n</child_cardinality>
+ <child_cardinality>1</child_cardinality>
<parent_cardinality>1</parent_cardinality>
<reference_for_pk>true</reference_for_pk>
- <name>comtnroles_hierarchy_chldrn_role_fkey</name>
+ <name>comtnroles_hierarchy_parnts_role_fkey</name>
<on_delete_action>CASCADE</on_delete_action>
<on_update_action>NO ACTION</on_update_action>
<referenced_column>null</referenced_column>
@@ -5055,10 +5327,10 @@
<g>0</g>
<b>0</b>
</color>
- <child_cardinality>1</child_cardinality>
+ <child_cardinality>1..n</child_cardinality>
<parent_cardinality>1</parent_cardinality>
<reference_for_pk>true</reference_for_pk>
- <name>comtnroles_hierarchy_parnts_role_fkey</name>
+ <name>comtnroles_hierarchy_chldrn_role_fkey</name>
<on_delete_action>CASCADE</on_delete_action>
<on_update_action>NO ACTION</on_update_action>
<referenced_column>null</referenced_column>
@@ -5075,7 +5347,7 @@
<normal_column>
<id>12</id>
<referenced_column>118</referenced_column>
- <relation>1</relation>
+ <relation>0</relation>
<description>부모롤</description>
<unique_key_name></unique_key_name>
<logical_name>부모롤</logical_name>
@@ -5109,7 +5381,7 @@
<normal_column>
<id>13</id>
<referenced_column>118</referenced_column>
- <relation>0</relation>
+ <relation>1</relation>
<description>자식롤</description>
<unique_key_name></unique_key_name>
<logical_name>자식롤</logical_name>
@@ -5186,7 +5458,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>175</word_id>
+ <word_id>186</word_id>
<id>14</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5219,7 +5491,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>177</word_id>
+ <word_id>188</word_id>
<id>15</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5252,7 +5524,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>176</word_id>
+ <word_id>187</word_id>
<id>16</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5285,7 +5557,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>174</word_id>
+ <word_id>185</word_id>
<id>17</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5318,7 +5590,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>227</word_id>
+ <word_id>244</word_id>
<id>18</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5383,7 +5655,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>158</word_id>
+ <word_id>166</word_id>
<id>19</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5416,7 +5688,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>159</word_id>
+ <word_id>167</word_id>
<id>20</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5449,7 +5721,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>156</word_id>
+ <word_id>164</word_id>
<id>21</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5507,26 +5779,21 @@
<connections>
<relation>
<id>2</id>
- <source>6</source>
+ <source>4</source>
<target>6</target>
- <source_xp>100</source_xp>
- <source_yp>50</source_yp>
- <target_xp>50</target_xp>
- <target_yp>100</target_yp>
- <bendpoint>
- <relative>true</relative>
- <x>100</x>
- <y>100</y>
- </bendpoint>
+ <source_xp>-1</source_xp>
+ <source_yp>-1</source_yp>
+ <target_xp>-1</target_xp>
+ <target_yp>-1</target_yp>
<color>
<r>0</r>
<g>0</g>
<b>0</b>
</color>
<child_cardinality>1..n</child_cardinality>
- <parent_cardinality>0..1</parent_cardinality>
+ <parent_cardinality>1</parent_cardinality>
<reference_for_pk>true</reference_for_pk>
- <name>comtnmenuinfo_upper_menu_no_fkey</name>
+ <name>comtnmenuinfo_progrm_file_nm_fkey</name>
<on_delete_action>CASCADE</on_delete_action>
<on_update_action>NO ACTION</on_update_action>
<referenced_column>null</referenced_column>
@@ -5534,21 +5801,26 @@
</relation>
<relation>
<id>3</id>
- <source>4</source>
+ <source>6</source>
<target>6</target>
- <source_xp>-1</source_xp>
- <source_yp>-1</source_yp>
- <target_xp>-1</target_xp>
- <target_yp>-1</target_yp>
+ <source_xp>100</source_xp>
+ <source_yp>50</source_yp>
+ <target_xp>50</target_xp>
+ <target_yp>100</target_yp>
+ <bendpoint>
+ <relative>true</relative>
+ <x>100</x>
+ <y>100</y>
+ </bendpoint>
<color>
<r>0</r>
<g>0</g>
<b>0</b>
</color>
<child_cardinality>1..n</child_cardinality>
- <parent_cardinality>1</parent_cardinality>
+ <parent_cardinality>0..1</parent_cardinality>
<reference_for_pk>true</reference_for_pk>
- <name>comtnmenuinfo_progrm_file_nm_fkey</name>
+ <name>comtnmenuinfo_upper_menu_no_fkey</name>
<on_delete_action>CASCADE</on_delete_action>
<on_update_action>NO ACTION</on_update_action>
<referenced_column>null</referenced_column>
@@ -5563,7 +5835,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>130</word_id>
+ <word_id>137</word_id>
<id>22</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5598,7 +5870,7 @@
<normal_column>
<id>23</id>
<referenced_column>14</referenced_column>
- <relation>3</relation>
+ <relation>2</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -5630,7 +5902,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>132</word_id>
+ <word_id>138</word_id>
<id>24</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5665,7 +5937,7 @@
<normal_column>
<id>25</id>
<referenced_column>24</referenced_column>
- <relation>2</relation>
+ <relation>3</relation>
<description>상위메뉴번호</description>
<unique_key_name></unique_key_name>
<logical_name>상위메뉴번호</logical_name>
@@ -5697,7 +5969,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>135</word_id>
+ <word_id>141</word_id>
<id>26</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5730,7 +6002,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>126</word_id>
+ <word_id>132</word_id>
<id>27</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5763,7 +6035,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>189</word_id>
+ <word_id>200</word_id>
<id>28</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5796,7 +6068,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>188</word_id>
+ <word_id>199</word_id>
<id>29</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -5867,7 +6139,7 @@
<connections>
<relation>
<id>4</id>
- <source>14</source>
+ <source>28</source>
<target>7</target>
<source_xp>-1</source_xp>
<source_yp>-1</source_yp>
@@ -5879,17 +6151,17 @@
<b>0</b>
</color>
<child_cardinality>1..n</child_cardinality>
- <parent_cardinality>1</parent_cardinality>
+ <parent_cardinality>0..1</parent_cardinality>
<reference_for_pk>true</reference_for_pk>
- <name>comtnmenucreatdtls_author_code_fkey</name>
- <on_delete_action>NO ACTION</on_delete_action>
+ <name>comtnmenucreatdtls_mapng_creat_id_fkey</name>
+ <on_delete_action>CASCADE</on_delete_action>
<on_update_action>NO ACTION</on_update_action>
<referenced_column>null</referenced_column>
<referenced_complex_unique_key>null</referenced_complex_unique_key>
</relation>
<relation>
<id>5</id>
- <source>6</source>
+ <source>14</source>
<target>7</target>
<source_xp>-1</source_xp>
<source_yp>-1</source_yp>
@@ -5903,15 +6175,15 @@
<child_cardinality>1..n</child_cardinality>
<parent_cardinality>1</parent_cardinality>
<reference_for_pk>true</reference_for_pk>
- <name>comtnmenucreatdtls_menu_no_fkey</name>
- <on_delete_action>CASCADE</on_delete_action>
+ <name>comtnmenucreatdtls_author_code_fkey</name>
+ <on_delete_action>NO ACTION</on_delete_action>
<on_update_action>NO ACTION</on_update_action>
<referenced_column>null</referenced_column>
<referenced_complex_unique_key>null</referenced_complex_unique_key>
</relation>
<relation>
<id>6</id>
- <source>28</source>
+ <source>6</source>
<target>7</target>
<source_xp>-1</source_xp>
<source_yp>-1</source_yp>
@@ -5923,9 +6195,9 @@
<b>0</b>
</color>
<child_cardinality>1..n</child_cardinality>
- <parent_cardinality>0..1</parent_cardinality>
+ <parent_cardinality>1</parent_cardinality>
<reference_for_pk>true</reference_for_pk>
- <name>comtnmenucreatdtls_mapng_creat_id_fkey</name>
+ <name>comtnmenucreatdtls_menu_no_fkey</name>
<on_delete_action>CASCADE</on_delete_action>
<on_update_action>NO ACTION</on_update_action>
<referenced_column>null</referenced_column>
@@ -5942,7 +6214,7 @@
<normal_column>
<id>30</id>
<referenced_column>24</referenced_column>
- <relation>5</relation>
+ <relation>6</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -5976,7 +6248,7 @@
<normal_column>
<id>31</id>
<referenced_column>118</referenced_column>
- <relation>4</relation>
+ <relation>5</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -6010,7 +6282,7 @@
<normal_column>
<id>32</id>
<referenced_column>217</referenced_column>
- <relation>6</relation>
+ <relation>4</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -6096,8 +6368,8 @@
<width>133</width>
<font_name>맑은 고딕</font_name>
<font_size>9</font_size>
- <x>2388</x>
- <y>1597</y>
+ <x>2564</x>
+ <y>1567</y>
<color>
<r>128</r>
<g>128</g>
@@ -6169,7 +6441,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>82</word_id>
+ <word_id>86</word_id>
<id>34</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6202,7 +6474,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>83</word_id>
+ <word_id>87</word_id>
<id>35</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6235,7 +6507,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>214</word_id>
+ <word_id>229</word_id>
<id>36</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6268,7 +6540,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>161</word_id>
+ <word_id>169</word_id>
<id>37</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6301,7 +6573,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>77</word_id>
+ <word_id>81</word_id>
<id>38</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6334,7 +6606,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>76</word_id>
+ <word_id>80</word_id>
<id>39</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6367,7 +6639,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>80</word_id>
+ <word_id>84</word_id>
<id>40</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6467,7 +6739,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>61</word_id>
+ <word_id>62</word_id>
<id>41</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6500,7 +6772,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>67</word_id>
+ <word_id>68</word_id>
<id>42</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6566,7 +6838,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>105</word_id>
+ <word_id>111</word_id>
<id>44</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6665,7 +6937,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>241</word_id>
+ <word_id>258</word_id>
<id>47</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6731,7 +7003,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>66</word_id>
+ <word_id>67</word_id>
<id>49</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6764,7 +7036,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>89</word_id>
+ <word_id>93</word_id>
<id>50</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6797,7 +7069,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>101</word_id>
+ <word_id>105</word_id>
<id>51</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6896,7 +7168,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>207</word_id>
+ <word_id>222</word_id>
<id>54</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6929,7 +7201,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>65</word_id>
+ <word_id>66</word_id>
<id>55</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6962,7 +7234,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>62</word_id>
+ <word_id>63</word_id>
<id>56</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -6995,7 +7267,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>64</word_id>
+ <word_id>65</word_id>
<id>57</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7028,7 +7300,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>63</word_id>
+ <word_id>64</word_id>
<id>58</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7095,7 +7367,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>53</word_id>
+ <word_id>54</word_id>
<id>60</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7128,7 +7400,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>60</word_id>
+ <word_id>61</word_id>
<id>61</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7227,7 +7499,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>74</word_id>
+ <word_id>77</word_id>
<id>64</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7260,7 +7532,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>112</word_id>
+ <word_id>118</word_id>
<id>65</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7293,7 +7565,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>113</word_id>
+ <word_id>119</word_id>
<id>66</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7326,7 +7598,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>114</word_id>
+ <word_id>120</word_id>
<id>67</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7430,7 +7702,7 @@
<connections>
<relation>
<id>9</id>
- <source>15</source>
+ <source>5</source>
<target>10</target>
<source_xp>-1</source_xp>
<source_yp>-1</source_yp>
@@ -7444,7 +7716,7 @@
<child_cardinality>1..n</child_cardinality>
<parent_cardinality>0..1</parent_cardinality>
<reference_for_pk>true</reference_for_pk>
- <name>comtnemplyrinfo_group_id_fkey</name>
+ <name>comtnemplyrinfo_orgnzt_id_fkey</name>
<on_delete_action>SET NULL</on_delete_action>
<on_update_action>NO ACTION</on_update_action>
<referenced_column>null</referenced_column>
@@ -7452,7 +7724,7 @@
</relation>
<relation>
<id>10</id>
- <source>5</source>
+ <source>15</source>
<target>10</target>
<source_xp>-1</source_xp>
<source_yp>-1</source_yp>
@@ -7466,7 +7738,7 @@
<child_cardinality>1..n</child_cardinality>
<parent_cardinality>0..1</parent_cardinality>
<reference_for_pk>true</reference_for_pk>
- <name>comtnemplyrinfo_orgnzt_id_fkey</name>
+ <name>comtnemplyrinfo_group_id_fkey</name>
<on_delete_action>SET NULL</on_delete_action>
<on_update_action>NO ACTION</on_update_action>
<referenced_column>null</referenced_column>
@@ -7481,7 +7753,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>56</word_id>
+ <word_id>57</word_id>
<id>69</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7516,7 +7788,7 @@
<normal_column>
<id>70</id>
<referenced_column>19</referenced_column>
- <relation>10</relation>
+ <relation>9</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -7548,7 +7820,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>233</word_id>
+ <word_id>250</word_id>
<id>71</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7581,7 +7853,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>165</word_id>
+ <word_id>173</word_id>
<id>72</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7614,7 +7886,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>58</word_id>
+ <word_id>59</word_id>
<id>73</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7647,7 +7919,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>100</word_id>
+ <word_id>104</word_id>
<id>74</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7680,7 +7952,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>210</word_id>
+ <word_id>225</word_id>
<id>75</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7746,7 +8018,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>89</word_id>
+ <word_id>93</word_id>
<id>77</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7779,7 +8051,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>95</word_id>
+ <word_id>99</word_id>
<id>78</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7812,7 +8084,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>168</word_id>
+ <word_id>176</word_id>
<id>79</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7845,7 +8117,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>167</word_id>
+ <word_id>175</word_id>
<id>80</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7878,7 +8150,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>96</word_id>
+ <word_id>100</word_id>
<id>81</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7944,7 +8216,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>53</word_id>
+ <word_id>54</word_id>
<id>83</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -7977,7 +8249,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>241</word_id>
+ <word_id>258</word_id>
<id>84</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8010,7 +8282,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>154</word_id>
+ <word_id>162</word_id>
<id>85</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8043,7 +8315,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>125</word_id>
+ <word_id>131</word_id>
<id>86</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8076,7 +8348,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>55</word_id>
+ <word_id>56</word_id>
<id>87</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8109,7 +8381,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>153</word_id>
+ <word_id>161</word_id>
<id>88</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8142,7 +8414,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>97</word_id>
+ <word_id>101</word_id>
<id>89</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8177,7 +8449,7 @@
<normal_column>
<id>90</id>
<referenced_column>122</referenced_column>
- <relation>9</relation>
+ <relation>10</relation>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -8209,7 +8481,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>181</word_id>
+ <word_id>192</word_id>
<id>91</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8242,7 +8514,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>57</word_id>
+ <word_id>58</word_id>
<id>92</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8275,7 +8547,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>74</word_id>
+ <word_id>77</word_id>
<id>93</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8341,7 +8613,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>207</word_id>
+ <word_id>222</word_id>
<id>95</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8374,7 +8646,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>112</word_id>
+ <word_id>118</word_id>
<id>96</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8407,7 +8679,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>113</word_id>
+ <word_id>119</word_id>
<id>97</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8440,7 +8712,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>114</word_id>
+ <word_id>120</word_id>
<id>98</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8547,8 +8819,8 @@
<width>133</width>
<font_name>맑은 고딕</font_name>
<font_size>9</font_size>
- <x>1836</x>
- <y>1550</y>
+ <x>2012</x>
+ <y>1520</y>
<color>
<r>128</r>
<g>128</g>
@@ -8557,7 +8829,7 @@
<connections>
<relation>
<id>11</id>
- <source>41</source>
+ <source>42</source>
<target>11</target>
<source_xp>-1</source_xp>
<source_yp>-1</source_yp>
@@ -8587,7 +8859,7 @@
<columns>
<normal_column>
<id>100</id>
- <referenced_column>355</referenced_column>
+ <referenced_column>371</referenced_column>
<relation>11</relation>
<description></description>
<unique_key_name></unique_key_name>
@@ -8620,7 +8892,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>220</word_id>
+ <word_id>236</word_id>
<id>101</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8653,7 +8925,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>237</word_id>
+ <word_id>254</word_id>
<id>102</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8686,7 +8958,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>186</word_id>
+ <word_id>197</word_id>
<id>103</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8719,7 +8991,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>86</word_id>
+ <word_id>90</word_id>
<id>104</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8752,7 +9024,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>84</word_id>
+ <word_id>88</word_id>
<id>105</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8785,7 +9057,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>106</word_id>
+ <word_id>112</word_id>
<id>106</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8818,7 +9090,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>108</word_id>
+ <word_id>114</word_id>
<id>107</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8879,8 +9151,8 @@
<width>168</width>
<font_name>맑은 고딕</font_name>
<font_size>9</font_size>
- <x>1825</x>
- <y>828</y>
+ <x>2001</x>
+ <y>798</y>
<color>
<r>128</r>
<g>128</g>
@@ -8962,7 +9234,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>215</word_id>
+ <word_id>230</word_id>
<id>110</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -8995,7 +9267,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>86</word_id>
+ <word_id>90</word_id>
<id>111</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9028,7 +9300,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>106</word_id>
+ <word_id>112</word_id>
<id>112</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9061,7 +9333,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>84</word_id>
+ <word_id>88</word_id>
<id>113</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9094,7 +9366,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>108</word_id>
+ <word_id>114</word_id>
<id>114</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9526,7 +9798,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>93</word_id>
+ <word_id>97</word_id>
<id>122</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9559,7 +9831,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>94</word_id>
+ <word_id>98</word_id>
<id>123</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9592,7 +9864,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>90</word_id>
+ <word_id>94</word_id>
<id>124</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9625,7 +9897,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>91</word_id>
+ <word_id>95</word_id>
<id>125</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9746,7 +10018,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>192</word_id>
+ <word_id>204</word_id>
<id>127</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9779,7 +10051,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>203</word_id>
+ <word_id>217</word_id>
<id>128</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9845,7 +10117,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>193</word_id>
+ <word_id>205</word_id>
<id>130</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9878,7 +10150,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>155</word_id>
+ <word_id>163</word_id>
<id>131</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9911,7 +10183,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>172</word_id>
+ <word_id>182</word_id>
<id>132</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9944,7 +10216,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>170</word_id>
+ <word_id>179</word_id>
<id>133</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -9977,7 +10249,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>202</word_id>
+ <word_id>214</word_id>
<id>134</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10010,7 +10282,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>194</word_id>
+ <word_id>206</word_id>
<id>135</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10088,7 +10360,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>219</word_id>
+ <word_id>235</word_id>
<id>136</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10121,7 +10393,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>140</word_id>
+ <word_id>147</word_id>
<id>137</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10341,7 +10613,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>237</word_id>
+ <word_id>254</word_id>
<id>142</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10374,7 +10646,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>86</word_id>
+ <word_id>90</word_id>
<id>143</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10407,7 +10679,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>84</word_id>
+ <word_id>88</word_id>
<id>144</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10440,7 +10712,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>106</word_id>
+ <word_id>112</word_id>
<id>145</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10473,7 +10745,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>108</word_id>
+ <word_id>114</word_id>
<id>146</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10672,7 +10944,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>237</word_id>
+ <word_id>254</word_id>
<id>150</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10739,7 +11011,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>86</word_id>
+ <word_id>90</word_id>
<id>152</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10772,7 +11044,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>84</word_id>
+ <word_id>88</word_id>
<id>153</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10805,7 +11077,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>106</word_id>
+ <word_id>112</word_id>
<id>154</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10838,7 +11110,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>108</word_id>
+ <word_id>114</word_id>
<id>155</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10916,7 +11188,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>191</word_id>
+ <word_id>202</word_id>
<id>156</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10949,7 +11221,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>152</word_id>
+ <word_id>159</word_id>
<id>157</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -10982,7 +11254,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>228</word_id>
+ <word_id>245</word_id>
<id>158</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11015,7 +11287,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>203</word_id>
+ <word_id>217</word_id>
<id>159</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11048,7 +11320,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>205</word_id>
+ <word_id>218</word_id>
<id>160</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11113,7 +11385,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>99</word_id>
+ <word_id>103</word_id>
<id>161</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11146,7 +11418,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>98</word_id>
+ <word_id>102</word_id>
<id>162</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11310,7 +11582,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>237</word_id>
+ <word_id>254</word_id>
<id>166</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11343,7 +11615,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>86</word_id>
+ <word_id>90</word_id>
<id>167</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11376,7 +11648,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>84</word_id>
+ <word_id>88</word_id>
<id>168</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11409,7 +11681,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>106</word_id>
+ <word_id>112</word_id>
<id>169</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11442,7 +11714,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>108</word_id>
+ <word_id>114</word_id>
<id>170</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11529,7 +11801,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>121</word_id>
+ <word_id>127</word_id>
<id>171</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11562,7 +11834,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>165</word_id>
+ <word_id>173</word_id>
<id>172</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11595,7 +11867,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>168</word_id>
+ <word_id>176</word_id>
<id>173</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11628,7 +11900,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>167</word_id>
+ <word_id>175</word_id>
<id>174</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11661,7 +11933,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>100</word_id>
+ <word_id>104</word_id>
<id>175</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11694,7 +11966,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>122</word_id>
+ <word_id>128</word_id>
<id>176</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11727,7 +11999,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>241</word_id>
+ <word_id>258</word_id>
<id>177</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11826,7 +12098,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>123</word_id>
+ <word_id>129</word_id>
<id>180</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11859,7 +12131,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>53</word_id>
+ <word_id>54</word_id>
<id>181</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11892,7 +12164,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>59</word_id>
+ <word_id>60</word_id>
<id>182</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11925,7 +12197,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>125</word_id>
+ <word_id>131</word_id>
<id>183</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -11992,7 +12264,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>120</word_id>
+ <word_id>126</word_id>
<id>185</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12025,7 +12297,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>119</word_id>
+ <word_id>125</word_id>
<id>186</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12058,7 +12330,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>138</word_id>
+ <word_id>145</word_id>
<id>187</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12091,7 +12363,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>207</word_id>
+ <word_id>222</word_id>
<id>188</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12124,7 +12396,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>210</word_id>
+ <word_id>225</word_id>
<id>189</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12157,7 +12429,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>74</word_id>
+ <word_id>77</word_id>
<id>190</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12190,7 +12462,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>112</word_id>
+ <word_id>118</word_id>
<id>191</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12223,7 +12495,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>113</word_id>
+ <word_id>119</word_id>
<id>192</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12256,7 +12528,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>114</word_id>
+ <word_id>120</word_id>
<id>193</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12367,7 +12639,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>115</word_id>
+ <word_id>121</word_id>
<id>195</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12499,7 +12771,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>71</word_id>
+ <word_id>74</word_id>
<id>199</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12532,7 +12804,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>70</word_id>
+ <word_id>72</word_id>
<id>200</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12630,7 +12902,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>56</word_id>
+ <word_id>57</word_id>
<id>202</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12663,7 +12935,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>103</word_id>
+ <word_id>108</word_id>
<id>203</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12696,7 +12968,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>54</word_id>
+ <word_id>55</word_id>
<id>204</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12729,7 +13001,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>111</word_id>
+ <word_id>117</word_id>
<id>205</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12762,7 +13034,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>84</word_id>
+ <word_id>88</word_id>
<id>206</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12795,7 +13067,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>86</word_id>
+ <word_id>90</word_id>
<id>207</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12828,7 +13100,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>108</word_id>
+ <word_id>114</word_id>
<id>208</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12861,7 +13133,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>106</word_id>
+ <word_id>112</word_id>
<id>209</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12926,7 +13198,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>208</word_id>
+ <word_id>223</word_id>
<id>210</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -12959,7 +13231,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>124</word_id>
+ <word_id>130</word_id>
<id>211</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13070,7 +13342,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>129</word_id>
+ <word_id>135</word_id>
<id>213</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13103,7 +13375,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>56</word_id>
+ <word_id>57</word_id>
<id>214</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13136,7 +13408,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>130</word_id>
+ <word_id>137</word_id>
<id>215</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13169,7 +13441,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>177</word_id>
+ <word_id>188</word_id>
<id>216</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13234,7 +13506,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>116</word_id>
+ <word_id>122</word_id>
<id>217</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13300,7 +13572,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>117</word_id>
+ <word_id>123</word_id>
<id>219</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13333,7 +13605,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>118</word_id>
+ <word_id>124</word_id>
<id>220</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13487,7 +13759,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>158</word_id>
+ <word_id>166</word_id>
<id>223</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13520,7 +13792,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>93</word_id>
+ <word_id>97</word_id>
<id>224</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13553,7 +13825,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>58</word_id>
+ <word_id>59</word_id>
<id>225</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13586,7 +13858,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>210</word_id>
+ <word_id>225</word_id>
<id>226</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13652,7 +13924,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>89</word_id>
+ <word_id>93</word_id>
<id>228</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13685,7 +13957,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>95</word_id>
+ <word_id>99</word_id>
<id>229</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13718,7 +13990,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>96</word_id>
+ <word_id>100</word_id>
<id>230</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13784,7 +14056,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>53</word_id>
+ <word_id>54</word_id>
<id>232</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13817,7 +14089,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>241</word_id>
+ <word_id>258</word_id>
<id>233</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13850,7 +14122,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>154</word_id>
+ <word_id>162</word_id>
<id>234</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13883,7 +14155,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>125</word_id>
+ <word_id>131</word_id>
<id>235</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13916,7 +14188,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>55</word_id>
+ <word_id>56</word_id>
<id>236</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13949,7 +14221,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>97</word_id>
+ <word_id>101</word_id>
<id>237</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -13982,7 +14254,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>181</word_id>
+ <word_id>192</word_id>
<id>238</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14015,7 +14287,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>57</word_id>
+ <word_id>58</word_id>
<id>239</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14048,7 +14320,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>74</word_id>
+ <word_id>77</word_id>
<id>240</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14126,7 +14398,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>191</word_id>
+ <word_id>202</word_id>
<id>241</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14159,7 +14431,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>104</word_id>
+ <word_id>110</word_id>
<id>242</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14192,7 +14464,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>102</word_id>
+ <word_id>106</word_id>
<id>243</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14225,7 +14497,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>152</word_id>
+ <word_id>159</word_id>
<id>244</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14258,7 +14530,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>205</word_id>
+ <word_id>218</word_id>
<id>245</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14291,7 +14563,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>203</word_id>
+ <word_id>217</word_id>
<id>246</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14324,7 +14596,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>221</word_id>
+ <word_id>237</word_id>
<id>247</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14357,7 +14629,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>217</word_id>
+ <word_id>232</word_id>
<id>248</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14390,7 +14662,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>137</word_id>
+ <word_id>142</word_id>
<id>249</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14423,7 +14695,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>171</word_id>
+ <word_id>180</word_id>
<id>250</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14456,7 +14728,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>169</word_id>
+ <word_id>177</word_id>
<id>251</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14489,7 +14761,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>173</word_id>
+ <word_id>183</word_id>
<id>252</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14522,7 +14794,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>206</word_id>
+ <word_id>221</word_id>
<id>253</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14555,7 +14827,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>72</word_id>
+ <word_id>75</word_id>
<id>254</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14588,7 +14860,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>69</word_id>
+ <word_id>70</word_id>
<id>255</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14621,7 +14893,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>70</word_id>
+ <word_id>72</word_id>
<id>256</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14669,8 +14941,8 @@
<width>140</width>
<font_name>맑은 고딕</font_name>
<font_size>9</font_size>
- <x>2412</x>
- <y>1147</y>
+ <x>2588</x>
+ <y>1117</y>
<color>
<r>128</r>
<g>128</g>
@@ -14809,7 +15081,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>239</word_id>
+ <word_id>256</word_id>
<id>260</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14842,7 +15114,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>240</word_id>
+ <word_id>257</word_id>
<id>261</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14908,7 +15180,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>237</word_id>
+ <word_id>254</word_id>
<id>263</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14941,7 +15213,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>86</word_id>
+ <word_id>90</word_id>
<id>264</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -14974,7 +15246,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>84</word_id>
+ <word_id>88</word_id>
<id>265</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15007,7 +15279,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>106</word_id>
+ <word_id>112</word_id>
<id>266</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15040,7 +15312,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>108</word_id>
+ <word_id>114</word_id>
<id>267</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15073,7 +15345,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>165</word_id>
+ <word_id>173</word_id>
<id>268</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15138,8 +15410,8 @@
<width>121</width>
<font_name>맑은 고딕</font_name>
<font_size>9</font_size>
- <x>2148</x>
- <y>1649</y>
+ <x>2324</x>
+ <y>1619</y>
<color>
<r>128</r>
<g>128</g>
@@ -15221,7 +15493,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>237</word_id>
+ <word_id>254</word_id>
<id>271</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15286,7 +15558,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>151</word_id>
+ <word_id>157</word_id>
<id>272</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15319,7 +15591,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>204</word_id>
+ <word_id>215</word_id>
<id>273</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15352,7 +15624,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>216</word_id>
+ <word_id>233</word_id>
<id>274</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15385,7 +15657,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>136</word_id>
+ <word_id>144</word_id>
<id>275</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15418,7 +15690,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>46</word_id>
+ <word_id>45</word_id>
<id>276</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15451,7 +15723,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>223</word_id>
+ <word_id>240</word_id>
<id>277</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15484,7 +15756,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>183</word_id>
+ <word_id>194</word_id>
<id>278</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15517,7 +15789,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>52</word_id>
+ <word_id>53</word_id>
<id>279</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15550,7 +15822,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>162</word_id>
+ <word_id>171</word_id>
<id>280</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15583,7 +15855,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>68</word_id>
+ <word_id>69</word_id>
<id>281</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15648,7 +15920,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>79</word_id>
+ <word_id>83</word_id>
<id>282</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15681,7 +15953,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>110</word_id>
+ <word_id>116</word_id>
<id>283</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15714,7 +15986,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>88</word_id>
+ <word_id>92</word_id>
<id>284</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15747,7 +16019,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>160</word_id>
+ <word_id>168</word_id>
<id>285</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15780,7 +16052,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>218</word_id>
+ <word_id>234</word_id>
<id>286</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15813,7 +16085,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>226</word_id>
+ <word_id>243</word_id>
<id>287</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15846,7 +16118,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>81</word_id>
+ <word_id>85</word_id>
<id>288</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15879,7 +16151,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>139</word_id>
+ <word_id>146</word_id>
<id>289</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15912,7 +16184,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>78</word_id>
+ <word_id>82</word_id>
<id>290</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15945,7 +16217,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>184</word_id>
+ <word_id>195</word_id>
<id>291</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -15978,7 +16250,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>185</word_id>
+ <word_id>196</word_id>
<id>292</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16011,7 +16283,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>225</word_id>
+ <word_id>242</word_id>
<id>293</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16044,7 +16316,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>224</word_id>
+ <word_id>241</word_id>
<id>294</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16092,8 +16364,8 @@
<width>-1</width>
<font_name>맑은 고딕</font_name>
<font_size>9</font_size>
- <x>1681</x>
- <y>1283</y>
+ <x>1857</x>
+ <y>1253</y>
<color>
<r>255</r>
<g>255</g>
@@ -16109,8 +16381,8 @@
<width>133</width>
<font_name>맑은 고딕</font_name>
<font_size>9</font_size>
- <x>2148</x>
- <y>1010</y>
+ <x>2324</x>
+ <y>980</y>
<color>
<r>128</r>
<g>128</g>
@@ -16119,7 +16391,7 @@
<connections>
<relation>
<id>20</id>
- <source>41</source>
+ <source>42</source>
<target>36</target>
<source_xp>-1</source_xp>
<source_yp>-1</source_yp>
@@ -16148,7 +16420,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>147</word_id>
+ <word_id>154</word_id>
<id>295</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16182,7 +16454,7 @@
</normal_column>
<normal_column>
<id>296</id>
- <referenced_column>355</referenced_column>
+ <referenced_column>371</referenced_column>
<relation>20</relation>
<description></description>
<unique_key_name></unique_key_name>
@@ -16215,7 +16487,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>148</word_id>
+ <word_id>155</word_id>
<id>297</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16248,7 +16520,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>149</word_id>
+ <word_id>156</word_id>
<id>298</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16281,7 +16553,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>146</word_id>
+ <word_id>153</word_id>
<id>299</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16347,7 +16619,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>164</word_id>
+ <word_id>172</word_id>
<id>301</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16413,7 +16685,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>213</word_id>
+ <word_id>228</word_id>
<id>303</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16446,7 +16718,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>182</word_id>
+ <word_id>193</word_id>
<id>304</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16479,7 +16751,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>237</word_id>
+ <word_id>254</word_id>
<id>305</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16512,7 +16784,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>142</word_id>
+ <word_id>149</word_id>
<id>306</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16545,7 +16817,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>143</word_id>
+ <word_id>150</word_id>
<id>307</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16578,7 +16850,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>144</word_id>
+ <word_id>151</word_id>
<id>308</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16611,7 +16883,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>145</word_id>
+ <word_id>152</word_id>
<id>309</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16644,7 +16916,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>165</word_id>
+ <word_id>173</word_id>
<id>310</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16710,7 +16982,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>141</word_id>
+ <word_id>148</word_id>
<id>312</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16743,7 +17015,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>211</word_id>
+ <word_id>226</word_id>
<id>313</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16776,7 +17048,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>209</word_id>
+ <word_id>224</word_id>
<id>314</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16809,7 +17081,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>86</word_id>
+ <word_id>90</word_id>
<id>315</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16842,7 +17114,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>84</word_id>
+ <word_id>88</word_id>
<id>316</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16875,7 +17147,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>106</word_id>
+ <word_id>112</word_id>
<id>317</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -16908,7 +17180,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>108</word_id>
+ <word_id>114</word_id>
<id>318</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17107,7 +17379,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>231</word_id>
+ <word_id>248</word_id>
<id>322</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17208,7 +17480,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>87</word_id>
+ <word_id>91</word_id>
<id>325</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17241,7 +17513,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>85</word_id>
+ <word_id>89</word_id>
<id>326</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17330,6 +17602,12 @@
<normal_column>
<id>327</id>
<referenced_column>342</referenced_column>
+ <referenced_column>342</referenced_column>
+ <referenced_column>342</referenced_column>
+ <referenced_column>342</referenced_column>
+ <relation>22</relation>
+ <relation>22</relation>
+ <relation>22</relation>
<relation>22</relation>
<description></description>
<unique_key_name></unique_key_name>
@@ -17362,7 +17640,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>179</word_id>
+ <word_id>190</word_id>
<id>328</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17395,7 +17673,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>180</word_id>
+ <word_id>191</word_id>
<id>329</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17461,7 +17739,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>87</word_id>
+ <word_id>91</word_id>
<id>331</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17494,7 +17772,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>85</word_id>
+ <word_id>89</word_id>
<id>332</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17527,7 +17805,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>107</word_id>
+ <word_id>113</word_id>
<id>333</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17560,7 +17838,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>109</word_id>
+ <word_id>115</word_id>
<id>334</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17625,7 +17903,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>195</word_id>
+ <word_id>207</word_id>
<id>335</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17658,7 +17936,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>198</word_id>
+ <word_id>210</word_id>
<id>336</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17691,7 +17969,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>199</word_id>
+ <word_id>211</word_id>
<id>337</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17724,7 +18002,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>197</word_id>
+ <word_id>209</word_id>
<id>338</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17757,7 +18035,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>201</word_id>
+ <word_id>213</word_id>
<id>339</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17790,7 +18068,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>200</word_id>
+ <word_id>212</word_id>
<id>340</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17823,7 +18101,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>196</word_id>
+ <word_id>208</word_id>
<id>341</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17915,7 +18193,7 @@
<option></option>
<columns>
<normal_column>
- <word_id>133</word_id>
+ <word_id>139</word_id>
<id>342</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -17982,7 +18260,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>131</word_id>
+ <word_id>136</word_id>
<id>344</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -18015,7 +18293,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>134</word_id>
+ <word_id>140</word_id>
<id>345</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -18048,7 +18326,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>127</word_id>
+ <word_id>133</word_id>
<id>346</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -18081,7 +18359,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>187</word_id>
+ <word_id>198</word_id>
<id>347</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -18114,7 +18392,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>178</word_id>
+ <word_id>189</word_id>
<id>348</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -18147,7 +18425,7 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>128</word_id>
+ <word_id>134</word_id>
<id>349</id>
<description></description>
<unique_key_name></unique_key_name>
@@ -18180,8 +18458,403 @@
</sequence>
</normal_column>
<normal_column>
+ <word_id>255</word_id>
+ <id>350</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>varchar(n)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>91</word_id>
+ <id>351</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>timestamp</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>89</word_id>
+ <id>352</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>varchar(n)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>113</word_id>
+ <id>353</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>timestamp</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>115</word_id>
+ <id>354</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>varchar(n)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ </columns>
+ <indexes>
+ </indexes>
+ <complex_unique_key_list>
+ </complex_unique_key_list>
+ <table_properties>
+ <schema>public</schema>
+ <without_oids>true</without_oids>
+ </table_properties>
+ </table>
+ <table>
+ <id>41</id>
+ <height>380</height>
+ <width>225</width>
+ <font_name>맑은 고딕</font_name>
+ <font_size>9</font_size>
+ <x>2652</x>
+ <y>2436</y>
+ <color>
+ <r>255</r>
+ <g>128</g>
+ <b>255</b>
+ </color>
+ <connections>
+ </connections>
+ <physical_name>comtnsyslog</physical_name>
+ <logical_name>시스템정보</logical_name>
+ <description>시스템정보</description>
+ <constraint></constraint>
+ <primary_key_name>comtnsyslog_pkey</primary_key_name>
+ <option></option>
+ <columns>
+ <normal_column>
+ <word_id>203</word_id>
+ <id>355</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>varchar(n)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>true</not_null>
+ <primary_key>true</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>109</word_id>
+ <id>356</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>character(n)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>107</word_id>
+ <id>357</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>character(n)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>160</word_id>
+ <id>358</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>timestamp</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>219</word_id>
+ <id>359</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>varchar(n)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>216</word_id>
+ <id>360</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>varchar(n)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
<word_id>238</word_id>
- <id>350</id>
+ <id>361</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18213,13 +18886,13 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>87</word_id>
- <id>351</id>
+ <word_id>231</word_id>
+ <id>362</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
<physical_name></physical_name>
- <type>timestamp</type>
+ <type>varchar(n)</type>
<constraint></constraint>
<default_value></default_value>
<auto_increment>false</auto_increment>
@@ -18246,8 +18919,8 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>85</word_id>
- <id>352</id>
+ <word_id>143</word_id>
+ <id>363</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18279,13 +18952,13 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>107</word_id>
- <id>353</id>
+ <word_id>181</word_id>
+ <id>364</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
<physical_name></physical_name>
- <type>timestamp</type>
+ <type>character(n)</type>
<constraint></constraint>
<default_value></default_value>
<auto_increment>false</auto_increment>
@@ -18312,8 +18985,41 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>109</word_id>
- <id>354</id>
+ <word_id>178</word_id>
+ <id>365</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>numeric(p)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>184</word_id>
+ <id>366</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18344,6 +19050,138 @@
<decimal_size>0</decimal_size>
</sequence>
</normal_column>
+ <normal_column>
+ <word_id>220</word_id>
+ <id>367</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>character(n)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>76</word_id>
+ <id>368</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>char</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>71</word_id>
+ <id>369</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>numeric(p)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
+ <normal_column>
+ <word_id>73</word_id>
+ <id>370</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>character(n)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
</columns>
<indexes>
</indexes>
@@ -18355,13 +19193,13 @@
</table_properties>
</table>
<table>
- <id>41</id>
+ <id>42</id>
<height>-1</height>
<width>-1</width>
<font_name>맑은 고딕</font_name>
<font_size>9</font_size>
- <x>1825</x>
- <y>1044</y>
+ <x>2001</x>
+ <y>1014</y>
<color>
<r>128</r>
<g>128</g>
@@ -18378,7 +19216,7 @@
<columns>
<normal_column>
<word_id>20</word_id>
- <id>355</id>
+ <id>371</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18411,7 +19249,7 @@
</normal_column>
<normal_column>
<word_id>22</word_id>
- <id>356</id>
+ <id>372</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18444,7 +19282,7 @@
</normal_column>
<normal_column>
<word_id>21</word_id>
- <id>357</id>
+ <id>373</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18477,7 +19315,7 @@
</normal_column>
<normal_column>
<word_id>23</word_id>
- <id>358</id>
+ <id>374</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18509,8 +19347,8 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>190</word_id>
- <id>359</id>
+ <word_id>201</word_id>
+ <id>375</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18542,8 +19380,8 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>75</word_id>
- <id>360</id>
+ <word_id>79</word_id>
+ <id>376</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18576,7 +19414,7 @@
</normal_column>
<normal_column>
<word_id>11</word_id>
- <id>361</id>
+ <id>377</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18609,7 +19447,7 @@
</normal_column>
<normal_column>
<word_id>12</word_id>
- <id>362</id>
+ <id>378</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18641,8 +19479,8 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>237</word_id>
- <id>363</id>
+ <word_id>254</word_id>
+ <id>379</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18674,8 +19512,8 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>84</word_id>
- <id>364</id>
+ <word_id>88</word_id>
+ <id>380</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18707,8 +19545,8 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>86</word_id>
- <id>365</id>
+ <word_id>90</word_id>
+ <id>381</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18740,8 +19578,8 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>108</word_id>
- <id>366</id>
+ <word_id>114</word_id>
+ <id>382</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18773,8 +19611,8 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>106</word_id>
- <id>367</id>
+ <word_id>112</word_id>
+ <id>383</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18807,7 +19645,7 @@
</normal_column>
<normal_column>
<word_id>26</word_id>
- <id>368</id>
+ <id>384</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18840,7 +19678,7 @@
</normal_column>
<normal_column>
<word_id>25</word_id>
- <id>369</id>
+ <id>385</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18872,8 +19710,8 @@
</sequence>
</normal_column>
<normal_column>
- <word_id>212</word_id>
- <id>370</id>
+ <word_id>227</word_id>
+ <id>386</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18906,7 +19744,7 @@
</normal_column>
<normal_column>
<word_id>5</word_id>
- <id>371</id>
+ <id>387</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18939,7 +19777,7 @@
</normal_column>
<normal_column>
<word_id>19</word_id>
- <id>372</id>
+ <id>388</id>
<description></description>
<unique_key_name></unique_key_name>
<logical_name></logical_name>
@@ -18970,6 +19808,39 @@
<decimal_size>0</decimal_size>
</sequence>
</normal_column>
+ <normal_column>
+ <word_id>51</word_id>
+ <id>389</id>
+ <description></description>
+ <unique_key_name></unique_key_name>
+ <logical_name></logical_name>
+ <physical_name></physical_name>
+ <type>character(n)</type>
+ <constraint></constraint>
+ <default_value></default_value>
+ <auto_increment>false</auto_increment>
+ <foreign_key>false</foreign_key>
+ <not_null>false</not_null>
+ <primary_key>false</primary_key>
+ <unique_key>false</unique_key>
+ <character_set></character_set>
+ <collation></collation>
+ <sequence>
+ <name></name>
+ <schema></schema>
+ <increment></increment>
+ <min_value></min_value>
+ <max_value></max_value>
+ <start></start>
+ <cache></cache>
+ <nocache>false</nocache>
+ <cycle>false</cycle>
+ <order>false</order>
+ <description></description>
+ <data_type></data_type>
+ <decimal_size>0</decimal_size>
+ </sequence>
+ </normal_column>
</columns>
<indexes>
</indexes>
Property changes on: base3.10
___________________________________________________________________
Added: svn:ignore
+ target
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?