懒羊羊
2023-08-30 1ac2bc1590406d9babec036e154d8d08f34a6aa1
提交 | 用户 | 时间
1ac2bc 1 /*!
2  * UEditor
3  * version: ueditor
4  * build: Wed Aug 10 2016 11:06:16 GMT+0800 (CST)
5  */
6
7 (function(){
8
9 (function(){
10     UE = window.UE || {};
11     var isIE = !!window.ActiveXObject;
12     //定义utils工具
13     var utils = {
14             removeLastbs : function(url){
15                 return url.replace(/\/$/,'')
16             },
17             extend : function(t,s){
18                 var a = arguments,
19                     notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false,
20                     len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length;
21                 for (var i = 1; i < len; i++) {
22                     var x = a[i];
23                     for (var k in x) {
24                         if (!notCover || !t.hasOwnProperty(k)) {
25                             t[k] = x[k];
26                         }
27                     }
28                 }
29                 return t;
30             },
31             isIE : isIE,
32             cssRule : isIE ? function(key,style,doc){
33                 var indexList,index;
34                 doc = doc || document;
35                 if(doc.indexList){
36                     indexList = doc.indexList;
37                 }else{
38                     indexList = doc.indexList =  {};
39                 }
40                 var sheetStyle;
41                 if(!indexList[key]){
42                     if(style === undefined){
43                         return ''
44                     }
45                     sheetStyle = doc.createStyleSheet('',index = doc.styleSheets.length);
46                     indexList[key] = index;
47                 }else{
48                     sheetStyle = doc.styleSheets[indexList[key]];
49                 }
50                 if(style === undefined){
51                     return sheetStyle.cssText
52                 }
53                 sheetStyle.cssText = sheetStyle.cssText + '\n' + (style || '')
54             } : function(key,style,doc){
55                 doc = doc || document;
56                 var head = doc.getElementsByTagName('head')[0],node;
57                 if(!(node = doc.getElementById(key))){
58                     if(style === undefined){
59                         return ''
60                     }
61                     node = doc.createElement('style');
62                     node.id = key;
63                     head.appendChild(node)
64                 }
65                 if(style === undefined){
66                     return node.innerHTML
67                 }
68                 if(style !== ''){
69                     node.innerHTML = node.innerHTML + '\n' + style;
70                 }else{
71                     head.removeChild(node)
72                 }
73             },
74             domReady : function (onready) {
75                 var doc = window.document;
76                 if (doc.readyState === "complete") {
77                     onready();
78                 }else{
79                     if (isIE) {
80                         (function () {
81                             if (doc.isReady) return;
82                             try {
83                                 doc.documentElement.doScroll("left");
84                             } catch (error) {
85                                 setTimeout(arguments.callee, 0);
86                                 return;
87                             }
88                             onready();
89                         })();
90                         window.attachEvent('onload', function(){
91                             onready()
92                         });
93                     } else {
94                         doc.addEventListener("DOMContentLoaded", function () {
95                             doc.removeEventListener("DOMContentLoaded", arguments.callee, false);
96                             onready();
97                         }, false);
98                         window.addEventListener('load', function(){onready()}, false);
99                     }
100                 }
101
102             },
103             each : function(obj, iterator, context) {
104                 if (obj == null) return;
105                 if (obj.length === +obj.length) {
106                     for (var i = 0, l = obj.length; i < l; i++) {
107                         if(iterator.call(context, obj[i], i, obj) === false)
108                             return false;
109                     }
110                 } else {
111                     for (var key in obj) {
112                         if (obj.hasOwnProperty(key)) {
113                             if(iterator.call(context, obj[key], key, obj) === false)
114                                 return false;
115                         }
116                     }
117                 }
118             },
119             inArray : function(arr,item){
120                 var index = -1;
121                 this.each(arr,function(v,i){
122                     if(v === item){
123                         index = i;
124                         return false;
125                     }
126                 });
127                 return index;
128             },
129             pushItem : function(arr,item){
130                 if(this.inArray(arr,item)==-1){
131                     arr.push(item)
132                 }
133             },
134             trim: function (str) {
135                 return str.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g, '');
136             },
137             indexOf: function (array, item, start) {
138                 var index = -1;
139                 start = this.isNumber(start) ? start : 0;
140                 this.each(array, function (v, i) {
141                     if (i >= start && v === item) {
142                         index = i;
143                         return false;
144                     }
145                 });
146                 return index;
147             },
148             hasClass: function (element, className) {
149                 className = className.replace(/(^[ ]+)|([ ]+$)/g, '').replace(/[ ]{2,}/g, ' ').split(' ');
150                 for (var i = 0, ci, cls = element.className; ci = className[i++];) {
151                     if (!new RegExp('\\b' + ci + '\\b', 'i').test(cls)) {
152                         return false;
153                     }
154                 }
155                 return i - 1 == className.length;
156             },
157             addClass:function (elm, classNames) {
158                 if(!elm)return;
159                 classNames = this.trim(classNames).replace(/[ ]{2,}/g,' ').split(' ');
160                 for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){
161                     if(!new RegExp('\\b' + ci + '\\b').test(cls)){
162                         cls += ' ' + ci;
163                     }
164                 }
165                 elm.className = utils.trim(cls);
166             },
167             removeClass:function (elm, classNames) {
168                 classNames = this.isArray(classNames) ? classNames :
169                     this.trim(classNames).replace(/[ ]{2,}/g,' ').split(' ');
170                 for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){
171                     cls = cls.replace(new RegExp('\\b' + ci + '\\b'),'')
172                 }
173                 cls = this.trim(cls).replace(/[ ]{2,}/g,' ');
174                 elm.className = cls;
175                 !cls && elm.removeAttribute('className');
176             },
177             on: function (element, type, handler) {
178                 var types = this.isArray(type) ? type : type.split(/\s+/),
179                     k = types.length;
180                 if (k) while (k--) {
181                     type = types[k];
182                     if (element.addEventListener) {
183                         element.addEventListener(type, handler, false);
184                     } else {
185                         if (!handler._d) {
186                             handler._d = {
187                                 els : []
188                             };
189                         }
190                         var key = type + handler.toString(),index = utils.indexOf(handler._d.els,element);
191                         if (!handler._d[key] || index == -1) {
192                             if(index == -1){
193                                 handler._d.els.push(element);
194                             }
195                             if(!handler._d[key]){
196                                 handler._d[key] = function (evt) {
197                                     return handler.call(evt.srcElement, evt || window.event);
198                                 };
199                             }
200
201
202                             element.attachEvent('on' + type, handler._d[key]);
203                         }
204                     }
205                 }
206                 element = null;
207             },
208             off: function (element, type, handler) {
209                 var types = this.isArray(type) ? type : type.split(/\s+/),
210                     k = types.length;
211                 if (k) while (k--) {
212                     type = types[k];
213                     if (element.removeEventListener) {
214                         element.removeEventListener(type, handler, false);
215                     } else {
216                         var key = type + handler.toString();
217                         try{
218                             element.detachEvent('on' + type, handler._d ? handler._d[key] : handler);
219                         }catch(e){}
220                         if (handler._d && handler._d[key]) {
221                             var index = utils.indexOf(handler._d.els,element);
222                             if(index!=-1){
223                                 handler._d.els.splice(index,1);
224                             }
225                             handler._d.els.length == 0 && delete handler._d[key];
226                         }
227                     }
228                 }
229             },
230             loadFile : function () {
231                 var tmpList = [];
232                 function getItem(doc,obj){
233                     try{
234                         for(var i= 0,ci;ci=tmpList[i++];){
235                             if(ci.doc === doc && ci.url == (obj.src || obj.href)){
236                                 return ci;
237                             }
238                         }
239                     }catch(e){
240                         return null;
241                     }
242
243                 }
244                 return function (doc, obj, fn) {
245                     var item = getItem(doc,obj);
246                     if (item) {
247                         if(item.ready){
248                             fn && fn();
249                         }else{
250                             item.funs.push(fn)
251                         }
252                         return;
253                     }
254                     tmpList.push({
255                         doc:doc,
256                         url:obj.src||obj.href,
257                         funs:[fn]
258                     });
259                     if (!doc.body) {
260                         var html = [];
261                         for(var p in obj){
262                             if(p == 'tag')continue;
263                             html.push(p + '="' + obj[p] + '"')
264                         }
265                         doc.write('<' + obj.tag + ' ' + html.join(' ') + ' ></'+obj.tag+'>');
266                         return;
267                     }
268                     if (obj.id && doc.getElementById(obj.id)) {
269                         return;
270                     }
271                     var element = doc.createElement(obj.tag);
272                     delete obj.tag;
273                     for (var p in obj) {
274                         element.setAttribute(p, obj[p]);
275                     }
276                     element.onload = element.onreadystatechange = function () {
277                         if (!this.readyState || /loaded|complete/.test(this.readyState)) {
278                             item = getItem(doc,obj);
279                             if (item.funs.length > 0) {
280                                 item.ready = 1;
281                                 for (var fi; fi = item.funs.pop();) {
282                                     fi();
283                                 }
284                             }
285                             element.onload = element.onreadystatechange = null;
286                         }
287                     };
288                     element.onerror = function(){
289                         throw Error('The load '+(obj.href||obj.src)+' fails,check the url')
290                     };
291                     doc.getElementsByTagName("head")[0].appendChild(element);
292                 }
293             }()
294     };
295     utils.each(['String', 'Function', 'Array', 'Number', 'RegExp', 'Object','Boolean'], function (v) {
296         utils['is' + v] = function (obj) {
297             return Object.prototype.toString.apply(obj) == '[object ' + v + ']';
298         }
299     });
300     var parselist = {};
301     UE.parse = {
302         register : function(parseName,fn){
303             parselist[parseName] = fn;
304         },
305         load : function(opt){
306             utils.each(parselist,function(v){
307                 v.call(opt,utils);
308             })
309         }
310     };
311     uParse = function(selector,opt){
312         utils.domReady(function(){
313             var contents;
314             if(document.querySelectorAll){
315                 contents = document.querySelectorAll(selector)
316             }else{
317                 if(/^#/.test(selector)){
318                     contents = [document.getElementById(selector.replace(/^#/,''))]
319                 }else if(/^\./.test(selector)){
320                     var contents = [];
321                     utils.each(document.getElementsByTagName('*'),function(node){
322                         if(node.className && new RegExp('\\b' + selector.replace(/^\./,'') + '\\b','i').test(node.className)){
323                             contents.push(node)
324                         }
325                     })
326                 }else{
327                     contents = document.getElementsByTagName(selector)
328                 }
329             }
330             utils.each(contents,function(v){
331                 UE.parse.load(utils.extend({root:v,selector:selector},opt))
332             })
333         })
334     }
335 })();
336
337 UE.parse.register('insertcode',function(utils){
338     var pres = this.root.getElementsByTagName('pre');
339     if(pres.length){
340         if(typeof XRegExp == "undefined"){
341             var jsurl,cssurl;
342             if(this.rootPath !== undefined){
343                 jsurl = utils.removeLastbs(this.rootPath)  + '/third-party/SyntaxHighlighter/shCore.js';
344                 cssurl = utils.removeLastbs(this.rootPath) + '/third-party/SyntaxHighlighter/shCoreDefault.css';
345             }else{
346                 jsurl = this.highlightJsUrl;
347                 cssurl = this.highlightCssUrl;
348             }
349             utils.loadFile(document,{
350                 id : "syntaxhighlighter_css",
351                 tag : "link",
352                 rel : "stylesheet",
353                 type : "text/css",
354                 href : cssurl
355             });
356             utils.loadFile(document,{
357                 id : "syntaxhighlighter_js",
358                 src : jsurl,
359                 tag : "script",
360                 type : "text/javascript",
361                 defer : "defer"
362             },function(){
363                 utils.each(pres,function(pi){
364                     if(pi && /brush/i.test(pi.className)){
365                         SyntaxHighlighter.highlight(pi);
366                     }
367                 });
368             });
369         }else{
370             utils.each(pres,function(pi){
371                 if(pi && /brush/i.test(pi.className)){
372                     SyntaxHighlighter.highlight(pi);
373                 }
374             });
375         }
376     }
377
378 });
379 UE.parse.register('table', function (utils) {
380     var me = this,
381         root = this.root,
382         tables = root.getElementsByTagName('table');
383     if (tables.length) {
384         var selector = this.selector;
385         //追加默认的表格样式
386         utils.cssRule('table',
387             selector + ' table.noBorderTable td,' +
388                 selector + ' table.noBorderTable th,' +
389                 selector + ' table.noBorderTable caption{border:1px dashed #ddd !important}' +
390                 selector + ' table.sortEnabled tr.firstRow th,' + selector + ' table.sortEnabled tr.firstRow td{padding-right:20px; background-repeat: no-repeat;' +
391                     'background-position: center right; background-image:url(' + this.rootPath + 'themes/default/images/sortable.png);}' +
392                 selector + ' table.sortEnabled tr.firstRow th:hover,' + selector + ' table.sortEnabled tr.firstRow td:hover{background-color: #EEE;}' +
393                 selector + ' table{margin-bottom:10px;border-collapse:collapse;display:table;}' +
394                 selector + ' td,' + selector + ' th{ background:white; padding: 5px 10px;border: 1px solid #DDD;}' +
395                 selector + ' caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}' +
396                 selector + ' th{border-top:1px solid #BBB;background:#F7F7F7;}' +
397                 selector + ' table tr.firstRow th{border-top:2px solid #BBB;background:#F7F7F7;}' +
398                 selector + ' tr.ue-table-interlace-color-single td{ background: #fcfcfc; }' +
399                 selector + ' tr.ue-table-interlace-color-double td{ background: #f7faff; }' +
400                 selector + ' td p{margin:0;padding:0;}',
401             document);
402         //填充空的单元格
403
404         utils.each('td th caption'.split(' '), function (tag) {
405             var cells = root.getElementsByTagName(tag);
406             cells.length && utils.each(cells, function (node) {
407                 if (!node.firstChild) {
408                     node.innerHTML = '&nbsp;';
409
410                 }
411             })
412         });
413
414         //表格可排序
415         var tables = root.getElementsByTagName('table');
416         utils.each(tables, function (table) {
417             if (/\bsortEnabled\b/.test(table.className)) {
418                 utils.on(table, 'click', function(e){
419                     var target = e.target || e.srcElement,
420                         cell = findParentByTagName(target, ['td', 'th']);
421                     var table = findParentByTagName(target, 'table'),
422                         colIndex = utils.indexOf(table.rows[0].cells, cell),
423                         sortType = table.getAttribute('data-sort-type');
424                     if(colIndex != -1) {
425                         sortTable(table, colIndex, me.tableSortCompareFn || sortType);
426                         updateTable(table);
427                     }
428                 });
429             }
430         });
431
432         //按照标签名查找父节点
433         function findParentByTagName(target, tagNames) {
434             var i, current = target;
435             tagNames = utils.isArray(tagNames) ? tagNames:[tagNames];
436             while(current){
437                 for(i = 0;i < tagNames.length; i++) {
438                     if(current.tagName == tagNames[i].toUpperCase()) return current;
439                 }
440                 current = current.parentNode;
441             }
442             return null;
443         }
444         //表格排序
445         function sortTable(table, sortByCellIndex, compareFn) {
446             var rows = table.rows,
447                 trArray = [],
448                 flag = rows[0].cells[0].tagName === "TH",
449                 lastRowIndex = 0;
450
451             for (var i = 0,len = rows.length; i < len; i++) {
452                 trArray[i] = rows[i];
453             }
454
455             var Fn = {
456                 'reversecurrent': function(td1,td2){
457                     return 1;
458                 },
459                 'orderbyasc': function(td1,td2){
460                     var value1 = td1.innerText||td1.textContent,
461                         value2 = td2.innerText||td2.textContent;
462                     return value1.localeCompare(value2);
463                 },
464                 'reversebyasc': function(td1,td2){
465                     var value1 = td1.innerHTML,
466                         value2 = td2.innerHTML;
467                     return value2.localeCompare(value1);
468                 },
469                 'orderbynum': function(td1,td2){
470                     var value1 = td1[utils.isIE ? 'innerText':'textContent'].match(/\d+/),
471                         value2 = td2[utils.isIE ? 'innerText':'textContent'].match(/\d+/);
472                     if(value1) value1 = +value1[0];
473                     if(value2) value2 = +value2[0];
474                     return (value1||0) - (value2||0);
475                 },
476                 'reversebynum': function(td1,td2){
477                     var value1 = td1[utils.isIE ? 'innerText':'textContent'].match(/\d+/),
478                         value2 = td2[utils.isIE ? 'innerText':'textContent'].match(/\d+/);
479                     if(value1) value1 = +value1[0];
480                     if(value2) value2 = +value2[0];
481                     return (value2||0) - (value1||0);
482                 }
483             };
484
485             //对表格设置排序的标记data-sort-type
486             table.setAttribute('data-sort-type', compareFn && typeof compareFn === "string" && Fn[compareFn] ? compareFn:'');
487
488             //th不参与排序
489             flag && trArray.splice(0, 1);
490             trArray = sort(trArray,function (tr1, tr2) {
491                 var result;
492                 if (compareFn && typeof compareFn === "function") {
493                     result = compareFn.call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]);
494                 } else if (compareFn && typeof compareFn === "number") {
495                     result = 1;
496                 } else if (compareFn && typeof compareFn === "string" && Fn[compareFn]) {
497                     result = Fn[compareFn].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]);
498                 } else {
499                     result = Fn['orderbyasc'].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]);
500                 }
501                 return result;
502             });
503             var fragment = table.ownerDocument.createDocumentFragment();
504             for (var j = 0, len = trArray.length; j < len; j++) {
505                 fragment.appendChild(trArray[j]);
506             }
507             var tbody = table.getElementsByTagName("tbody")[0];
508             if(!lastRowIndex){
509                 tbody.appendChild(fragment);
510             }else{
511                 tbody.insertBefore(fragment,rows[lastRowIndex- range.endRowIndex + range.beginRowIndex - 1])
512             }
513         }
514         //冒泡排序
515         function sort(array, compareFn){
516             compareFn = compareFn || function(item1, item2){ return item1.localeCompare(item2);};
517             for(var i= 0,len = array.length; i<len; i++){
518                 for(var j = i,length = array.length; j<length; j++){
519                     if(compareFn(array[i], array[j]) > 0){
520                         var t = array[i];
521                         array[i] = array[j];
522                         array[j] = t;
523                     }
524                 }
525             }
526             return array;
527         }
528         //更新表格
529         function updateTable(table) {
530             //给第一行设置firstRow的样式名称,在排序图标的样式上使用到
531             if(!utils.hasClass(table.rows[0], "firstRow")) {
532                 for(var i = 1; i< table.rows.length; i++) {
533                     utils.removeClass(table.rows[i], "firstRow");
534                 }
535                 utils.addClass(table.rows[0], "firstRow");
536             }
537         }
538     }
539 });
540 UE.parse.register('charts',function( utils ){
541
542     utils.cssRule('chartsContainerHeight','.edui-chart-container { height:'+(this.chartContainerHeight||300)+'px}');
543     var resourceRoot = this.rootPath,
544         containers = this.root,
545         sources = null;
546
547     //不存在指定的根路径, 则直接退出
548     if ( !resourceRoot ) {
549         return;
550     }
551
552     if ( sources = parseSources() ) {
553
554         loadResources();
555
556     }
557
558
559     function parseSources () {
560
561         if ( !containers ) {
562             return null;
563         }
564
565         return extractChartData( containers );
566
567     }
568
569     /**
570      * 提取数据
571      */
572     function extractChartData ( rootNode ) {
573
574         var data = [],
575             tables = rootNode.getElementsByTagName( "table" );
576
577         for ( var i = 0, tableNode; tableNode = tables[ i ]; i++ ) {
578
579             if ( tableNode.getAttribute( "data-chart" ) !== null ) {
580
581                 data.push( formatData( tableNode ) );
582
583             }
584
585         }
586
587         return data.length ? data : null;
588
589     }
590
591     function formatData ( tableNode ) {
592
593         var meta = tableNode.getAttribute( "data-chart" ),
594             metaConfig = {},
595             data = [];
596
597         //提取table数据
598         for ( var i = 0, row; row = tableNode.rows[ i ]; i++ ) {
599
600             var rowData = [];
601
602             for ( var j = 0, cell; cell = row.cells[ j ]; j++ ) {
603
604                 var value = ( cell.innerText || cell.textContent || '' );
605                 rowData.push( cell.tagName == 'TH' ? value:(value | 0) );
606
607             }
608
609             data.push( rowData );
610
611         }
612
613         //解析元信息
614         meta = meta.split( ";" );
615         for ( var i = 0, metaData; metaData = meta[ i ]; i++ ) {
616
617             metaData = metaData.split( ":" );
618             metaConfig[ metaData[ 0 ] ] = metaData[ 1 ];
619
620         }
621
622
623         return {
624             table: tableNode,
625             meta: metaConfig,
626             data: data
627         };
628
629     }
630
631     //加载资源
632     function loadResources () {
633
634         loadJQuery();
635
636     }
637
638     function loadJQuery () {
639
640         //不存在jquery, 则加载jquery
641         if ( !window.jQuery ) {
642
643             utils.loadFile(document,{
644                 src : resourceRoot + "/third-party/jquery-1.10.2.min.js",
645                 tag : "script",
646                 type : "text/javascript",
647                 defer : "defer"
648             },function(){
649
650                 loadHighcharts();
651
652             });
653
654         } else {
655
656             loadHighcharts();
657
658         }
659
660     }
661
662     function loadHighcharts () {
663
664         //不存在Highcharts, 则加载Highcharts
665         if ( !window.Highcharts ) {
666
667             utils.loadFile(document,{
668                 src : resourceRoot + "/third-party/highcharts/highcharts.js",
669                 tag : "script",
670                 type : "text/javascript",
671                 defer : "defer"
672             },function(){
673
674                 loadTypeConfig();
675
676             });
677
678         } else {
679
680             loadTypeConfig();
681
682         }
683
684     }
685
686     //加载图表差异化配置文件
687     function loadTypeConfig () {
688
689         utils.loadFile(document,{
690             src : resourceRoot + "/dialogs/charts/chart.config.js",
691             tag : "script",
692             type : "text/javascript",
693             defer : "defer"
694         },function(){
695
696             render();
697
698         });
699
700     }
701
702     //渲染图表
703     function render () {
704
705         var config = null,
706             chartConfig = null,
707             container = null;
708
709         for ( var i = 0, len = sources.length; i < len; i++ ) {
710
711             config = sources[ i ];
712
713             chartConfig = analysisConfig( config );
714
715             container = createContainer( config.table );
716
717             renderChart( container, typeConfig[ config.meta.chartType ], chartConfig );
718
719         }
720
721
722     }
723
724     /**
725      * 渲染图表
726      * @param container 图表容器节点对象
727      * @param typeConfig 图表类型配置
728      * @param config 图表通用配置
729      * */
730     function renderChart ( container, typeConfig, config ) {
731
732
733         $( container ).highcharts( $.extend( {}, typeConfig, {
734
735             credits: {
736                 enabled: false
737             },
738             exporting: {
739                 enabled: false
740             },
741             title: {
742                 text: config.title,
743                 x: -20 //center
744             },
745             subtitle: {
746                 text: config.subTitle,
747                 x: -20
748             },
749             xAxis: {
750                 title: {
751                     text: config.xTitle
752                 },
753                 categories: config.categories
754             },
755             yAxis: {
756                 title: {
757                     text: config.yTitle
758                 },
759                 plotLines: [{
760                     value: 0,
761                     width: 1,
762                     color: '#808080'
763                 }]
764             },
765             tooltip: {
766                 enabled: true,
767                 valueSuffix: config.suffix
768             },
769             legend: {
770                 layout: 'vertical',
771                 align: 'right',
772                 verticalAlign: 'middle',
773                 borderWidth: 1
774             },
775             series: config.series
776
777         } ));
778
779     }
780
781     /**
782      * 创建图表的容器
783      * 新创建的容器会替换掉对应的table对象
784      * */
785     function createContainer ( tableNode ) {
786
787         var container = document.createElement( "div" );
788         container.className = "edui-chart-container";
789
790         tableNode.parentNode.replaceChild( container, tableNode );
791
792         return container;
793
794     }
795
796     //根据config解析出正确的类别和图表数据信息
797     function analysisConfig ( config ) {
798
799         var series = [],
800         //数据类别
801             categories = [],
802             result = [],
803             data = config.data,
804             meta = config.meta;
805
806         //数据对齐方式为相反的方式, 需要反转数据
807         if ( meta.dataFormat != "1" ) {
808
809             for ( var i = 0, len = data.length; i < len ; i++ ) {
810
811                 for ( var j = 0, jlen = data[ i ].length; j < jlen; j++ ) {
812
813                     if ( !result[ j ] ) {
814                         result[ j ] = [];
815                     }
816
817                     result[ j ][ i ] = data[ i ][ j ];
818
819                 }
820
821             }
822
823             data = result;
824
825         }
826
827         result = {};
828
829         //普通图表
830         if ( meta.chartType != typeConfig.length - 1 ) {
831
832             categories = data[ 0 ].slice( 1 );
833
834             for ( var i = 1, curData; curData = data[ i ]; i++ ) {
835                 series.push( {
836                     name: curData[ 0 ],
837                     data: curData.slice( 1 )
838                 } );
839             }
840
841             result.series = series;
842             result.categories = categories;
843             result.title = meta.title;
844             result.subTitle = meta.subTitle;
845             result.xTitle = meta.xTitle;
846             result.yTitle = meta.yTitle;
847             result.suffix = meta.suffix;
848
849         } else {
850
851             var curData = [];
852
853             for ( var i = 1, len = data[ 0 ].length; i < len; i++ ) {
854
855                 curData.push( [ data[ 0 ][ i ], data[ 1 ][ i ] | 0 ] );
856
857             }
858
859             //饼图
860             series[ 0 ] = {
861                 type: 'pie',
862                 name: meta.tip,
863                 data: curData
864             };
865
866             result.series = series;
867             result.title = meta.title;
868             result.suffix = meta.suffix;
869
870         }
871
872         return result;
873
874     }
875
876 });
877 UE.parse.register('background', function (utils) {
878     var me = this,
879         root = me.root,
880         p = root.getElementsByTagName('p'),
881         styles;
882
883     for (var i = 0,ci; ci = p[i++];) {
884         styles = ci.getAttribute('data-background');
885         if (styles){
886             ci.parentNode.removeChild(ci);
887         }
888     }
889
890     //追加默认的表格样式
891     styles && utils.cssRule('ueditor_background', me.selector + '{' + styles + '}', document);
892 });
893 UE.parse.register('list',function(utils){
894     var customCss = [],
895         customStyle = {
896             'cn'    :   'cn-1-',
897             'cn1'   :   'cn-2-',
898             'cn2'   :   'cn-3-',
899             'num'   :   'num-1-',
900             'num1'  :   'num-2-',
901             'num2'  :   'num-3-',
902             'dash'  :   'dash',
903             'dot'   :   'dot'
904         };
905
906
907     utils.extend(this,{
908         liiconpath : 'http://bs.baidu.com/listicon/',
909         listDefaultPaddingLeft : '20'
910     });
911
912     var root = this.root,
913         ols = root.getElementsByTagName('ol'),
914         uls = root.getElementsByTagName('ul'),
915         selector = this.selector;
916
917     if(ols.length){
918         applyStyle.call(this,ols);
919     }
920
921     if(uls.length){
922         applyStyle.call(this,uls);
923     }
924
925     if(ols.length || uls.length){
926         customCss.push(selector +' .list-paddingleft-1{padding-left:0}');
927         customCss.push(selector +' .list-paddingleft-2{padding-left:'+ this.listDefaultPaddingLeft+'px}');
928         customCss.push(selector +' .list-paddingleft-3{padding-left:'+ this.listDefaultPaddingLeft*2+'px}');
929
930         utils.cssRule('list', selector +' ol,'+selector +' ul{margin:0;padding:0;}li{clear:both;}'+customCss.join('\n'), document);
931     }
932     function applyStyle(nodes){
933         var T = this;
934         utils.each(nodes,function(list){
935             if(list.className && /custom_/i.test(list.className)){
936                 var listStyle = list.className.match(/custom_(\w+)/)[1];
937                 if(listStyle == 'dash' || listStyle == 'dot'){
938                     utils.pushItem(customCss,selector +' li.list-' + customStyle[listStyle] + '{background-image:url(' + T.liiconpath +customStyle[listStyle]+'.gif)}');
939                     utils.pushItem(customCss,selector +' ul.custom_'+listStyle+'{list-style:none;} '+ selector +' ul.custom_'+listStyle+' li{background-position:0 3px;background-repeat:no-repeat}');
940
941                 }else{
942                     var index = 1;
943                     utils.each(list.childNodes,function(li){
944                         if(li.tagName == 'LI'){
945                             utils.pushItem(customCss,selector + ' li.list-' + customStyle[listStyle] + index + '{background-image:url(' + T.liiconpath  + 'list-'+customStyle[listStyle] +index + '.gif)}');
946                             index++;
947                         }
948                     });
949                     utils.pushItem(customCss,selector + ' ol.custom_'+listStyle+'{list-style:none;}'+selector+' ol.custom_'+listStyle+' li{background-position:0 3px;background-repeat:no-repeat}');
950                 }
951                 switch(listStyle){
952                     case 'cn':
953                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:25px}');
954                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:40px}');
955                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-3{padding-left:55px}');
956                         break;
957                     case 'cn1':
958                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:30px}');
959                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:40px}');
960                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-3{padding-left:55px}');
961                         break;
962                     case 'cn2':
963                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:40px}');
964                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:55px}');
965                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-3{padding-left:68px}');
966                         break;
967                     case 'num':
968                     case 'num1':
969                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:25px}');
970                         break;
971                     case 'num2':
972                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-1{padding-left:35px}');
973                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft-2{padding-left:40px}');
974                         break;
975                     case 'dash':
976                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft{padding-left:35px}');
977                         break;
978                     case 'dot':
979                         utils.pushItem(customCss,selector + ' li.list-'+listStyle+'-paddingleft{padding-left:20px}');
980                 }
981             }
982         });
983     }
984
985
986 });
987 UE.parse.register('vedio',function(utils){
988     var video = this.root.getElementsByTagName('video'),
989         audio = this.root.getElementsByTagName('audio');
990
991     document.createElement('video');document.createElement('audio');
992     if(video.length || audio.length){
993         var sourcePath = utils.removeLastbs(this.rootPath),
994             jsurl = sourcePath + '/third-party/video-js/video.js',
995             cssurl = sourcePath + '/third-party/video-js/video-js.min.css',
996             swfUrl = sourcePath + '/third-party/video-js/video-js.swf';
997
998         if(window.videojs) {
999             videojs.autoSetup();
1000         } else {
1001             utils.loadFile(document,{
1002                 id : "video_css",
1003                 tag : "link",
1004                 rel : "stylesheet",
1005                 type : "text/css",
1006                 href : cssurl
1007             });
1008             utils.loadFile(document,{
1009                 id : "video_js",
1010                 src : jsurl,
1011                 tag : "script",
1012                 type : "text/javascript"
1013             },function(){
1014                 videojs.options.flash.swf = swfUrl;
1015                 videojs.autoSetup();
1016             });
1017         }
1018
1019     }
1020 });
1021
1022 })();