// 娣诲姞xss鏀诲嚮闃插尽鏂规硶start*********************************** SecLib = window.SecLib || {}; SecLib.XSSHelper = { "handle" : function(data, encType) { var args = arguments; if (args.length < 1) { throw new error("No arguments provided"); } if (args.length === 1) { return com.iflytek.seclib.Handler[com.iflytek.seclib.EncType.HTML] (data); } var dataEncoded = data; // iterate all encoding types and do encoding accordingly for (var i = 1; i < args.length; i++) { var handler = com.iflytek.seclib.Handler[args[i].toUpperCase()]; dataEncoded = handler(dataEncoded); } return dataEncoded; } }; // define an alias SecLib.xss=SecLib.XSSHelper; com = window.com || {}; com.iflytek = window.com.iflytek || {}; com.iflytek.seclib = { "EncType" : { "HTML" : "HTML", "JS" : "JS", "URL" : "URL", "URLPARAM" : "URLPARAM", "CSS" : "CSS" }, "Handler" : { "encode" : function(data, escapes) { var charArr = data.split(""); var resultArr = []; for ( var idx = 0;idx < charArr.length;idx++ ) { var char = charArr[idx]; var charCode = char.charCodeAt(); if (charCode <= 0xFF) { resultArr.push(escapes[charCode]); } else { resultArr.push(char); } } var result = resultArr.join(""); return result; }, "HTML" : function(data) { return com.iflytek.seclib.Handler.encode(data, com.iflytek.seclib.htmlEscapes); }, "JS" : function(data) { return com.iflytek.seclib.Handler.encode(data, com.iflytek.seclib.jsEscapes); }, "URLPARAM" : function(data) { return com.iflytek.seclib.Handler.encode(data, com.iflytek.seclib.urlParamEscapes); }, "CSS" : function(data) { return com.iflytek.seclib.Handler.encode(data, com.iflytek.seclib.cssEscapes); }, "URL" : function(data) { var protocol = com.iflytek.seclib._getProtocolOfUrl(data); if (com.iflytek.seclib.allowedProtocols.indexOf(protocol) < 0) { // the protocol is not in allowed list throw { "Exception" : "Security", "Message" : "The protocol of URL " + data + " is not allowed" }; } else { return data; } } }, "allowedProtocols" : [ "http:", "https:" ], "htmlEscapes" : [ "�", "", "", "", "", "", "", "", "", " ", " ", " ", " ", " ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", " ", "!", """, "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "", "€", "", "‚", "ƒ", "„", "…", "†", "‡", "ˆ", "‰", "Š", "‹", "Œ", "", "Ž", "", "", "‘", "’", "“", "”", "•", "–", "—", "˜", "™", "š", "›", "œ", "", "ž", "Ÿ", " ", "¡", "¢", "£", "¤", "¥", "¦", "§", "¨", "©", "ª", "«", "¬", "­", "®", "¯", "°", "±", "²", "³", "´", "µ", "¶", "·", "¸", "¹", "º", "»", "¼", "½", "¾", "¿", "À", "Á", "Â", "Ã", "Ä", "Å", "Æ", "Ç", "È", "É", "Ê", "Ë", "Ì", "Í", "Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô", "Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û", "Ü", "Ý", "Þ", "ß", "à", "á", "â", "ã", "ä", "å", "æ", "ç", "è", "é", "ê", "ë", "ì", "í", "î", "ï", "ð", "ñ", "ò", "ó", "ô", "õ", "ö", "÷", "ø", "ù", "ú", "û", "ü", "ý", "þ", "ÿ" ], "jsEscapes" : [ "\\x00", "\\x01", "\\x02", "\\x03", "\\x04", "\\x05", "\\x06", "\\x07", "\\x08", "\\x09", "\\x0A", "\\x0B", "\\x0C", "\\x0D", "\\x0E", "\\x0F", "\\x10", "\\x11", "\\x12", "\\x13", "\\x14", "\\x15", "\\x16", "\\x17", "\\x18", "\\x19", "\\x1A", "\\x1B", "\\x1C", "\\x1D", "\\x1E", "\\x1F", "\\x20", "\\x21", "\\x22", "\\x23", "\\x24", "\\x25", "\\x26", "\\x27", "\\x28", "\\x29", "\\x2A", "\\x2B", "\\x2C", "\\x2D", "\\x2E", "\\x2F", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "\\x3A", "\\x3B", "\\x3C", "\\x3D", "\\x3E", "\\x3F", "\\x40", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "\\x5B", "\\x5C", "\\x5D", "\\x5E", "\\x5F", "\\x60", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "\\x7B", "\\x7C", "\\x7D", "\\x7E", "\\x7F", "\\x80", "\\x81", "\\x82", "\\x83", "\\x84", "\\x85", "\\x86", "\\x87", "\\x88", "\\x89", "\\x8A", "\\x8B", "\\x8C", "\\x8D", "\\x8E", "\\x8F", "\\x90", "\\x91", "\\x92", "\\x93", "\\x94", "\\x95", "\\x96", "\\x97", "\\x98", "\\x99", "\\x9A", "\\x9B", "\\x9C", "\\x9D", "\\x9E", "\\x9F", "\\xA0", "\\xA1", "\\xA2", "\\xA3", "\\xA4", "\\xA5", "\\xA6", "\\xA7", "\\xA8", "\\xA9", "\\xAA", "\\xAB", "\\xAC", "\\xAD", "\\xAE", "\\xAF", "\\xB0", "\\xB1", "\\xB2", "\\xB3", "\\xB4", "\\xB5", "\\xB6", "\\xB7", "\\xB8", "\\xB9", "\\xBA", "\\xBB", "\\xBC", "\\xBD", "\\xBE", "\\xBF", "\\xC0", "\\xC1", "\\xC2", "\\xC3", "\\xC4", "\\xC5", "\\xC6", "\\xC7", "\\xC8", "\\xC9", "\\xCA", "\\xCB", "\\xCC", "\\xCD", "\\xCE", "\\xCF", "\\xD0", "\\xD1", "\\xD2", "\\xD3", "\\xD4", "\\xD5", "\\xD6", "\\xD7", "\\xD8", "\\xD9", "\\xDA", "\\xDB", "\\xDC", "\\xDD", "\\xDE", "\\xDF", "\\xE0", "\\xE1", "\\xE2", "\\xE3", "\\xE4", "\\xE5", "\\xE6", "\\xE7", "\\xE8", "\\xE9", "\\xEA", "\\xEB", "\\xEC", "\\xED", "\\xEE", "\\xEF", "\\xF0", "\\xF1", "\\xF2", "\\xF3", "\\xF4", "\\xF5", "\\xF6", "\\xF7", "\\xF8", "\\xF9", "\\xFA", "\\xFB", "\\xFC", "\\xFD", "\\xFE", "\\xFF" ], "urlParamEscapes" : [ "%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07", "%08", "%09", "%0A", "%0B", "%0C", "%0D", "%0E", "%0F", "%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17", "%18", "%19", "%1A", "%1B", "%1C", "%1D", "%1E", "%1F", "%20", "%21", "%22", "%23", "%24", "%25", "%26", "%27", "%28", "%29", "%2A", "%2B", "%2C", "-", ".", "%2F", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "%3A", "%3B", "%3C", "%3D", "%3E", "%3F", "%40", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "%5B", "%5C", "%5D", "%5E", "_", "%60", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "%7B", "%7C", "%7D", "~", "%7F", "%80", "%81", "%82", "%83", "%84", "%85", "%86", "%87", "%88", "%89", "%8A", "%8B", "%8C", "%8D", "%8E", "%8F", "%90", "%91", "%92", "%93", "%94", "%95", "%96", "%97", "%98", "%99", "%9A", "%9B", "%9C", "%9D", "%9E", "%9F", "%A0", "%A1", "%A2", "%A3", "%A4", "%A5", "%A6", "%A7", "%A8", "%A9", "%AA", "%AB", "%AC", "%AD", "%AE", "%AF", "%B0", "%B1", "%B2", "%B3", "%B4", "%B5", "%B6", "%B7", "%B8", "%B9", "%BA", "%BB", "%BC", "%BD", "%BE", "%BF", "%C0", "%C1", "%C2", "%C3", "%C4", "%C5", "%C6", "%C7", "%C8", "%C9", "%CA", "%CB", "%CC", "%CD", "%CE", "%CF", "%D0", "%D1", "%D2", "%D3", "%D4", "%D5", "%D6", "%D7", "%D8", "%D9", "%DA", "%DB", "%DC", "%DD", "%DE", "%DF", "%E0", "%E1", "%E2", "%E3", "%E4", "%E5", "%E6", "%E7", "%E8", "%E9", "%EA", "%EB", "%EC", "%ED", "%EE", "%EF", "%F0", "%F1", "%F2", "%F3", "%F4", "%F5", "%F6", "%F7", "%F8", "%F9", "%FA", "%FB", "%FC", "%FD", "%FE", "%FF" ], "cssEscapes" : [ "\\00", "\\01", "\\02", "\\03", "\\04", "\\05", "\\06", "\\07", "\\08", "\\09", "\\0A", "\\0B", "\\0C", "\\0D", "\\0E", "\\0F", "\\10", "\\11", "\\12", "\\13", "\\14", "\\15", "\\16", "\\17", "\\18", "\\19", "\\1A", "\\1B", "\\1C", "\\1D", "\\1E", "\\1F", "\\20", "\\21", "\\22", "\\23", "\\24", "\\25", "\\26", "\\27", "\\28", "\\29", "\\2A", "\\2B", "\\2C", "\\2D", "\\2E", "\\2F", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "\\3A", "\\3B", "\\3C", "\\3D", "\\3E", "\\3F", "\\40", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "\\5B", "\\5C", "\\5D", "\\5E", "\\5F", "\\60", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "\\7B", "\\7C", "\\7D", "\\7E", "\\7F", "\\80", "\\81", "\\82", "\\83", "\\84", "\\85", "\\86", "\\87", "\\88", "\\89", "\\8A", "\\8B", "\\8C", "\\8D", "\\8E", "\\8F", "\\90", "\\91", "\\92", "\\93", "\\94", "\\95", "\\96", "\\97", "\\98", "\\99", "\\9A", "\\9B", "\\9C", "\\9D", "\\9E", "\\9F", "\\A0", "\\A1", "\\A2", "\\A3", "\\A4", "\\A5", "\\A6", "\\A7", "\\A8", "\\A9", "\\AA", "\\AB", "\\AC", "\\AD", "\\AE", "\\AF", "\\B0", "\\B1", "\\B2", "\\B3", "\\B4", "\\B5", "\\B6", "\\B7", "\\B8", "\\B9", "\\BA", "\\BB", "\\BC", "\\BD", "\\BE", "\\BF", "\\C0", "\\C1", "\\C2", "\\C3", "\\C4", "\\C5", "\\C6", "\\C7", "\\C8", "\\C9", "\\CA", "\\CB", "\\CC", "\\CD", "\\CE", "\\CF", "\\D0", "\\D1", "\\D2", "\\D3", "\\D4", "\\D5", "\\D6", "\\D7", "\\D8", "\\D9", "\\DA", "\\DB", "\\DC", "\\DD", "\\DE", "\\DF", "\\E0", "\\E1", "\\E2", "\\E3", "\\E4", "\\E5", "\\E6", "\\E7", "\\E8", "\\E9", "\\EA", "\\EB", "\\EC", "\\ED", "\\EE", "\\EF", "\\F0", "\\F1", "\\F2", "\\F3", "\\F4", "\\F5", "\\F6", "\\F7", "\\F8", "\\F9", "\\FA", "\\FB", "\\FC", "\\FD", "\\FE", "\\FF" ], }; com.iflytek.seclib._getProtocolOfUrl = (function() { var a; return function(url) { if (!a) a = document.createElement('a'); a.href = url; return a.protocol; }; })(); // *****************xss闃插尽鏀诲嚮鏂规硶end**************** var JsTreeUtil = function() { this.ROOT_NODE_TYPE = "ROOT"; var VIRTUAL_ROOT_NODE_ID = 'VirtualRootNode'; function constructTreeNode(node) { var attrs = node['attributes'] || {}; jQuery.extend(attrs, { id : node.id, menuType : node.type || '', text : SecLib.xss.handle(node.text, "HTML"), fatherId : node.fatherId, leave: node.leave, state: node.state || '' }); return { attributes : attrs, data : {title: SecLib.xss.handle(node.text, "HTML"), icon: node.icon}, children : recursionGetChildrenNodes(node), state: node.state }; } function recursionGetChildrenNodes(node) { if(!node.children || node.children.length == 0) { return new Array(); } var childrenArray = node.children || []; var resultArray = new Array(); var nodeId = node.id; for(var i = 0; i < childrenArray.length; i++){ var isLeave = 0;// 鏄惁鍙跺瓙缁撶偣 if(!childrenArray[i].children || childrenArray[i].children.length == 0){ isLeave = 1; } childrenArray[i].fatherId = childrenArray[i].fatherId || nodeId; childrenArray[i].leave = isLeave; resultArray[resultArray.length] = constructTreeNode(childrenArray[i]); } return resultArray; } function constructJsonStr4Tree(rootNode){ if(rootNode == null){ return new Array(); } var jsonArray = new Array(); if(!(jQuery.isArray(rootNode))) { rootNode = [ rootNode ]; } var isExpand = rootNode.length == 1; for(var i = 0; i < rootNode.length; i++) { var n = rootNode[i], attrs = n['attributes'] || {}; jQuery.extend(attrs, { id : n.id, text : SecLib.xss.handle(n.text, "HTML"), menuType : ROOT_NODE_TYPE }); jsonArray[i] = { attributes : attrs, state: (n.state || (isExpand? "open" : "closed")), //榛樿灞曞紑鏍硅妭鐐 data : { title: SecLib.xss.handle(n.text, "HTML"), icon: n.icon || '' }, leave : 0 }; if(n.children && n.children.length > 0) { jsonArray[i]['children'] = recursionGetChildrenNodes(n); }else{ jsonArray[i].state = 'leaf'; } } return jsonArray; } function queryNodeByNodeName(treeid, nodeid, queryNodeName, menuType){ var childrenArray = jQuery.tree_reference(treeid).children(jQuery('#' + nodeid)); if(childrenArray == null || childrenArray.length == 0) { return null; } for(var i = 0; i < childrenArray.length; i++) { var node = jQuery.tree_reference(treeid).get_node(jQuery(childrenArray[i])); var menuTypeValid = !menuType || menuType == node.attr('menuType'); //鑺傜偣绫诲瀷闄愬埗 if(menuTypeValid && node.attr('text').indexOf(queryNodeName) >= 0) { return node.attr('id'); }else{ var nodeid = queryNodeByNodeName(treeid, node.attr('id'), queryNodeName, menuType); if(nodeid != null) { return nodeid; } } } return null; } function addChildrenIds(treeId, parentNodes, nodeIds, breakSearchNodeType) { if (parentNodes == null || parentNodes.length == 0) { return; } var currents = []; for (var j = 0; j < parentNodes.length; j++) { if(breakSearchNodeType && jQuery(parentNodes[j]).attr('menuType') == breakSearchNodeType) { //濡傛灉绫诲瀷鏄痓reakSearchNodeType鍒欏仠姝㈡悳绱 continue; } var children = jQuery.tree_reference(treeId).children(parentNodes[j]); if (children && children.length > 0) { for (var i = 0; i < children.length; i++) { nodeIds.push(jQuery(children[i]).attr("id")); currents.push(children[i]); } } } addChildrenIds(treeId, currents, nodeIds, breakSearchNodeType); } function addChildrenNodes(treeId, parentNodes, nodeIds) { if (parentNodes == null || parentNodes.length == 0) { return; } var currents = []; for (var j = 0; j < parentNodes.length; j++) { var children = jQuery.tree_reference(treeId).children(parentNodes[j]); if (children && children.length > 0) { for (var i = 0; i < children.length; i++) { nodeIds.push(JsTreeUtil.getJsTreeNode(jQuery(children[i]))); currents.push(children[i]); } } } addChildrenNodes(treeId, currents, nodeIds); } function destroyTree(treeId) { try{ if(jQuery.tree_reference(treeId)) { jQuery.tree_reference(treeId).destroy(); } }catch(e){} } function initJsTreeEvents(uiconfigs, treeId) { //鑷畾涔夌殑涓€涓牱寮 if(uiconfigs && uiconfigs['theme_name'] == 'gray') { var lastMouseOverNodeId = null; jQuery("#" + treeId).mouseover(function(e){ var target = jQuery(e.target); if(target.is('a')) { var node = target.parent(); if(node.attr('id') == lastMouseOverNodeId) { return; } if(lastMouseOverNodeId) { jQuery("#" + treeId).find('#' + lastMouseOverNodeId).removeClass('tree-node-hover'); } lastMouseOverNodeId = node.attr('id'); node.addClass('tree-node-hover'); } }).mouseout(function(){ if(lastMouseOverNodeId) { jQuery("#" + treeId).find('#' + lastMouseOverNodeId).removeClass('tree-node-hover'); } }).click(function(e){ var target = jQuery(e.target); if(target.is('a')) { jQuery("#" + treeId).find('.tree-node-clicked').removeClass('tree-node-clicked'); target.parent().addClass('tree-node-clicked'); }else if(target.hasClass('node-icon')) { target.parent().click(); } }); } } return { //杩欓噷鏍硅妭鐐箁ootNode鏈夊嚑涓睘鎬э細id, text, children,fatherId //children 涓哄瓙鑺傜偣 //鍙傝BaseStaticTreeNode绫 //selected:false or Array宸查€夋嫨鐨勬暟鎹 getJsTree : function(treeId, rootNode, callbackFunc, rulesconfigs, uiconfigs,selected) { //濡傛灉宸茬粡瀛樺湪鐨勮瘽闇€瑕乨estroy鍘熷厛鐨勯偅涓紝鐒跺悗鍐嶅鍔 destroyTree(treeId); var jsonArray = constructJsonStr4Tree(rootNode); rulesconfigs = rulesconfigs||{}; if(!uiconfigs) uiconfigs= {}; if(!uiconfigs['theme_name']){ uiconfigs['theme_name'] = 'classic'; } if(!uiconfigs.context) { //榛樿涓嶆樉绀哄彸閿彍鍗 uiconfigs.context = []; } if(!callbackFunc) { callbackFunc = {}; } if(uiconfigs.theme_name == 'checkbox' && typeof callbackFunc.onchange != 'function') { callbackFunc.onchange = function(NODE, TREE_OBJ){ //榛樿checkbox onchange浜嬩欢 JsTreeUtil.checkboxTreeOnchange(NODE, TREE_OBJ); }; } jQuery("#" + treeId).tree({ data : { type : "json", json : jsonArray }, selected : selected, rules : rulesconfigs, ui : uiconfigs, callback : callbackFunc }); jQuery("#" + treeId).before('
'); jQuery("#" + treeId).append('
'); initJsTreeEvents(uiconfigs, treeId); }, ajaxTree: function(treeId, options){ //涓嶇紦瀛 jQuery.ajaxSetup({cache: false}); //濡傛灉宸茬粡瀛樺湪鐨勮瘽闇€瑕乨estroy鍘熷厛鐨勯偅涓紝鐒跺悗鍐嶅鍔 destroyTree(treeId); if(typeof options == 'string') { options = { url: options }; } var rootNodeId; if(options.root && options.root.id) { rootNodeId = options.root.id; }else{ rootNodeId = VIRTUAL_ROOT_NODE_ID; } var defaultOptions = { data: { type : "json", url: options.url, async: true, async_data : function (NODE, TREE_OBJ) { return { id : jQuery(NODE).attr("id") || rootNodeId, nodeType: jQuery(NODE).attr("menuType") }; } } }; options.callback = options.callback || {}; if(!(options.callback.onJSONdata)) { options.callback.onJSONdata = function(DATA,TREE_OBJ) { if(DATA.length == 0) { if( options.noDataFoundText) AppUtils.AlertBox(options.noDataFoundText); return []; } //杩斿洖鐨勬牸寮忎笌瀹為檯鏍戠敤鍒扮殑缁撴瀯鏈変簺涓嶅悓锛岃繖閲屽仛涓€涓嬭浆鎹 var children = []; for(var i = 0; i < DATA.length; i++) { var node = DATA[i]; node.state = node.state || 'closed'; children[children.length] = constructTreeNode(node); } if(options.root) { //濡傛灉璁剧疆浜嗘牴鑺傜偣鐨勮瘽鍒欐樉绀烘牴鑺傜偣 var root = options.root; if(typeof options.root == 'string') { root = { id: VIRTUAL_ROOT_NODE_ID, text: SecLib.xss.handle(options.root, "HTML") }; }else{ root.id = root.id || VIRTUAL_ROOT_NODE_ID; } if(TREE_OBJ.get_node(jQuery('#' + root.id)).length > 0) { //鏍硅妭鐐瑰凡鍔犺浇锛岃繖閲屽姞杞界殑涓嶆槸鏍硅妭鐐圭殑鏁版嵁锛岀洿鎺ヨ繑鍥炵殕鍙 return children; } return { attributes : {id : root.id, text : SecLib.xss.handle(root.text, "HTML"), menuType : ROOT_NODE_TYPE, fatherId : '' }, state: "open", //榛樿灞曞紑鏍硅妭鐐 data : SecLib.xss.handle(root.text, "HTML"), leave : 0, children: children }; } return children; }; } options.ui = options.ui || {}; if(!options.ui['theme_name']){ options.ui['theme_name'] = 'classic'; } if(options.isCheckboxTree) { options.ui['theme_name'] = 'checkbox'; options.followParent = options.followParent === false ? false : true; } if(!options.ui.context) { //榛樿涓嶆樉绀哄彸閿彍鍗 options.ui.context = []; } options.callback = options.callback || {}; if(options.ui.theme_name == 'checkbox' && typeof options.callback.onchange != 'function') { options.callback.onchange = function(NODE, TREE_OBJ){ //閫変腑鑺傜偣鏃讹紝瀛愯妭鐐逛笉閫変腑 if(options.followParent === false){ JsTreeUtil.singleCheckboxTreeOnchange(NODE, TREE_OBJ); }else{ //榛樿checkbox onchange浜嬩欢 JsTreeUtil.checkboxTreeOnchange(NODE, TREE_OBJ); } }; } jQuery("#" + treeId).tree(jQuery.extend(defaultOptions, options)); initJsTreeEvents(options.ui, treeId); }, debug : function(msg){ jQuery("#tree-debug-panel").append( msg + '
'); }, getJsTreeNode : function(node) { node = jQuery(node); var nodeType = node.attr('menuType'); return { id : node.attr('id'), type : nodeType, text : node.attr('text'), fatherId : node.attr('fatherId'), isRootNode : (ROOT_NODE_TYPE == nodeType) }; }, freshTree : function(treeId, nodeId, callback) { if(typeof callback == 'function') { jQuery.ajaxSetup({async: false}); } if(nodeId) { //濡傛灉鏄紓姝ヨ皟鐢ㄧ殑璇濓紝涓轰簡璁ヽallback淇濇寔鍦ㄨ皟鐢ㄥ悗鍙互鍥炶皟锛岃繖閲岄噰鐢ㄥ悓姝ユ柟寮 jQuery.tree_reference(treeId).refresh(jQuery('#' + nodeId)); }else{ jQuery.tree_reference(treeId).refresh(); } if(typeof callback == 'function') { jQuery.ajaxSetup({async: true}); callback(); } }, removeTreeNode : function(treeId, nodeId) { jQuery.tree_reference(treeId).remove('#' + nodeId); }, createTreeNode : function(treeId, nodeId, nodeText, nodeType, nodeFatherId) { if(typeof nodeId == 'object') { var existNode = JsTreeUtil.getNode(treeId, nodeId.id); if(existNode.length > 0) { //宸茬粡瀛樺湪锛屽垯涓嶆坊鍔 return; } if(!nodeId.fatherId) { alert('璇锋寚瀹氭坊鍔犺妭鐐圭殑鐖惰妭鐐癸紙灞炴€э細fatherId锛?); return; } var fatherNode = JsTreeUtil.getNode(treeId, nodeId.fatherId); if(fatherNode.length == 0) { alert('瑕佹坊鍔犵殑鐖惰妭鐐逛笉瀛樺湪锛岀埗鑺傜偣ID锛? + nodeId.fatherId); return; } var leaveAttr = jQuery(fatherNode[0]).attr('leave'); if(leaveAttr == '1') { //涓嶆槸鍙跺瓙缁撶偣浜 jQuery(fatherNode[0]).attr('leave', '0'); } jQuery.tree_reference(treeId).create(constructTreeNode(nodeId),jQuery(fatherNode[0])); }else { jQuery.tree_reference(treeId).create({ attributes : {id : nodeId, text : nodeText, menuType : nodeType, fatherId : nodeFatherId}, data : nodeText },jQuery('#' + nodeFatherId)); } }, openNode : function(treeId, nodeId) { jQuery.tree_reference(treeId).open_branch(jQuery('#' + nodeId)); }, openAllNode : function(treeId, nodeId) { var tree = jQuery.tree_reference(treeId); if(!tree) return; if (nodeId) { tree.open_all(jQuery('#' + nodeId)); } else { tree.open_all(); } }, getNode : function(treeId, nodeId) { return jQuery.tree_reference(treeId).get_node(jQuery('#' + nodeId)); }, selectNode : function(treeId, nodeId) { // jQuery('#' + treeId + ' #' + nodeId).children("a").trigger('click.jstree'); jQuery('#'+treeId+' li[id=\"'+nodeId+'\"]').children("a").click(); }, //杩欎釜鍑芥暟鍙兘鏄剧ず鍑烘潵锛屾暟鎹繕鏈夐棶棰橈紝鍙繚瀛樹簡绗竴涓暟鎹 selectNodes : function(treeId, nodeIds) { if (nodeIds && nodeIds.length > 0) { for(var i=0;i0){ ids+=','; } ids+='#'+nodeIds[i]; } jQuery.tree_reference(treeId).select_branch(jQuery(ids),true);*/ }, renameNode : function(treeId, nodeId, newName) { var node = JsTreeUtil.getNode(treeId, nodeId); node.attr('text', newName); node.find("a:first").get(0).innerHTML = newName; }, getSelectedNodeArray : function(treeId) { var tree = jQuery.tree_reference(treeId); if(tree.settings.rules.multiple) { var selected_arr = []; if(tree.settings.ui['theme_name'] == 'checkbox') { tree.container.find("a.checked").filter(":first-child").parent().each(function () { selected_arr.push(jQuery(this)); }); }else{ tree.container.find("a.clicked").filter(":first-child").parent().each(function () { selected_arr.push(jQuery(this)); }); } return selected_arr; } var selectedArray = jQuery.tree_reference(treeId).selected_arr; if(!selectedArray || selectedArray.length == 0) { var selectedObj = jQuery.tree_reference(treeId).selected; if(selectedObj) { selectedArray = [ selectedObj ]; } } return selectedArray || []; }, getSelectedNodeIdArray : function(treeId) { var nodeArray = JsTreeUtil.getSelectedNodeArray(treeId); if(!nodeArray) { return []; } var nodeIdArray = []; for(var i = 0; i < nodeArray.length; i++) { nodeIdArray[i] = nodeArray[i].attr('id'); } return nodeIdArray; }, getSelectedNodeTextArray : function(treeId) { var nodeArray = JsTreeUtil.getSelectedNodeArray(treeId); var nodeIdArray = []; for(var i = 0; i < nodeArray.length; i++) { nodeIdArray[i] = nodeArray[i].attr('text'); } return nodeIdArray; }, getNodesText : function(nodes) { var str = ''; for(var i = 0; i < nodes.length; i++) { if(i > 0) str += ','; str += nodes[i].attr('text'); } return str; }, getNodeIdArray : function(nodes) { var nodeIdArray = []; for(var i = 0; i < nodes.length; i++) { nodeIdArray[i] = nodes[i].attr('id'); } return nodeIdArray; }, getParentNodePath : function(treeId, nodeId, includeSelf) { var path = new Array(); if(includeSelf) { path.push(jQuery.tree_reference(treeId).get_node(jQuery('#' + nodeId)).attr('text')); } var parentnode = jQuery.tree_reference(treeId).parent(jQuery('#' + nodeId)); while(parentnode && parentnode.attr('fatherId') != '') { path.push(parentnode.attr('text')); parentnode = jQuery.tree_reference(treeId).parent(jQuery('#' + parentnode.attr('id'))); } var str = ''; for (var i = path.length - 1; i >= 0; i--) { str += path[i]; if(i > 0) { str += ' -> '; } }; return str; }, queryFirstNodeIdByNodeName : function(treeId, queryStr, menuType){ return queryNodeByNodeName(treeId, 'VirtualRootNode', queryStr, menuType); }, isSelected : function(treeId,nodeId){ return JsTreeUtil.getNode(treeId,nodeId).children("a:eq(0)").hasClass("clicked"); }, //寰楀埌绗﹀悎鏉′欢鐨勬墍鏈夎妭鐐筰d queryNodeIdsByNodeName : function(treeid, nodeid, queryNodeName, menuType){ var childrenArray = jQuery.tree_reference(treeid).children(jQuery('#' + nodeid)); if(childrenArray == null || childrenArray.length == 0) { return null; } var resultArray = []; for(var i = 0; i < childrenArray.length; i++) { var node = jQuery.tree_reference(treeid).get_node(jQuery(childrenArray[i])); var menuTypeValid =false; if( null == menuType || !menuType){ menuTypeValid = true; }else if(typeof menuType == 'string'){ menuTypeValid = !menuType || menuType == node.attr('menuType'); //鑺傜偣绫诲瀷闄愬埗 }else if(menuType.length){ menuTypeValid = menuType.indexOf(node.attr('menuType'))>=0; } if( menuTypeValid && node.attr('text').indexOf(queryNodeName) >= 0) { resultArray[resultArray.length]= node.attr('id'); } var nodeids = JsTreeUtil.queryNodeIdsByNodeName(treeid, node.attr('id'), queryNodeName, menuType); if(nodeids != null && nodeids.length!=0) { resultArray=resultArray.concat(nodeids); } } return resultArray; }, /** * 鍒ゆ柇childId鏄惁鏄痜atherId鐨勫瓙鑺傜偣 * includeSelf */ isChildNode : function(treeId, fatherId, childId,includeSelf) { if(includeSelf && fatherId==childId){ return true; } var parentnode = jQuery.tree_reference(treeId).parent(jQuery('#' + childId)); while(parentnode) { if(parentnode.attr('id') == fatherId){ return true; } } return false; }, /** * checkboxtree 閫変腑鑺傜偣鏃跺瓙鑺傜偣涓嶉€変腑 * @param NODE * @param TREE_OBJ * @return void */ singleCheckboxTreeOnchange: function(NODE, TREE_OBJ){ if(TREE_OBJ.settings.ui.theme_name == "checkbox") { var jQuerythis = jQuery(NODE).is("li") ? jQuery(NODE) : jQuery(NODE).parent(); if(jQuerythis.children("a.unchecked").size() == 0) { //TREE_OBJ.container.find("a").addClass("unchecked"); } jQuerythis.children("a").removeClass("clicked"); if(jQuerythis.children("a").hasClass("checked")) { jQuerythis.find("li").andSelf().children("a").removeClass("checked undetermined").addClass("unchecked"); var state = 0; } else { jQuerythis.children("a").removeClass("unchecked undetermined").addClass("checked"); var state = 1; } /*jQuerythis.parents("li").each(function () { if(state == 1) { if(jQuery(this).find("a.unchecked, a.undetermined").size() - 1 > 0) { jQuery(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined"); return false; } else jQuery(this).children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked"); } else { if(jQuery(this).find("a.checked, a.undetermined").size() - 1 > 0) { jQuery(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined"); return false; } else jQuery(this).children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked"); } });*/ } }, /** * theme_name == "checkbox"鏃讹紝榛樿鐨刼nchange鏂规硶 * */ checkboxTreeOnchange : function(NODE, TREE_OBJ) { if(TREE_OBJ.settings.ui.theme_name == "checkbox") { var jQuerythis = jQuery(NODE).is("li") ? jQuery(NODE) : jQuery(NODE).parent(); if(jQuerythis.children("a.unchecked").size() == 0) { TREE_OBJ.container.find("a").addClass("unchecked"); } jQuerythis.children("a").removeClass("clicked"); if(jQuerythis.children("a").hasClass("checked")) { jQuerythis.find("li").andSelf().children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked"); var state = 0; } else { jQuerythis.find("li").andSelf().children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked"); var state = 1; } jQuerythis.parents("li").each(function () { if(state == 1) { if(jQuery(this).find("a.unchecked, a.undetermined").size() - 1 > 0) { jQuery(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined"); return false; } else jQuery(this).children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked"); } else { if(jQuery(this).find("a.checked, a.undetermined").size() - 1 > 0) { jQuery(this).parents("li").andSelf().children("a").removeClass("unchecked").removeClass("checked").addClass("undetermined"); return false; } else jQuery(this).children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked"); } }); } }, /** * 閫変腑checkox鍚庤Е鍙戠殑鑺傜偣鏍峰紡锛屾敞鎰忥細杩欓噷鐨勮妭鐐逛細褰卞搷鐖惰妭鐐圭殑鏍峰紡锛岃€宑heckboxTreeOnchange鏂规硶涓嶄細 * @param NODE * @param TREE_OBJ * @returns */ checkboxTreeOnchangeAll: function(NODE, TREE_OBJ){ if(TREE_OBJ.settings.ui.theme_name == "checkbox") { var $this = jQuery(NODE).is("li") ? jQuery(NODE) : jQuery(NODE).parent(); if($this.children("a").hasClass("checked")) { if ($this.find("a.checked").size() > 1) { $this.find("li").andSelf().children("a").removeClass("checked").removeClass("undetermined").addClass("unchecked"); } else { $this.children("a").removeClass("checked").addClass("unchecked"); $this.parents("li").each(function () { if(jQuery(this).find("a.checked").size() == 0) { jQuery(this).children("a").removeClass("undetermined").addClass("unchecked"); } }); } } else { $this.find("li").andSelf().children("a").removeClass("unchecked").removeClass("undetermined").addClass("checked"); $this.parents("li").each(function () { if(jQuery(this).find("a.checked").size() > 0 && !jQuery(this).children("a").hasClass("checked")) { jQuery(this).children("a").removeClass("unchecked").addClass("undetermined"); } }); } } }, /** * theme_name == "checkbox"鏃讹紝鏍囪閫変腑鑺傜偣鐨勭埗鑺傜偣 * */ undeterminedParentNodes : function(selectedNodeIds) { if (!selectedNodeIds) { return; } for (var i = 0; i < selectedNodeIds.length; i++) { jQuery("#" + selectedNodeIds[i]).children("a").addClass("checked"); jQuery("#" + selectedNodeIds[i]).parents("li").each(function() { if(jQuery(this).find("a.checked, a.undetermined").size() > 0 && jQuery(this).children("a.checked").size() == 0) { jQuery(this).children("a").addClass("undetermined"); } }); } }, getPosterityIds : function(treeId, node, breakSearchNodeType) { var nodeIds = []; addChildrenIds(treeId, [ node ], nodeIds, breakSearchNodeType); return nodeIds; }, getPosterityNodes : function(treeId, node, breakSearchNodeType) { var nodeIds = []; addChildrenNodes(treeId, [ node ], nodeIds, breakSearchNodeType); return nodeIds; }, //鍒ゆ柇鏌愪釜鑺傜偣鏄惁鏄彾瀛愮粨鐐 isLeaf: function(treeid, node) { node = (typeof node == 'string')? JsTreeUtil.getNode(treeid, node) : node; return $(node).children('ul').length == 0; }, /** * 鏍规嵁鑺傜偣Id鎼滅储鑺傜偣锛屼粎鏄剧ず宸叉悳绱㈢殑鑺傜偣 * @param displayNodeIds 鎼滅储鐨勮妭鐐筰d锛屾垨鑰呰妭鐐筰d鏁扮粍 */ filterNodesById: function(treeId, displayNodeIds) { if(typeof displayNodeIds == 'string') { displayNodeIds = [ displayNodeIds ]; } return JsTreeUtil.filterNodesByFunc(treeId, function(node){ return jQuery.inArray(node.attr('id'), displayNodeIds) >= 0; }); }, /** * 鏍规嵁鍚嶇О妯$硦鎼滅储鑺傜偣 * @param treeId * @param searchText * @returns 鎼滅储鑺傜偣鏁伴噺 */ filterNodesByText: function(treeId, searchText,isOpenAllNode) { return JsTreeUtil.filterNodesByFunc(treeId, function(node){ return node.attr('text').indexOf(searchText) >= 0; },isOpenAllNode); }, /** * 鏍规嵁鍑芥暟鎼滅储鑺傜偣 * @param treeId * @param filterFunc 杩囨护鍑芥暟锛岃繑鍥瀟rue锛堣〃绀烘樉绀猴級/false锛堣〃绀洪殣钘忥級isOpenAllNode 鏄惁鎵撳紑鎵€鏈夎妭鐐 true锛堟墦寮€锛?false锛堜笉鎵撳紑锛 * @returns 鎼滅储鑺傜偣鏁伴噺 */ filterNodesByFunc: function(treeId, filterFunc,isOpenAllNode) { var displayNodes = []; jQuery("#" + treeId + " li").hide(); jQuery("#" + treeId + " li").each(function(i, node){ node = jQuery(node); if(filterFunc(node)) { displayNodes[displayNodes.length] = node; } }); jQuery.each(displayNodes, function(i, displayNode){ displayNode.show(); displayNode.parents('li').andSelf().show(); }); if(isOpenAllNode){ JsTreeUtil.openAllNode(treeId); } return displayNodes.length; } }; }();