// 娣诲姞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 + '