| /*! | 
|  * UEditor | 
|  * version: ueditor | 
|  * build: Wed Aug 10 2016 11:06:16 GMT+0800 (CST) | 
|  */ | 
|   | 
| (function(){ | 
|   | 
| (function(){ | 
|     UE = window.UE || {}; | 
|     var isIE = !!window.ActiveXObject; | 
|     //定义utils工具 | 
|     var utils = { | 
|             removeLastbs : function(url){ | 
|                 return url.replace(/\/$/,'') | 
|             }, | 
|             extend : function(t,s){ | 
|                 var a = arguments, | 
|                     notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false, | 
|                     len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length; | 
|                 for (var i = 1; i < len; i++) { | 
|                     var x = a[i]; | 
|                     for (var k in x) { | 
|                         if (!notCover || !t.hasOwnProperty(k)) { | 
|                             t[k] = x[k]; | 
|                         } | 
|                     } | 
|                 } | 
|                 return t; | 
|             }, | 
|             isIE : isIE, | 
|             cssRule : isIE ? function(key,style,doc){ | 
|                 var indexList,index; | 
|                 doc = doc || document; | 
|                 if(doc.indexList){ | 
|                     indexList = doc.indexList; | 
|                 }else{ | 
|                     indexList = doc.indexList =  {}; | 
|                 } | 
|                 var sheetStyle; | 
|                 if(!indexList[key]){ | 
|                     if(style === undefined){ | 
|                         return '' | 
|                     } | 
|                     sheetStyle = doc.createStyleSheet('',index = doc.styleSheets.length); | 
|                     indexList[key] = index; | 
|                 }else{ | 
|                     sheetStyle = doc.styleSheets[indexList[key]]; | 
|                 } | 
|                 if(style === undefined){ | 
|                     return sheetStyle.cssText | 
|                 } | 
|                 sheetStyle.cssText = sheetStyle.cssText + '\n' + (style || '') | 
|             } : function(key,style,doc){ | 
|                 doc = doc || document; | 
|                 var head = doc.getElementsByTagName('head')[0],node; | 
|                 if(!(node = doc.getElementById(key))){ | 
|                     if(style === undefined){ | 
|                         return '' | 
|                     } | 
|                     node = doc.createElement('style'); | 
|                     node.id = key; | 
|                     head.appendChild(node) | 
|                 } | 
|                 if(style === undefined){ | 
|                     return node.innerHTML | 
|                 } | 
|                 if(style !== ''){ | 
|                     node.innerHTML = node.innerHTML + '\n' + style; | 
|                 }else{ | 
|                     head.removeChild(node) | 
|                 } | 
|             }, | 
|             domReady : function (onready) { | 
|                 var doc = window.document; | 
|                 if (doc.readyState === "complete") { | 
|                     onready(); | 
|                 }else{ | 
|                     if (isIE) { | 
|                         (function () { | 
|                             if (doc.isReady) return; | 
|                             try { | 
|                                 doc.documentElement.doScroll("left"); | 
|                             } catch (error) { | 
|                                 setTimeout(arguments.callee, 0); | 
|                                 return; | 
|                             } | 
|                             onready(); | 
|                         })(); | 
|                         window.attachEvent('onload', function(){ | 
|                             onready() | 
|                         }); | 
|                     } else { | 
|                         doc.addEventListener("DOMContentLoaded", function () { | 
|                             doc.removeEventListener("DOMContentLoaded", arguments.callee, false); | 
|                             onready(); | 
|                         }, false); | 
|                         window.addEventListener('load', function(){onready()}, false); | 
|                     } | 
|                 } | 
|   | 
|             }, | 
|             each : function(obj, iterator, context) { | 
|                 if (obj == null) return; | 
|                 if (obj.length === +obj.length) { | 
|                     for (var i = 0, l = obj.length; i < l; i++) { | 
|                         if(iterator.call(context, obj[i], i, obj) === false) | 
|                             return false; | 
|                     } | 
|                 } else { | 
|                     for (var key in obj) { | 
|                         if (obj.hasOwnProperty(key)) { | 
|                             if(iterator.call(context, obj[key], key, obj) === false) | 
|                                 return false; | 
|                         } | 
|                     } | 
|                 } | 
|             }, | 
|             inArray : function(arr,item){ | 
|                 var index = -1; | 
|                 this.each(arr,function(v,i){ | 
|                     if(v === item){ | 
|                         index = i; | 
|                         return false; | 
|                     } | 
|                 }); | 
|                 return index; | 
|             }, | 
|             pushItem : function(arr,item){ | 
|                 if(this.inArray(arr,item)==-1){ | 
|                     arr.push(item) | 
|                 } | 
|             }, | 
|             trim: function (str) { | 
|                 return str.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g, ''); | 
|             }, | 
|             indexOf: function (array, item, start) { | 
|                 var index = -1; | 
|                 start = this.isNumber(start) ? start : 0; | 
|                 this.each(array, function (v, i) { | 
|                     if (i >= start && v === item) { | 
|                         index = i; | 
|                         return false; | 
|                     } | 
|                 }); | 
|                 return index; | 
|             }, | 
|             hasClass: function (element, className) { | 
|                 className = className.replace(/(^[ ]+)|([ ]+$)/g, '').replace(/[ ]{2,}/g, ' ').split(' '); | 
|                 for (var i = 0, ci, cls = element.className; ci = className[i++];) { | 
|                     if (!new RegExp('\\b' + ci + '\\b', 'i').test(cls)) { | 
|                         return false; | 
|                     } | 
|                 } | 
|                 return i - 1 == className.length; | 
|             }, | 
|             addClass:function (elm, classNames) { | 
|                 if(!elm)return; | 
|                 classNames = this.trim(classNames).replace(/[ ]{2,}/g,' ').split(' '); | 
|                 for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){ | 
|                     if(!new RegExp('\\b' + ci + '\\b').test(cls)){ | 
|                         cls += ' ' + ci; | 
|                     } | 
|                 } | 
|                 elm.className = utils.trim(cls); | 
|             }, | 
|             removeClass:function (elm, classNames) { | 
|                 classNames = this.isArray(classNames) ? classNames : | 
|                     this.trim(classNames).replace(/[ ]{2,}/g,' ').split(' '); | 
|                 for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){ | 
|                     cls = cls.replace(new RegExp('\\b' + ci + '\\b'),'') | 
|                 } | 
|                 cls = this.trim(cls).replace(/[ ]{2,}/g,' '); | 
|                 elm.className = cls; | 
|                 !cls && elm.removeAttribute('className'); | 
|             }, | 
|             on: function (element, type, handler) { | 
|                 var types = this.isArray(type) ? type : type.split(/\s+/), | 
|                     k = types.length; | 
|                 if (k) while (k--) { | 
|                     type = types[k]; | 
|                     if (element.addEventListener) { | 
|                         element.addEventListener(type, handler, false); | 
|                     } else { | 
|                         if (!handler._d) { | 
|                             handler._d = { | 
|                                 els : [] | 
|                             }; | 
|                         } | 
|                         var key = type + handler.toString(),index = utils.indexOf(handler._d.els,element); | 
|                         if (!handler._d[key] || index == -1) { | 
|                             if(index == -1){ | 
|                                 handler._d.els.push(element); | 
|                             } | 
|                             if(!handler._d[key]){ | 
|                                 handler._d[key] = function (evt) { | 
|                                     return handler.call(evt.srcElement, evt || window.event); | 
|                                 }; | 
|                             } | 
|   | 
|   | 
|                             element.attachEvent('on' + type, handler._d[key]); | 
|                         } | 
|                     } | 
|                 } | 
|                 element = null; | 
|             }, | 
|             off: function (element, type, handler) { | 
|                 var types = this.isArray(type) ? type : type.split(/\s+/), | 
|                     k = types.length; | 
|                 if (k) while (k--) { | 
|                     type = types[k]; | 
|                     if (element.removeEventListener) { | 
|                         element.removeEventListener(type, handler, false); | 
|                     } else { | 
|                         var key = type + handler.toString(); | 
|                         try{ | 
|                             element.detachEvent('on' + type, handler._d ? handler._d[key] : handler); | 
|                         }catch(e){} | 
|                         if (handler._d && handler._d[key]) { | 
|                             var index = utils.indexOf(handler._d.els,element); | 
|                             if(index!=-1){ | 
|                                 handler._d.els.splice(index,1); | 
|                             } | 
|                             handler._d.els.length == 0 && delete handler._d[key]; | 
|                         } | 
|                     } | 
|                 } | 
|             }, | 
|             loadFile : function () { | 
|                 var tmpList = []; | 
|                 function getItem(doc,obj){ | 
|                     try{ | 
|                         for(var i= 0,ci;ci=tmpList[i++];){ | 
|                             if(ci.doc === doc && ci.url == (obj.src || obj.href)){ | 
|                                 return ci; | 
|                             } | 
|                         } | 
|                     }catch(e){ | 
|                         return null; | 
|                     } | 
|   | 
|                 } | 
|                 return function (doc, obj, fn) { | 
|                     var item = getItem(doc,obj); | 
|                     if (item) { | 
|                         if(item.ready){ | 
|                             fn && fn(); | 
|                         }else{ | 
|                             item.funs.push(fn) | 
|                         } | 
|                         return; | 
|                     } | 
|                     tmpList.push({ | 
|                         doc:doc, | 
|                         url:obj.src||obj.href, | 
|                         funs:[fn] | 
|                     }); | 
|                     if (!doc.body) { | 
|                         var html = []; | 
|                         for(var p in obj){ | 
|                             if(p == 'tag')continue; | 
|                             html.push(p + '="' + obj[p] + '"') | 
|                         } | 
|                         doc.write('<' + obj.tag + ' ' + html.join(' ') + ' ></'+obj.tag+'>'); | 
|                         return; | 
|                     } | 
|                     if (obj.id && doc.getElementById(obj.id)) { | 
|                         return; | 
|                     } | 
|                     var element = doc.createElement(obj.tag); | 
|                     delete obj.tag; | 
|                     for (var p in obj) { | 
|                         element.setAttribute(p, obj[p]); | 
|                     } | 
|                     element.onload = element.onreadystatechange = function () { | 
|                         if (!this.readyState || /loaded|complete/.test(this.readyState)) { | 
|                             item = getItem(doc,obj); | 
|                             if (item.funs.length > 0) { | 
|                                 item.ready = 1; | 
|                                 for (var fi; fi = item.funs.pop();) { | 
|                                     fi(); | 
|                                 } | 
|                             } | 
|                             element.onload = element.onreadystatechange = null; | 
|                         } | 
|                     }; | 
|                     element.onerror = function(){ | 
|                         throw Error('The load '+(obj.href||obj.src)+' fails,check the url') | 
|                     }; | 
|                     doc.getElementsByTagName("head")[0].appendChild(element); | 
|                 } | 
|             }() | 
|     }; | 
|     utils.each(['String', 'Function', 'Array', 'Number', 'RegExp', 'Object','Boolean'], function (v) { | 
|         utils['is' + v] = function (obj) { | 
|             return Object.prototype.toString.apply(obj) == '[object ' + v + ']'; | 
|         } | 
|     }); | 
|     var parselist = {}; | 
|     UE.parse = { | 
|         register : function(parseName,fn){ | 
|             parselist[parseName] = fn; | 
|         }, | 
|         load : function(opt){ | 
|             utils.each(parselist,function(v){ | 
|                 v.call(opt,utils); | 
|             }) | 
|         } | 
|     }; | 
|     uParse = function(selector,opt){ | 
|         utils.domReady(function(){ | 
|             var contents; | 
|             if(document.querySelectorAll){ | 
|                 contents = document.querySelectorAll(selector) | 
|             }else{ | 
|                 if(/^#/.test(selector)){ | 
|                     contents = [document.getElementById(selector.replace(/^#/,''))] | 
|                 }else if(/^\./.test(selector)){ | 
|                     var contents = []; | 
|                     utils.each(document.getElementsByTagName('*'),function(node){ | 
|                         if(node.className && new RegExp('\\b' + selector.replace(/^\./,'') + '\\b','i').test(node.className)){ | 
|                             contents.push(node) | 
|                         } | 
|                     }) | 
|                 }else{ | 
|                     contents = document.getElementsByTagName(selector) | 
|                 } | 
|             } | 
|             utils.each(contents,function(v){ | 
|                 UE.parse.load(utils.extend({root:v,selector:selector},opt)) | 
|             }) | 
|         }) | 
|     } | 
| })(); | 
|   | 
| UE.parse.register('insertcode',function(utils){ | 
|     var pres = this.root.getElementsByTagName('pre'); | 
|     if(pres.length){ | 
|         if(typeof XRegExp == "undefined"){ | 
|             var jsurl,cssurl; | 
|             if(this.rootPath !== undefined){ | 
|                 jsurl = utils.removeLastbs(this.rootPath)  + '/third-party/SyntaxHighlighter/shCore.js'; | 
|                 cssurl = utils.removeLastbs(this.rootPath) + '/third-party/SyntaxHighlighter/shCoreDefault.css'; | 
|             }else{ | 
|                 jsurl = this.highlightJsUrl; | 
|                 cssurl = this.highlightCssUrl; | 
|             } | 
|             utils.loadFile(document,{ | 
|                 id : "syntaxhighlighter_css", | 
|                 tag : "link", | 
|                 rel : "stylesheet", | 
|                 type : "text/css", | 
|                 href : cssurl | 
|             }); | 
|             utils.loadFile(document,{ | 
|                 id : "syntaxhighlighter_js", | 
|                 src : jsurl, | 
|                 tag : "script", | 
|                 type : "text/javascript", | 
|                 defer : "defer" | 
|             },function(){ | 
|                 utils.each(pres,function(pi){ | 
|                     if(pi && /brush/i.test(pi.className)){ | 
|                         SyntaxHighlighter.highlight(pi); | 
|                     } | 
|                 }); | 
|             }); | 
|         }else{ | 
|             utils.each(pres,function(pi){ | 
|                 if(pi && /brush/i.test(pi.className)){ | 
|                     SyntaxHighlighter.highlight(pi); | 
|                 } | 
|             }); | 
|         } | 
|     } | 
|   | 
| }); | 
| UE.parse.register('table', function (utils) { | 
|     var me = this, | 
|         root = this.root, | 
|         tables = root.getElementsByTagName('table'); | 
|     if (tables.length) { | 
|         var selector = this.selector; | 
|         //追加默认的表格样式 | 
|         utils.cssRule('table', | 
|             selector + ' table.noBorderTable td,' + | 
|                 selector + ' table.noBorderTable th,' + | 
|                 selector + ' table.noBorderTable caption{border:1px dashed #ddd !important}' + | 
|                 selector + ' table.sortEnabled tr.firstRow th,' + selector + ' table.sortEnabled tr.firstRow td{padding-right:20px; background-repeat: no-repeat;' + | 
|                     'background-position: center right; background-image:url(' + this.rootPath + 'themes/default/images/sortable.png);}' + | 
|                 selector + ' table.sortEnabled tr.firstRow th:hover,' + selector + ' table.sortEnabled tr.firstRow td:hover{background-color: #EEE;}' + | 
|                 selector + ' table{margin-bottom:10px;border-collapse:collapse;display:table;}' + | 
|                 selector + ' td,' + selector + ' th{ background:white; padding: 5px 10px;border: 1px solid #DDD;}' + | 
|                 selector + ' caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}' + | 
|                 selector + ' th{border-top:1px solid #BBB;background:#F7F7F7;}' + | 
|                 selector + ' table tr.firstRow th{border-top:2px solid #BBB;background:#F7F7F7;}' + | 
|                 selector + ' tr.ue-table-interlace-color-single td{ background: #fcfcfc; }' + | 
|                 selector + ' tr.ue-table-interlace-color-double td{ background: #f7faff; }' + | 
|                 selector + ' td p{margin:0;padding:0;}', | 
|             document); | 
|         //填充空的单元格 | 
|   | 
|         utils.each('td th caption'.split(' '), function (tag) { | 
|             var cells = root.getElementsByTagName(tag); | 
|             cells.length && utils.each(cells, function (node) { | 
|                 if (!node.firstChild) { | 
|                     node.innerHTML = ' '; | 
|   | 
|                 } | 
|             }) | 
|         }); | 
|   | 
|         //表格可排序 | 
|         var tables = root.getElementsByTagName('table'); | 
|         utils.each(tables, function (table) { | 
|             if (/\bsortEnabled\b/.test(table.className)) { | 
|                 utils.on(table, 'click', function(e){ | 
|                     var target = e.target || e.srcElement, | 
|                         cell = findParentByTagName(target, ['td', 'th']); | 
|                     var table = findParentByTagName(target, 'table'), | 
|                         colIndex = utils.indexOf(table.rows[0].cells, cell), | 
|                         sortType = table.getAttribute('data-sort-type'); | 
|                     if(colIndex != -1) { | 
|                         sortTable(table, colIndex, me.tableSortCompareFn || sortType); | 
|                         updateTable(table); | 
|                     } | 
|                 }); | 
|             } | 
|         }); | 
|   | 
|         //按照标签名查找父节点 | 
|         function findParentByTagName(target, tagNames) { | 
|             var i, current = target; | 
|             tagNames = utils.isArray(tagNames) ? tagNames:[tagNames]; | 
|             while(current){ | 
|                 for(i = 0;i < tagNames.length; i++) { | 
|                     if(current.tagName == tagNames[i].toUpperCase()) return current; | 
|                 } | 
|                 current = current.parentNode; | 
|             } | 
|             return null; | 
|         } | 
|         //表格排序 | 
|         function sortTable(table, sortByCellIndex, compareFn) { | 
|             var rows = table.rows, | 
|                 trArray = [], | 
|                 flag = rows[0].cells[0].tagName === "TH", | 
|                 lastRowIndex = 0; | 
|   | 
|             for (var i = 0,len = rows.length; i < len; i++) { | 
|                 trArray[i] = rows[i]; | 
|             } | 
|   | 
|             var Fn = { | 
|                 'reversecurrent': function(td1,td2){ | 
|                     return 1; | 
|                 }, | 
|                 'orderbyasc': function(td1,td2){ | 
|                     var value1 = td1.innerText||td1.textContent, | 
|                         value2 = td2.innerText||td2.textContent; | 
|                     return value1.localeCompare(value2); | 
|                 }, | 
|                 'reversebyasc': function(td1,td2){ | 
|                     var value1 = td1.innerHTML, | 
|                         value2 = td2.innerHTML; | 
|                     return value2.localeCompare(value1); | 
|                 }, | 
|                 'orderbynum': function(td1,td2){ | 
|                     var value1 = td1[utils.isIE ? 'innerText':'textContent'].match(/\d+/), | 
|                         value2 = td2[utils.isIE ? 'innerText':'textContent'].match(/\d+/); | 
|                     if(value1) value1 = +value1[0]; | 
|                     if(value2) value2 = +value2[0]; | 
|                     return (value1||0) - (value2||0); | 
|                 }, | 
|                 'reversebynum': function(td1,td2){ | 
|                     var value1 = td1[utils.isIE ? 'innerText':'textContent'].match(/\d+/), | 
|                         value2 = td2[utils.isIE ? 'innerText':'textContent'].match(/\d+/); | 
|                     if(value1) value1 = +value1[0]; | 
|                     if(value2) value2 = +value2[0]; | 
|                     return (value2||0) - (value1||0); | 
|                 } | 
|             }; | 
|   | 
|             //对表格设置排序的标记data-sort-type | 
|             table.setAttribute('data-sort-type', compareFn && typeof compareFn === "string" && Fn[compareFn] ? compareFn:''); | 
|   | 
|             //th不参与排序 | 
|             flag && trArray.splice(0, 1); | 
|             trArray = sort(trArray,function (tr1, tr2) { | 
|                 var result; | 
|                 if (compareFn && typeof compareFn === "function") { | 
|                     result = compareFn.call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); | 
|                 } else if (compareFn && typeof compareFn === "number") { | 
|                     result = 1; | 
|                 } else if (compareFn && typeof compareFn === "string" && Fn[compareFn]) { | 
|                     result = Fn[compareFn].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); | 
|                 } else { | 
|                     result = Fn['orderbyasc'].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]); | 
|                 } | 
|                 return result; | 
|             }); | 
|             var fragment = table.ownerDocument.createDocumentFragment(); | 
|             for (var j = 0, len = trArray.length; j < len; j++) { | 
|                 fragment.appendChild(trArray[j]); | 
|             } | 
|             var tbody = table.getElementsByTagName("tbody")[0]; | 
|             if(!lastRowIndex){ | 
|                 tbody.appendChild(fragment); | 
|             }else{ | 
|                 tbody.insertBefore(fragment,rows[lastRowIndex- range.endRowIndex + range.beginRowIndex - 1]) | 
|             } | 
|         } | 
|         //冒泡排序 | 
|         function sort(array, compareFn){ | 
|             compareFn = compareFn || function(item1, item2){ return item1.localeCompare(item2);}; | 
|             for(var i= 0,len = array.length; i<len; i++){ | 
|                 for(var j = i,length = array.length; j<length; j++){ | 
|                     if(compareFn(array[i], array[j]) > 0){ | 
|                         var t = array[i]; | 
|                         array[i] = array[j]; | 
|                         array[j] = t; | 
|                     } | 
|                 } | 
|             } | 
|             return array; | 
|         } | 
|         //更新表格 | 
|         function updateTable(table) { | 
|             //给第一行设置firstRow的样式名称,在排序图标的样式上使用到 | 
|             if(!utils.hasClass(table.rows[0], "firstRow")) { | 
|                 for(var i = 1; i< table.rows.length; i++) { | 
|                     utils.removeClass(table.rows[i], "firstRow"); | 
|                 } | 
|                 utils.addClass(table.rows[0], "firstRow"); | 
|             } | 
|         } | 
|     } | 
| }); | 
| UE.parse.register('charts',function( utils ){ | 
|   | 
|     utils.cssRule('chartsContainerHeight','.edui-chart-container { height:'+(this.chartContainerHeight||300)+'px}'); | 
|     var resourceRoot = this.rootPath, | 
|         containers = this.root, | 
|         sources = null; | 
|   | 
|     //不存在指定的根路径, 则直接退出 | 
|     if ( !resourceRoot ) { | 
|         return; | 
|     } | 
|   | 
|     if ( sources = parseSources() ) { | 
|   | 
|         loadResources(); | 
|   | 
|     } | 
|   | 
|   | 
|     function parseSources () { | 
|   | 
|         if ( !containers ) { | 
|             return null; | 
|         } | 
|   | 
|         return extractChartData( containers ); | 
|   | 
|     } | 
|   | 
|     /** | 
|      * 提取数据 | 
|      */ | 
|     function extractChartData ( rootNode ) { | 
|   | 
|         var data = [], | 
|             tables = rootNode.getElementsByTagName( "table" ); | 
|   | 
|         for ( var i = 0, tableNode; tableNode = tables[ i ]; i++ ) { | 
|   | 
|             if ( tableNode.getAttribute( "data-chart" ) !== null ) { | 
|   | 
|                 data.push( formatData( tableNode ) ); | 
|   | 
|             } | 
|   | 
|         } | 
|   | 
|         return data.length ? data : null; | 
|   | 
|     } | 
|   | 
|     function formatData ( tableNode ) { | 
|   | 
|         var meta = tableNode.getAttribute( "data-chart" ), | 
|             metaConfig = {}, | 
|             data = []; | 
|   | 
|         //提取table数据 | 
|         for ( var i = 0, row; row = tableNode.rows[ i ]; i++ ) { | 
|   | 
|             var rowData = []; | 
|   | 
|             for ( var j = 0, cell; cell = row.cells[ j ]; j++ ) { | 
|   | 
|                 var value = ( cell.innerText || cell.textContent || '' ); | 
|                 rowData.push( cell.tagName == 'TH' ? value:(value | 0) ); | 
|   | 
|             } | 
|   | 
|             data.push( rowData ); | 
|   | 
|         } | 
|   | 
|         //解析元信息 | 
|         meta = meta.split( ";" ); | 
|         for ( var i = 0, metaData; metaData = meta[ i ]; i++ ) { | 
|   | 
|             metaData = metaData.split( ":" ); | 
|             metaConfig[ metaData[ 0 ] ] = metaData[ 1 ]; | 
|   | 
|         } | 
|   | 
|   | 
|         return { | 
|             table: tableNode, | 
|             meta: metaConfig, | 
|             data: data | 
|         }; | 
|   | 
|     } | 
|   | 
|     //加载资源 | 
|     function loadResources () { | 
|   | 
|         loadJQuery(); | 
|   | 
|     } | 
|   | 
|     function loadJQuery () { | 
|   | 
|         //不存在jquery, 则加载jquery | 
|         if ( !window.jQuery ) { | 
|   | 
|             utils.loadFile(document,{ | 
|                 src : resourceRoot + "/third-party/jquery-1.10.2.min.js", | 
|                 tag : "script", | 
|                 type : "text/javascript", | 
|                 defer : "defer" | 
|             },function(){ | 
|   | 
|                 loadHighcharts(); | 
|   | 
|             }); | 
|   | 
|         } else { | 
|   | 
|             loadHighcharts(); | 
|   | 
|         } | 
|   | 
|     } | 
|   | 
|     function loadHighcharts () { | 
|   | 
|         //不存在Highcharts, 则加载Highcharts | 
|         if ( !window.Highcharts ) { | 
|   | 
|             utils.loadFile(document,{ | 
|                 src : resourceRoot + "/third-party/highcharts/highcharts.js", | 
|                 tag : "script", | 
|                 type : "text/javascript", | 
|                 defer : "defer" | 
|             },function(){ | 
|   | 
|                 loadTypeConfig(); | 
|   | 
|             }); | 
|   | 
|         } else { | 
|   | 
|             loadTypeConfig(); | 
|   | 
|         } | 
|   | 
|     } | 
|   | 
|     //加载图表差异化配置文件 | 
|     function loadTypeConfig () { | 
|   | 
|         utils.loadFile(document,{ | 
|             src : resourceRoot + "/dialogs/charts/chart.config.js", | 
|             tag : "script", | 
|             type : "text/javascript", | 
|             defer : "defer" | 
|         },function(){ | 
|   | 
|             render(); | 
|   | 
|         }); | 
|   | 
|     } | 
|   | 
|     //渲染图表 | 
|     function render () { | 
|   | 
|         var config = null, | 
|             chartConfig = null, | 
|             container = null; | 
|   | 
|         for ( var i = 0, len = sources.length; i < len; i++ ) { | 
|   | 
|             config = sources[ i ]; | 
|   | 
|             chartConfig = analysisConfig( config ); | 
|   | 
|             container = createContainer( config.table ); | 
|   | 
|             renderChart( container, typeConfig[ config.meta.chartType ], chartConfig ); | 
|   | 
|         } | 
|   | 
|   | 
|     } | 
|   | 
|     /** | 
|      * 渲染图表 | 
|      * @param container 图表容器节点对象 | 
|      * @param typeConfig 图表类型配置 | 
|      * @param config 图表通用配置 | 
|      * */ | 
|     function renderChart ( container, typeConfig, config ) { | 
|   | 
|   | 
|         $( container ).highcharts( $.extend( {}, typeConfig, { | 
|   | 
|             credits: { | 
|                 enabled: false | 
|             }, | 
|             exporting: { | 
|                 enabled: false | 
|             }, | 
|             title: { | 
|                 text: config.title, | 
|                 x: -20 //center | 
|             }, | 
|             subtitle: { | 
|                 text: config.subTitle, | 
|                 x: -20 | 
|             }, | 
|             xAxis: { | 
|                 title: { | 
|                     text: config.xTitle | 
|                 }, | 
|                 categories: config.categories | 
|             }, | 
|             yAxis: { | 
|                 title: { | 
|                     text: config.yTitle | 
|                 }, | 
|                 plotLines: [{ | 
|                     value: 0, | 
|                     width: 1, | 
|                     color: '#808080' | 
|                 }] | 
|             }, | 
|             tooltip: { | 
|                 enabled: true, | 
|                 valueSuffix: config.suffix | 
|             }, | 
|             legend: { | 
|                 layout: 'vertical', | 
|                 align: 'right', | 
|                 verticalAlign: 'middle', | 
|                 borderWidth: 1 | 
|             }, | 
|             series: config.series | 
|   | 
|         } )); | 
|   | 
|     } | 
|   | 
|     /** | 
|      * 创建图表的容器 | 
|      * 新创建的容器会替换掉对应的table对象 | 
|      * */ | 
|     function createContainer ( tableNode ) { | 
|   | 
|         var container = document.createElement( "div" ); | 
|         container.className = "edui-chart-container"; | 
|   | 
|         tableNode.parentNode.replaceChild( container, tableNode ); | 
|   | 
|         return container; | 
|   | 
|     } | 
|   | 
|     //根据config解析出正确的类别和图表数据信息 | 
|     function analysisConfig ( config ) { | 
|   | 
|         var series = [], | 
|         //数据类别 | 
|             categories = [], | 
|             result = [], | 
|             data = config.data, | 
|             meta = config.meta; | 
|   | 
|         //数据对齐方式为相反的方式, 需要反转数据 | 
|         if ( meta.dataFormat != "1" ) { | 
|   | 
|             for ( var i = 0, len = data.length; i < len ; i++ ) { | 
|   | 
|                 for ( var j = 0, jlen = data[ i ].length; j < jlen; j++ ) { | 
|   | 
|                     if ( !result[ j ] ) { | 
|                         result[ j ] = []; | 
|                     } | 
|   | 
|                     result[ j ][ i ] = data[ i ][ j ]; | 
|   | 
|                 } | 
|   | 
|             } | 
|   | 
|             data = result; | 
|   | 
|         } | 
|   | 
|         result = {}; | 
|   | 
|         //普通图表 | 
|         if ( meta.chartType != typeConfig.length - 1 ) { | 
|   | 
|             categories = data[ 0 ].slice( 1 ); | 
|   | 
|             for ( var i = 1, curData; curData = data[ i ]; i++ ) { | 
|                 series.push( { | 
|                     name: curData[ 0 ], | 
|                     data: curData.slice( 1 ) | 
|                 } ); | 
|             } | 
|   | 
|             result.series = series; | 
|             result.categories = categories; | 
|             result.title = meta.title; | 
|             result.subTitle = meta.subTitle; | 
|             result.xTitle = meta.xTitle; | 
|             result.yTitle = meta.yTitle; | 
|             result.suffix = meta.suffix; | 
|   | 
|         } else { | 
|   | 
|             var curData = []; | 
|   | 
|             for ( var i = 1, len = data[ 0 ].length; i < len; i++ ) { | 
|   | 
|                 curData.push( [ data[ 0 ][ i ], data[ 1 ][ i ] | 0 ] ); | 
|   | 
|             } | 
|   | 
|             //饼图 | 
|             series[ 0 ] = { | 
|                 type: 'pie', | 
|                 name: meta.tip, | 
|                 data: curData | 
|             }; | 
|   | 
|             result.series = series; | 
|             result.title = meta.title; | 
|             result.suffix = meta.suffix; | 
|   | 
|         } | 
|   | 
|         return result; | 
|   | 
|     } | 
|   | 
| }); | 
| UE.parse.register('background', function (utils) { | 
|     var me = this, | 
|         root = me.root, | 
|         p = root.getElementsByTagName('p'), | 
|         styles; | 
|   | 
|     for (var i = 0,ci; ci = p[i++];) { | 
|         styles = ci.getAttribute('data-background'); | 
|         if (styles){ | 
|             ci.parentNode.removeChild(ci); | 
|         } | 
|     } | 
|   | 
|     //追加默认的表格样式 | 
|     styles && utils.cssRule('ueditor_background', me.selector + '{' + styles + '}', document); | 
| }); | 
| UE.parse.register('list',function(utils){ | 
|     var customCss = [], | 
|         customStyle = { | 
|             'cn'    :   'cn-1-', | 
|             'cn1'   :   'cn-2-', | 
|             'cn2'   :   'cn-3-', | 
|             'num'   :   'num-1-', | 
|             'num1'  :   'num-2-', | 
|             'num2'  :   'num-3-', | 
|             'dash'  :   'dash', | 
|             'dot'   :   'dot' | 
|         }; | 
|   | 
|   | 
|     utils.extend(this,{ | 
|         liiconpath : 'http://bs.baidu.com/listicon/', | 
|         listDefaultPaddingLeft : '20' | 
|     }); | 
|   | 
|     var root = this.root, | 
|         ols = root.getElementsByTagName('ol'), | 
|         uls = root.getElementsByTagName('ul'), | 
|         selector = this.selector; | 
|   | 
|     if(ols.length){ | 
|         applyStyle.call(this,ols); | 
|     } | 
|   | 
|     if(uls.length){ | 
|         applyStyle.call(this,uls); | 
|     } | 
|   | 
|     if(ols.length || uls.length){ | 
|         customCss.push(selector +' .list-paddingleft-1{padding-left:0}'); | 
|         customCss.push(selector +' .list-paddingleft-2{padding-left:'+ this.listDefaultPaddingLeft+'px}'); | 
|         customCss.push(selector +' .list-paddingleft-3{padding-left:'+ this.listDefaultPaddingLeft*2+'px}'); | 
|   | 
|         utils.cssRule('list', selector +' ol,'+selector +' ul{margin:0;padding:0;}li{clear:both;}'+customCss.join('\n'), document); | 
|     } | 
|     function applyStyle(nodes){ | 
|         var T = this; | 
|         utils.each(nodes,function(list){ | 
|             if(list.className && /custom_/i.test(list.className)){ | 
|                 var listStyle = list.className.match(/custom_(\w+)/)[1]; | 
|                 if(listStyle == 'dash' || listStyle == 'dot'){ | 
|                     utils.pushItem(customCss,selector +' li.list-' + customStyle[listStyle] + '{background-image:url(' + T.liiconpath +customStyle[listStyle]+'.gif)}'); | 
|                     utils.pushItem(customCss,selector +' ul.custom_'+listStyle+'{list-style:none;} '+ selector +' ul.custom_'+listStyle+' li{background-position:0 3px;background-repeat:no-repeat}'); | 
|   | 
|                 }else{ | 
|                     var index = 1; | 
|                     utils.each(list.childNodes,function(li){ | 
|                         if(li.tagName == 'LI'){ | 
|                             utils.pushItem(customCss,selector + ' li.list-' + customStyle[listStyle] + index + '{background-image:url(' + T.liiconpath  + 'list-'+customStyle[listStyle] +index + '.gif)}'); | 
|                             index++; | 
|                         } | 
|                     }); | 
|                     utils.pushItem(customCss,selector + ' ol.custom_'+listStyle+'{list-style:none;}'+selector+' ol.custom_'+listStyle+' li{background-position:0 3px;background-repeat:no-repeat}'); | 
|                 } | 
|                 switch(listStyle){ | 
|                     case 'cn': | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:25px}'); | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:40px}'); | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-3{padding-left:55px}'); | 
|                         break; | 
|                     case 'cn1': | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:30px}'); | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:40px}'); | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-3{padding-left:55px}'); | 
|                         break; | 
|                     case 'cn2': | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:40px}'); | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:55px}'); | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-3{padding-left:68px}'); | 
|                         break; | 
|                     case 'num': | 
|                     case 'num1': | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:25px}'); | 
|                         break; | 
|                     case 'num2': | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:35px}'); | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:40px}'); | 
|                         break; | 
|                     case 'dash': | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft{padding-left:35px}'); | 
|                         break; | 
|                     case 'dot': | 
|                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft{padding-left:20px}'); | 
|                 } | 
|             } | 
|         }); | 
|     } | 
|   | 
|   | 
| }); | 
| UE.parse.register('vedio',function(utils){ | 
|     var video = this.root.getElementsByTagName('video'), | 
|         audio = this.root.getElementsByTagName('audio'); | 
|   | 
|     document.createElement('video');document.createElement('audio'); | 
|     if(video.length || audio.length){ | 
|         var sourcePath = utils.removeLastbs(this.rootPath), | 
|             jsurl = sourcePath + '/third-party/video-js/video.js', | 
|             cssurl = sourcePath + '/third-party/video-js/video-js.min.css', | 
|             swfUrl = sourcePath + '/third-party/video-js/video-js.swf'; | 
|   | 
|         if(window.videojs) { | 
|             videojs.autoSetup(); | 
|         } else { | 
|             utils.loadFile(document,{ | 
|                 id : "video_css", | 
|                 tag : "link", | 
|                 rel : "stylesheet", | 
|                 type : "text/css", | 
|                 href : cssurl | 
|             }); | 
|             utils.loadFile(document,{ | 
|                 id : "video_js", | 
|                 src : jsurl, | 
|                 tag : "script", | 
|                 type : "text/javascript" | 
|             },function(){ | 
|                 videojs.options.flash.swf = swfUrl; | 
|                 videojs.autoSetup(); | 
|             }); | 
|         } | 
|   | 
|     } | 
| }); | 
|   | 
| })(); |