');
+ p.push('
');
+ for (var i = 0, tmpList; tmpList = data[i++];) {
+ panels.push('panel' + i);
+ pages.push('page' + i);
+ if (i == 1) {
+ s.push('
');
+ if (data.length != 1) {
+ t.push('
' + (i ) + '
');
+ }
+ } else {
+ s.push('
');
+ t.push('
' + (i ) + '
');
+ }
+ s.push('
');
+ s.push('
' + lang.chapter + '' + lang.singer
+ + '' + lang.special + '' + lang.listenTest + '
');
+ for (var j = 0, tmpObj; tmpObj = tmpList[j++];) {
+ s.push('
');
+ }
+ s.push('
');
+ s.push('
');
+ }
+ t.reverse();
+ p.push(t.join(''));
+ s.push('
');
+ p.push('
');
+ return s.join('') + p.join('');
+ },
+ exec:function () {
+ var me = this;
+ if (selectedItem == null) return;
+ $G('J_preview').innerHTML = "";
+ editor.execCommand('music', {
+ url:me._getUrl(false),
+ width:400,
+ height:95
+ });
+ }
+ };
+})();
+
+
+
diff --git a/public/lib/UEditor/dialogs/preview/preview.html b/public/lib/UEditor/dialogs/preview/preview.html
new file mode 100644
index 00000000..f6b433bc
--- /dev/null
+++ b/public/lib/UEditor/dialogs/preview/preview.html
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/scrawl/images/eraser.png.REMOVED.git-id b/public/lib/UEditor/dialogs/scrawl/images/eraser.png.REMOVED.git-id
new file mode 100644
index 00000000..53c71031
--- /dev/null
+++ b/public/lib/UEditor/dialogs/scrawl/images/eraser.png.REMOVED.git-id
@@ -0,0 +1 @@
+63e87cecb90ed3ac0e4acbc257c6dddae5311e09
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/scrawl/scrawl.css b/public/lib/UEditor/dialogs/scrawl/scrawl.css
new file mode 100644
index 00000000..4ea30c6e
--- /dev/null
+++ b/public/lib/UEditor/dialogs/scrawl/scrawl.css
@@ -0,0 +1,72 @@
+/*common
+*/
+body{margin: 0;}
+table{width:100%;}
+table td{padding:2px 4px;vertical-align: middle;}
+a{text-decoration: none;}
+em{font-style: normal;}
+.border_style1{border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}
+/*module
+*/
+.main{margin: 8px;overflow: hidden;}
+
+.hot{float:left;height:335px;}
+.drawBoard{position: relative; cursor: crosshair;}
+.brushBorad{position: absolute;left:0;top:0;z-index: 998;}
+.picBoard{border: none;text-align: center;line-height: 300px;cursor: default;}
+.operateBar{margin-top:10px;font-size:12px;text-align: center;}
+.operateBar span{margin-left: 10px;}
+
+.drawToolbar{float:right;width:110px;height:300px;overflow: hidden;}
+.colorBar{margin-top:10px;font-size: 12px;text-align: center;}
+.colorBar a{display:block;width: 10px;height: 10px;border:1px solid #1006F1;border-radius: 3px; box-shadow:2px 2px 5px #d3d6da;opacity: 0.3}
+.sectionBar{margin-top:15px;font-size: 12px;text-align: center;}
+.sectionBar a{display:inline-block;width:10px;height:12px;color: #888;text-indent: -999px;opacity: 0.3}
+.size1{background: url('images/size.png') 1px center no-repeat ;}
+.size2{background: url('images/size.png') -10px center no-repeat;}
+.size3{background: url('images/size.png') -22px center no-repeat;}
+.size4{background: url('images/size.png') -35px center no-repeat;}
+
+.addImgH{position: relative;}
+.addImgH_form{position: absolute;left: 18px;top: -1px;width: 75px;height: 21px;opacity: 0;cursor: pointer;}
+.addImgH_form input{width: 100%;}
+/*scrawl遮罩层
+*/
+.maskLayerNull{display: none;}
+.maskLayer{position: absolute;top:0;left:0;width: 100%; height: 100%;opacity: 0.7;
+ background-color: #fff;text-align:center;font-weight:bold;line-height:300px;z-index: 1000;}
+/*btn state
+*/
+.previousStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undoH.png');cursor: pointer;}
+.previousStepH .text{color:#888;cursor:pointer;}
+.previousStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/undo.png');cursor:default;}
+.previousStep .text{color:#ccc;cursor:default;}
+
+.nextStepH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redoH.png');cursor: pointer;}
+.nextStepH .text{color:#888;cursor:pointer;}
+.nextStep .icon{display: inline-block;width:16px;height:16px;background-image: url('images/redo.png');cursor:default;}
+.nextStep .text{color:#ccc;cursor:default;}
+
+.clearBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/emptyH.png');cursor: pointer;}
+.clearBoardH .text{color:#888;cursor:pointer;}
+.clearBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/empty.png');cursor:default;}
+.clearBoard .text{color:#ccc;cursor:default;}
+
+.scaleBoardH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scaleH.png');cursor: pointer;}
+.scaleBoardH .text{color:#888;cursor:pointer;}
+.scaleBoard .icon{display: inline-block;width:16px;height:16px;background-image: url('images/scale.png');cursor:default;}
+.scaleBoard .text{color:#ccc;cursor:default;}
+
+.removeImgH .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimgH.png');cursor: pointer;}
+.removeImgH .text{color:#888;cursor:pointer;}
+.removeImg .icon{display: inline-block;width:16px;height:16px;background-image: url('images/delimg.png');cursor:default;}
+.removeImg .text{color:#ccc;cursor:default;}
+
+.addImgH .icon{vertical-align:top;display: inline-block;width:16px;height:16px;background-image: url('images/addimg.png')}
+.addImgH .text{color:#888;cursor:pointer;}
+/*icon
+*/
+.brushIcon{display: inline-block;width:16px;height:16px;background-image: url('images/brush.png')}
+.eraserIcon{display: inline-block;width:16px;height:16px;background-image: url('images/eraser.png')}
+
+
diff --git a/public/lib/UEditor/dialogs/scrawl/scrawl.html b/public/lib/UEditor/dialogs/scrawl/scrawl.html
new file mode 100644
index 00000000..13f6ab13
--- /dev/null
+++ b/public/lib/UEditor/dialogs/scrawl/scrawl.html
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/scrawl/scrawl.js.REMOVED.git-id b/public/lib/UEditor/dialogs/scrawl/scrawl.js.REMOVED.git-id
new file mode 100644
index 00000000..ad45f3d4
--- /dev/null
+++ b/public/lib/UEditor/dialogs/scrawl/scrawl.js.REMOVED.git-id
@@ -0,0 +1 @@
+cadb0cb2fe5a7c08299f3a9fb3ddcc230a71ca74
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/searchreplace/searchreplace.html b/public/lib/UEditor/dialogs/searchreplace/searchreplace.html
new file mode 100644
index 00000000..b3eaaa5c
--- /dev/null
+++ b/public/lib/UEditor/dialogs/searchreplace/searchreplace.html
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/searchreplace/searchreplace.js b/public/lib/UEditor/dialogs/searchreplace/searchreplace.js
new file mode 100644
index 00000000..b55bb7ae
--- /dev/null
+++ b/public/lib/UEditor/dialogs/searchreplace/searchreplace.js
@@ -0,0 +1,164 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-9-26
+ * Time: 下午12:29
+ * To change this template use File | Settings | File Templates.
+ */
+
+//清空上次查选的痕迹
+editor.firstForSR = 0;
+editor.currentRangeForSR = null;
+//给tab注册切换事件
+/**
+ * tab点击处理事件
+ * @param tabHeads
+ * @param tabBodys
+ * @param obj
+ */
+function clickHandler( tabHeads,tabBodys,obj ) {
+ //head样式更改
+ for ( var k = 0, len = tabHeads.length; k < len; k++ ) {
+ tabHeads[k].className = "";
+ }
+ obj.className = "focus";
+ //body显隐
+ var tabSrc = obj.getAttribute( "tabSrc" );
+ for ( var j = 0, length = tabBodys.length; j < length; j++ ) {
+ var body = tabBodys[j],
+ id = body.getAttribute( "id" );
+ if ( id != tabSrc ) {
+ body.style.zIndex = 1;
+ } else {
+ body.style.zIndex = 200;
+ }
+ }
+
+}
+
+/**
+ * TAB切换
+ * @param tabParentId tab的父节点ID或者对象本身
+ */
+function switchTab( tabParentId ) {
+ var tabElements = $G( tabParentId ).children,
+ tabHeads = tabElements[0].children,
+ tabBodys = tabElements[1].children;
+
+ for ( var i = 0, length = tabHeads.length; i < length; i++ ) {
+ var head = tabHeads[i];
+ if ( head.className === "focus" )clickHandler(tabHeads,tabBodys, head );
+ head.onclick = function () {
+ clickHandler(tabHeads,tabBodys,this);
+ }
+ }
+}
+$G('searchtab').onmousedown = function(){
+ $G('search-msg').innerHTML = '';
+ $G('replace-msg').innerHTML = ''
+}
+//是否区分大小写
+function getMatchCase(id) {
+ return $G(id).checked ? true : false;
+}
+//查找
+$G("nextFindBtn").onclick = function (txt, dir, mcase) {
+ var findtxt = $G("findtxt").value, obj;
+ if (!findtxt) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ dir:1,
+ casesensitive:getMatchCase("matchCase")
+ };
+ if (!frCommond(obj)) {
+ var bk = editor.selection.getRange().createBookmark();
+ $G('search-msg').innerHTML = lang.getEnd;
+ editor.selection.getRange().moveToBookmark(bk).select();
+
+
+ }
+};
+$G("nextReplaceBtn").onclick = function (txt, dir, mcase) {
+ var findtxt = $G("findtxt1").value, obj;
+ if (!findtxt) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ dir:1,
+ casesensitive:getMatchCase("matchCase1")
+ };
+ frCommond(obj);
+};
+$G("preFindBtn").onclick = function (txt, dir, mcase) {
+ var findtxt = $G("findtxt").value, obj;
+ if (!findtxt) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ dir:-1,
+ casesensitive:getMatchCase("matchCase")
+ };
+ if (!frCommond(obj)) {
+ $G('search-msg').innerHTML = lang.getStart;
+ }
+};
+$G("preReplaceBtn").onclick = function (txt, dir, mcase) {
+ var findtxt = $G("findtxt1").value, obj;
+ if (!findtxt) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ dir:-1,
+ casesensitive:getMatchCase("matchCase1")
+ };
+ frCommond(obj);
+};
+//替换
+$G("repalceBtn").onclick = function () {
+ var findtxt = $G("findtxt1").value.replace(/^\s|\s$/g, ""), obj,
+ replacetxt = $G("replacetxt").value.replace(/^\s|\s$/g, "");
+ if (!findtxt) {
+ return false;
+ }
+ if (findtxt == replacetxt || (!getMatchCase("matchCase1") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ dir:1,
+ casesensitive:getMatchCase("matchCase1"),
+ replaceStr:replacetxt
+ };
+ frCommond(obj);
+};
+//全部替换
+$G("repalceAllBtn").onclick = function () {
+ var findtxt = $G("findtxt1").value.replace(/^\s|\s$/g, ""), obj,
+ replacetxt = $G("replacetxt").value.replace(/^\s|\s$/g, "");
+ if (!findtxt) {
+ return false;
+ }
+ if (findtxt == replacetxt || (!getMatchCase("matchCase1") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {
+ return false;
+ }
+ obj = {
+ searchStr:findtxt,
+ casesensitive:getMatchCase("matchCase1"),
+ replaceStr:replacetxt,
+ all:true
+ };
+ var num = frCommond(obj);
+ if (num) {
+ $G('replace-msg').innerHTML = lang.countMsg.replace("{#count}", num);
+ }
+};
+//执行
+var frCommond = function (obj) {
+ return editor.execCommand("searchreplace", obj);
+};
+switchTab("searchtab");
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/snapscreen/snapscreen.html b/public/lib/UEditor/dialogs/snapscreen/snapscreen.html
new file mode 100644
index 00000000..f3593268
--- /dev/null
+++ b/public/lib/UEditor/dialogs/snapscreen/snapscreen.html
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/spechars/spechars.html b/public/lib/UEditor/dialogs/spechars/spechars.html
new file mode 100644
index 00000000..d92f5150
--- /dev/null
+++ b/public/lib/UEditor/dialogs/spechars/spechars.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/spechars/spechars.js b/public/lib/UEditor/dialogs/spechars/spechars.js
new file mode 100644
index 00000000..bd3b36d3
--- /dev/null
+++ b/public/lib/UEditor/dialogs/spechars/spechars.js
@@ -0,0 +1,57 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-9-26
+ * Time: 下午1:09
+ * To change this template use File | Settings | File Templates.
+ */
+var charsContent = [
+ { name:"tsfh", title:lang.tsfh, content:toArray("、,。,·,ˉ,ˇ,¨,〃,々,—,~,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,$,¤,¢,£,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,¬,¦,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞")},
+ { name:"lmsz", title:lang.lmsz, content:toArray("ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ")},
+ { name:"szfh", title:lang.szfh, content:toArray("⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩")},
+ { name:"rwfh", title:lang.rwfh, content:toArray("ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ")},
+ { name:"xlzm", title:lang.xlzm, content:toArray("Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω")},
+ { name:"ewzm", title:lang.ewzm, content:toArray("А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я")},
+ { name:"pyzm", title:lang.pyzm, content:toArray("ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü")},
+ { name:"yyyb", title:lang.yyyb, content:toArray("i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,")},
+ { name:"zyzf", title:lang.zyzf, content:toArray("ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ")}
+];
+(function createTab(content) {
+ for (var i = 0, ci; ci = content[i++];) {
+ var span = document.createElement("span");
+ span.setAttribute("tabSrc", ci.name);
+ span.innerHTML = ci.title;
+ if (i == 1)span.className = "focus";
+ domUtils.on(span, "click", function () {
+ var tmps = $G("tabHeads").children;
+ for (var k = 0, sk; sk = tmps[k++];) {
+ sk.className = "";
+ }
+ tmps = $G("tabBodys").children;
+ for (var k = 0, sk; sk = tmps[k++];) {
+ sk.style.display = "none";
+ }
+ this.className = "focus";
+ $G(this.getAttribute("tabSrc")).style.display = "";
+ });
+ $G("tabHeads").appendChild(span);
+ domUtils.insertAfter(span, document.createTextNode("\n"));
+ var div = document.createElement("div");
+ div.id = ci.name;
+ div.style.display = (i == 1) ? "" : "none";
+ var cons = ci.content;
+ for (var j = 0, con; con = cons[j++];) {
+ var charSpan = document.createElement("span");
+ charSpan.innerHTML = con;
+ domUtils.on(charSpan, "click", function () {
+ editor.execCommand("insertHTML", this.innerHTML);
+ dialog.close();
+ });
+ div.appendChild(charSpan);
+ }
+ $G("tabBodys").appendChild(div);
+ }
+})(charsContent);
+function toArray(str) {
+ return str.split(",");
+}
diff --git a/public/lib/UEditor/dialogs/table/edittable.css b/public/lib/UEditor/dialogs/table/edittable.css
new file mode 100644
index 00000000..c6f9396c
--- /dev/null
+++ b/public/lib/UEditor/dialogs/table/edittable.css
@@ -0,0 +1,84 @@
+body{
+ overflow: hidden;
+ width: 540px;
+}
+.wrapper {
+ margin: 10px auto 0;
+ font-size: 12px;
+ overflow: hidden;
+ width: 520px;
+ height: 315px;
+}
+
+.clear {
+ clear: both;
+}
+
+.wrapper .left {
+ float: left;
+ margin-left: 10px;;
+}
+
+.wrapper .right {
+ float: right;
+ border-left: 2px dotted #EDEDED;
+ padding-left: 15px;
+}
+
+.section {
+ margin-bottom: 15px;
+ width: 240px;
+ overflow: hidden;
+}
+
+.section h3 {
+ font-weight: bold;
+ padding: 5px 0;
+ margin-bottom: 10px;
+ border-bottom: 1px solid #EDEDED;
+ font-size: 12px;
+}
+
+.section ul {
+ list-style: none;
+ overflow: hidden;
+ clear: both;
+
+}
+
+.section li {
+ float: left;
+ width: 120px;;
+}
+
+.section .tone {
+ width: 80px;;
+}
+
+.section .preview {
+ width: 220px;
+}
+
+.section .preview table {
+ text-align: center;
+ vertical-align: middle;
+ color: #666;
+}
+
+.section .preview caption {
+ font-weight: bold;
+}
+
+.section .preview td {
+ border-width: 1px;
+ border-style: solid;
+ height: 22px;
+}
+
+.section .preview th {
+ border-style: solid;
+ border-color: #DDD;
+ border-width: 2px 1px 1px 1px;
+ height: 22px;
+ background-color: #F7F7F7;
+}
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/table/edittable.html b/public/lib/UEditor/dialogs/table/edittable.html
new file mode 100644
index 00000000..3c412fb8
--- /dev/null
+++ b/public/lib/UEditor/dialogs/table/edittable.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/table/edittable.js b/public/lib/UEditor/dialogs/table/edittable.js
new file mode 100644
index 00000000..11dbee7c
--- /dev/null
+++ b/public/lib/UEditor/dialogs/table/edittable.js
@@ -0,0 +1,237 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-12-19
+ * Time: 下午4:55
+ * To change this template use File | Settings | File Templates.
+ */
+(function () {
+ var title = $G("J_title"),
+ titleCol = $G("J_titleCol"),
+ caption = $G("J_caption"),
+ sorttable = $G("J_sorttable"),
+ autoSizeContent = $G("J_autoSizeContent"),
+ autoSizePage = $G("J_autoSizePage"),
+ tone = $G("J_tone"),
+ me,
+ preview = $G("J_preview");
+
+ var editTable = function () {
+ me = this;
+ me.init();
+ };
+ editTable.prototype = {
+ init:function () {
+ var colorPiker = new UE.ui.ColorPicker({
+ editor:editor
+ }),
+ colorPop = new UE.ui.Popup({
+ editor:editor,
+ content:colorPiker
+ });
+
+ title.checked = editor.queryCommandState("inserttitle") == -1;
+ titleCol.checked = editor.queryCommandState("inserttitlecol") == -1;
+ caption.checked = editor.queryCommandState("insertcaption") == -1;
+ sorttable.checked = editor.queryCommandState("enablesort") == 1;
+
+ var enablesortState = editor.queryCommandState("enablesort"),
+ disablesortState = editor.queryCommandState("disablesort");
+
+ sorttable.checked = !!(enablesortState < 0 && disablesortState >=0);
+ sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0);
+ sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg:'';
+
+ me.createTable(title.checked, titleCol.checked, caption.checked);
+ me.setAutoSize();
+ me.setColor(me.getColor());
+
+ domUtils.on(title, "click", me.titleHanler);
+ domUtils.on(titleCol, "click", me.titleColHanler);
+ domUtils.on(caption, "click", me.captionHanler);
+ domUtils.on(sorttable, "click", me.sorttableHanler);
+ domUtils.on(autoSizeContent, "click", me.autoSizeContentHanler);
+ domUtils.on(autoSizePage, "click", me.autoSizePageHanler);
+
+ domUtils.on(tone, "click", function () {
+ colorPop.showAnchor(tone);
+ });
+ domUtils.on(document, 'mousedown', function () {
+ colorPop.hide();
+ });
+ colorPiker.addListener("pickcolor", function () {
+ me.setColor(arguments[1]);
+ colorPop.hide();
+ });
+ colorPiker.addListener("picknocolor", function () {
+ me.setColor("");
+ colorPop.hide();
+ });
+ },
+
+ createTable:function (hasTitle, hasTitleCol, hasCaption) {
+ var arr = [],
+ sortSpan = '
^';
+ arr.push("
");
+ if (hasCaption) {
+ arr.push("" + lang.captionName + "")
+ }
+ if (hasTitle) {
+ arr.push("");
+ if(hasTitleCol) { arr.push("| " + lang.titleName + " | "); }
+ for (var j = 0; j < 5; j++) {
+ arr.push("" + lang.titleName + " | ");
+ }
+ arr.push("
");
+ }
+ for (var i = 0; i < 6; i++) {
+ arr.push("");
+ if(hasTitleCol) { arr.push("| " + lang.titleName + " | ") }
+ for (var k = 0; k < 5; k++) {
+ arr.push("" + lang.cellsName + " | ")
+ }
+ arr.push("
");
+ }
+ arr.push("
");
+ preview.innerHTML = arr.join("");
+ this.updateSortSpan();
+ },
+ titleHanler:function () {
+ var example = $G("J_example"),
+ frg=document.createDocumentFragment(),
+ color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"),
+ colCount = example.rows[0].children.length;
+
+ if (title.checked) {
+ example.insertRow(0);
+ for (var i = 0, node; i < colCount; i++) {
+ node = document.createElement("th");
+ node.innerHTML = lang.titleName;
+ frg.appendChild(node);
+ }
+ example.rows[0].appendChild(frg);
+
+ } else {
+ domUtils.remove(example.rows[0]);
+ }
+ me.setColor(color);
+ me.updateSortSpan();
+ },
+ titleColHanler:function () {
+ var example = $G("J_example"),
+ color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, "td")[0], "border-color"),
+ colArr = example.rows,
+ colCount = colArr.length;
+
+ if (titleCol.checked) {
+ for (var i = 0, node; i < colCount; i++) {
+ node = document.createElement("th");
+ node.innerHTML = lang.titleName;
+ colArr[i].insertBefore(node, colArr[i].children[0]);
+ }
+ } else {
+ for (var i = 0; i < colCount; i++) {
+ domUtils.remove(colArr[i].children[0]);
+ }
+ }
+ me.setColor(color);
+ me.updateSortSpan();
+ },
+ captionHanler:function () {
+ var example = $G("J_example");
+ if (caption.checked) {
+ var row = document.createElement('caption');
+ row.innerHTML = lang.captionName;
+ example.insertBefore(row, example.firstChild);
+ } else {
+ domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]);
+ }
+ },
+ sorttableHanler:function(){
+ me.updateSortSpan();
+ },
+ autoSizeContentHanler:function () {
+ var example = $G("J_example");
+ example.removeAttribute("width");
+ },
+ autoSizePageHanler:function () {
+ var example = $G("J_example");
+ var tds = example.getElementsByTagName(example, "td");
+ utils.each(tds, function (td) {
+ td.removeAttribute("width");
+ });
+ example.setAttribute('width', '100%');
+ },
+ updateSortSpan: function(){
+ var example = $G("J_example"),
+ row = example.rows[0];
+
+ var spans = domUtils.getElementsByTagName(example,"span");
+ utils.each(spans,function(span){
+ span.parentNode.removeChild(span);
+ });
+ if (sorttable.checked) {
+ utils.each(row.cells, function(cell, i){
+ var span = document.createElement("span");
+ span.innerHTML = "^";
+ cell.appendChild(span);
+ });
+ }
+ },
+ getColor:function () {
+ var start = editor.selection.getStart(), color,
+ cell = domUtils.findParentByTagName(start, ["td", "th", "caption"], true);
+ color = cell && domUtils.getComputedStyle(cell, "border-color");
+ if (!color) color = "#DDDDDD";
+ return color;
+ },
+ setColor:function (color) {
+ var example = $G("J_example"),
+ arr = domUtils.getElementsByTagName(example, "td").concat(
+ domUtils.getElementsByTagName(example, "th"),
+ domUtils.getElementsByTagName(example, "caption")
+ );
+
+ tone.value = color;
+ utils.each(arr, function (node) {
+ node.style.borderColor = color;
+ });
+
+ },
+ setAutoSize:function () {
+ var me = this;
+ autoSizePage.checked = true;
+ me.autoSizePageHanler();
+ }
+ };
+
+ new editTable;
+
+ dialog.onok = function () {
+ editor.__hasEnterExecCommand = true;
+
+ var checks = {
+ title:"inserttitle deletetitle",
+ titleCol:"inserttitlecol deletetitlecol",
+ caption:"insertcaption deletecaption",
+ sorttable:"enablesort disablesort"
+ };
+ editor.fireEvent('saveScene');
+ for(var i in checks){
+ var cmds = checks[i].split(" "),
+ input = $G("J_" + i);
+ if(input["checked"]){
+ editor.queryCommandState(cmds[0])!=-1 &&editor.execCommand(cmds[0]);
+ }else{
+ editor.queryCommandState(cmds[1])!=-1 &&editor.execCommand(cmds[1]);
+ }
+ }
+
+ editor.execCommand("edittable", tone.value);
+ autoSizeContent.checked ?editor.execCommand('adaptbytext') : "";
+ autoSizePage.checked ? editor.execCommand("adaptbywindow") : "";
+ editor.fireEvent('saveScene');
+
+ editor.__hasEnterExecCommand = false;
+ };
+})();
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/table/edittd.html b/public/lib/UEditor/dialogs/table/edittd.html
new file mode 100644
index 00000000..49a52f71
--- /dev/null
+++ b/public/lib/UEditor/dialogs/table/edittd.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/table/edittip.html b/public/lib/UEditor/dialogs/table/edittip.html
new file mode 100644
index 00000000..954f7bb6
--- /dev/null
+++ b/public/lib/UEditor/dialogs/table/edittip.html
@@ -0,0 +1,33 @@
+
+
+
+
表格删除提示
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/template/config.js.REMOVED.git-id b/public/lib/UEditor/dialogs/template/config.js.REMOVED.git-id
new file mode 100644
index 00000000..7a3a0e77
--- /dev/null
+++ b/public/lib/UEditor/dialogs/template/config.js.REMOVED.git-id
@@ -0,0 +1 @@
+42e474b47019b886cdecf3b1e05a8b05e5b12b26
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/template/template.css b/public/lib/UEditor/dialogs/template/template.css
new file mode 100644
index 00000000..2658bd2f
--- /dev/null
+++ b/public/lib/UEditor/dialogs/template/template.css
@@ -0,0 +1,18 @@
+.wrap{ padding: 5px;font-size: 14px;}
+.left{width:425px;float: left;}
+.right{width:160px;border: 1px solid #ccc;float: right;padding: 5px;margin-right: 5px;}
+.right .pre{height: 332px;overflow-y: auto;}
+.right .preitem{border: white 1px solid;margin: 5px 0;padding: 2px 0;}
+.right .preitem:hover{background-color: lemonChiffon;cursor: pointer;border: #ccc 1px solid;}
+.right .preitem img{display: block;margin: 0 auto;width:100px;}
+.clear{clear: both;}
+.top{height:26px;line-height: 26px;padding: 5px;}
+.bottom{height:320px;width:100%;margin: 0 auto;}
+.transparent{ background: url("images/bg.gif") repeat;}
+.bottom table tr td{border:1px dashed #ccc;}
+#colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;}
+.border_style1{padding:2px;border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;}
+p{margin: 5px 0}
+table{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all;}
+li{clear:both}
+ol{padding-left:40px; }
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/template/template.html b/public/lib/UEditor/dialogs/template/template.html
new file mode 100644
index 00000000..9d71eced
--- /dev/null
+++ b/public/lib/UEditor/dialogs/template/template.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/lib/UEditor/dialogs/template/template.js b/public/lib/UEditor/dialogs/template/template.js
new file mode 100644
index 00000000..0f1cdad5
--- /dev/null
+++ b/public/lib/UEditor/dialogs/template/template.js
@@ -0,0 +1,53 @@
+/**
+ * Created with JetBrains PhpStorm.
+ * User: xuheng
+ * Date: 12-8-8
+ * Time: 下午2:09
+ * To change this template use File | Settings | File Templates.
+ */
+(function () {
+ var me = editor,
+ preview = $G( "preview" ),
+ preitem = $G( "preitem" ),
+ tmps = templates,
+ currentTmp;
+ var initPre = function () {
+ var str = "";
+ for ( var i = 0, tmp; tmp = tmps[i++]; ) {
+ str += '

';
+ }
+ preitem.innerHTML = str;
+ };
+ var pre = function ( n ) {
+ var tmp = tmps[n - 1];
+ currentTmp = tmp;
+ clearItem();
+ domUtils.setStyles( preitem.childNodes[n - 1], {
+ "background-color":"lemonChiffon",
+ "border":"#ccc 1px solid"
+ } );
+ preview.innerHTML = tmp.preHtml ? tmp.preHtml : "";
+ };
+ var clearItem = function () {
+ var items = preitem.children;
+ for ( var i = 0, item; item = items[i++]; ) {
+ domUtils.setStyles( item, {
+ "background-color":"",
+ "border":"white 1px solid"
+ } );
+ }
+ };
+ dialog.onok = function () {
+ if ( !$G( "issave" ).checked ){
+ me.execCommand( "cleardoc" );
+ }
+ var obj = {
+ html:currentTmp && currentTmp.html
+ };
+ me.execCommand( "template", obj );
+ };
+ initPre();
+ window.pre = pre;
+ pre(2)
+
+})();
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/video/images/center_focus.jpg.REMOVED.git-id b/public/lib/UEditor/dialogs/video/images/center_focus.jpg.REMOVED.git-id
new file mode 100644
index 00000000..e69396b0
--- /dev/null
+++ b/public/lib/UEditor/dialogs/video/images/center_focus.jpg.REMOVED.git-id
@@ -0,0 +1 @@
+262b02916c51c01ab71f942b7ea9d02382b0df07
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/video/images/file-icons.gif.REMOVED.git-id b/public/lib/UEditor/dialogs/video/images/file-icons.gif.REMOVED.git-id
new file mode 100644
index 00000000..48e34176
--- /dev/null
+++ b/public/lib/UEditor/dialogs/video/images/file-icons.gif.REMOVED.git-id
@@ -0,0 +1 @@
+d8c02c27e242f0584fc6b214f35b4f6d8caec332
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/video/images/file-icons.png.REMOVED.git-id b/public/lib/UEditor/dialogs/video/images/file-icons.png.REMOVED.git-id
new file mode 100644
index 00000000..8251d2cf
--- /dev/null
+++ b/public/lib/UEditor/dialogs/video/images/file-icons.png.REMOVED.git-id
@@ -0,0 +1 @@
+3ff82c8c488f53a7aff67fbe39742e3321183eca
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/video/images/left_focus.jpg.REMOVED.git-id b/public/lib/UEditor/dialogs/video/images/left_focus.jpg.REMOVED.git-id
new file mode 100644
index 00000000..bfe2fe75
--- /dev/null
+++ b/public/lib/UEditor/dialogs/video/images/left_focus.jpg.REMOVED.git-id
@@ -0,0 +1 @@
+7886d276dda2e0aecdae22393eac534ed507babf
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/video/images/none_focus.jpg.REMOVED.git-id b/public/lib/UEditor/dialogs/video/images/none_focus.jpg.REMOVED.git-id
new file mode 100644
index 00000000..2979e282
--- /dev/null
+++ b/public/lib/UEditor/dialogs/video/images/none_focus.jpg.REMOVED.git-id
@@ -0,0 +1 @@
+7c768dcb47aaa289135afd2bd0e8eb0b6ecb7536
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/video/images/right_focus.jpg.REMOVED.git-id b/public/lib/UEditor/dialogs/video/images/right_focus.jpg.REMOVED.git-id
new file mode 100644
index 00000000..744a982c
--- /dev/null
+++ b/public/lib/UEditor/dialogs/video/images/right_focus.jpg.REMOVED.git-id
@@ -0,0 +1 @@
+173e10d2d91026c7283566993afb2f3a0267ea40
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/video/video.css.REMOVED.git-id b/public/lib/UEditor/dialogs/video/video.css.REMOVED.git-id
new file mode 100644
index 00000000..6a644db6
--- /dev/null
+++ b/public/lib/UEditor/dialogs/video/video.css.REMOVED.git-id
@@ -0,0 +1 @@
+8a17284e19a12bf628991b9a3b9305b8988992e5
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/video/video.html b/public/lib/UEditor/dialogs/video/video.html
new file mode 100644
index 00000000..14f10f45
--- /dev/null
+++ b/public/lib/UEditor/dialogs/video/video.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/video/video.js.REMOVED.git-id b/public/lib/UEditor/dialogs/video/video.js.REMOVED.git-id
new file mode 100644
index 00000000..a6ec04bd
--- /dev/null
+++ b/public/lib/UEditor/dialogs/video/video.js.REMOVED.git-id
@@ -0,0 +1 @@
+7b9378bd5ac8328f7facb97b9d038e66f6e9347d
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/webapp/webapp.html b/public/lib/UEditor/dialogs/webapp/webapp.html
new file mode 100644
index 00000000..73f8dc23
--- /dev/null
+++ b/public/lib/UEditor/dialogs/webapp/webapp.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/wordimage/tangram.js.REMOVED.git-id b/public/lib/UEditor/dialogs/wordimage/tangram.js.REMOVED.git-id
new file mode 100644
index 00000000..a2e0220b
--- /dev/null
+++ b/public/lib/UEditor/dialogs/wordimage/tangram.js.REMOVED.git-id
@@ -0,0 +1 @@
+2ebd8fd3dc82629ecd4bbece4d5c83da6a86bf0f
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/wordimage/wordimage.html b/public/lib/UEditor/dialogs/wordimage/wordimage.html
new file mode 100644
index 00000000..f8c09052
--- /dev/null
+++ b/public/lib/UEditor/dialogs/wordimage/wordimage.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/dialogs/wordimage/wordimage.js b/public/lib/UEditor/dialogs/wordimage/wordimage.js
new file mode 100644
index 00000000..e3602639
--- /dev/null
+++ b/public/lib/UEditor/dialogs/wordimage/wordimage.js
@@ -0,0 +1,157 @@
+/**
+ * Created by JetBrains PhpStorm.
+ * User: taoqili
+ * Date: 12-1-30
+ * Time: 下午12:50
+ * To change this template use File | Settings | File Templates.
+ */
+
+
+
+var wordImage = {};
+//(function(){
+var g = baidu.g,
+ flashObj,flashContainer;
+
+wordImage.init = function(opt, callbacks) {
+ showLocalPath("localPath");
+ //createCopyButton("clipboard","localPath");
+ createFlashUploader(opt, callbacks);
+ addUploadListener();
+ addOkListener();
+};
+
+function hideFlash(){
+ flashObj = null;
+ flashContainer.innerHTML = "";
+}
+function addOkListener() {
+ dialog.onok = function() {
+ if (!imageUrls.length) return;
+ var urlPrefix = editor.getOpt('imageUrlPrefix'),
+ images = domUtils.getElementsByTagName(editor.document,"img");
+ editor.fireEvent('saveScene');
+ for (var i = 0,img; img = images[i++];) {
+ var src = img.getAttribute("word_img");
+ if (!src) continue;
+ for (var j = 0,url; url = imageUrls[j++];) {
+ if (src.indexOf(url.original.replace(" ","")) != -1) {
+ img.src = urlPrefix + url.url;
+ img.setAttribute("_src", urlPrefix + url.url); //同时修改"_src"属性
+ img.setAttribute("title",url.title);
+ domUtils.removeAttributes(img, ["word_img","style","width","height"]);
+ editor.fireEvent("selectionchange");
+ break;
+ }
+ }
+ }
+ editor.fireEvent('saveScene');
+ hideFlash();
+ };
+ dialog.oncancel = function(){
+ hideFlash();
+ }
+}
+
+/**
+ * 绑定开始上传事件
+ */
+function addUploadListener() {
+ g("upload").onclick = function () {
+ flashObj.upload();
+ this.style.display = "none";
+ };
+}
+
+function showLocalPath(id) {
+ //单张编辑
+ var img = editor.selection.getRange().getClosedNode();
+ var images = editor.execCommand('wordimage');
+ if(images.length==1 || img && img.tagName == 'IMG'){
+ g(id).value = images[0];
+ return;
+ }
+ var path = images[0];
+ var leftSlashIndex = path.lastIndexOf("/")||0, //不同版本的doc和浏览器都可能影响到这个符号,故直接判断两种
+ rightSlashIndex = path.lastIndexOf("\\")||0,
+ separater = leftSlashIndex > rightSlashIndex ? "/":"\\" ;
+
+ path = path.substring(0, path.lastIndexOf(separater)+1);
+ g(id).value = path;
+}
+
+function createFlashUploader(opt, callbacks) {
+ //由于lang.flashI18n是静态属性,不可以直接进行修改,否则会影响到后续内容
+ var i18n = utils.extend({},lang.flashI18n);
+ //处理图片资源地址的编码,补全等问题
+ for(var i in i18n){
+ if(!(i in {"lang":1,"uploadingTF":1,"imageTF":1,"textEncoding":1}) && i18n[i]){
+ i18n[i] = encodeURIComponent(editor.options.langPath + editor.options.lang + "/images/" + i18n[i]);
+ }
+ }
+ opt = utils.extend(opt,i18n,false);
+ var option = {
+ createOptions:{
+ id:'flash',
+ url:opt.flashUrl,
+ width:opt.width,
+ height:opt.height,
+ errorMessage:lang.flashError,
+ wmode:browser.safari ? 'transparent' : 'window',
+ ver:'10.0.0',
+ vars:opt,
+ container:opt.container
+ }
+ };
+
+ option = extendProperty(callbacks, option);
+ flashObj = new baidu.flash.imageUploader(option);
+ flashContainer = $G(opt.container);
+}
+
+function extendProperty(fromObj, toObj) {
+ for (var i in fromObj) {
+ if (!toObj[i]) {
+ toObj[i] = fromObj[i];
+ }
+ }
+ return toObj;
+}
+
+//})();
+
+function getPasteData(id) {
+ baidu.g("msg").innerHTML = lang.copySuccess + "";
+ setTimeout(function() {
+ baidu.g("msg").innerHTML = "";
+ }, 5000);
+ return baidu.g(id).value;
+}
+
+function createCopyButton(id, dataFrom) {
+ baidu.swf.create({
+ id:"copyFlash",
+ url:"fClipboard_ueditor.swf",
+ width:"58",
+ height:"25",
+ errorMessage:"",
+ bgColor:"#CBCBCB",
+ wmode:"transparent",
+ ver:"10.0.0",
+ vars:{
+ tid:dataFrom
+ }
+ }, id
+ );
+
+ var clipboard = baidu.swf.getMovie("copyFlash");
+ var clipinterval = setInterval(function() {
+ if (clipboard && clipboard.flashInit) {
+ clearInterval(clipinterval);
+ clipboard.setHandCursor(true);
+ clipboard.setContentFuncName("getPasteData");
+ //clipboard.setMEFuncName("mouseEventHandler");
+ }
+ }, 500);
+}
+createCopyButton("clipboard", "localPath");
\ No newline at end of file
diff --git a/public/lib/UEditor/index.html b/public/lib/UEditor/index.html
new file mode 100644
index 00000000..f02b43c9
--- /dev/null
+++ b/public/lib/UEditor/index.html
@@ -0,0 +1,175 @@
+
+
+
+
完整demo
+
+
+
+
+
+
+
+
+
+
+
+
完整demo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/jsp/config.json b/public/lib/UEditor/jsp/config.json
new file mode 100644
index 00000000..53b6c977
--- /dev/null
+++ b/public/lib/UEditor/jsp/config.json
@@ -0,0 +1,94 @@
+/* 前后端通信相关的配置,注释只允许使用多行方式 */
+{
+ /* 上传图片配置项 */
+ "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
+ "imageFieldName": "upfile", /* 提交的图片表单名称 */
+ "imageMaxSize": 2048000, /* 上传大小限制,单位B */
+ "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
+ "imageCompressEnable": true, /* 是否压缩图片,默认是true */
+ "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
+ "imageInsertAlign": "none", /* 插入的图片浮动方式 */
+ "imageUrlPrefix": "", /* 图片访问路径前缀 */
+ "imagePathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */
+ /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */
+ /* {time} 会替换成时间戳 */
+ /* {yyyy} 会替换成四位年份 */
+ /* {yy} 会替换成两位年份 */
+ /* {mm} 会替换成两位月份 */
+ /* {dd} 会替换成两位日期 */
+ /* {hh} 会替换成两位小时 */
+ /* {ii} 会替换成两位分钟 */
+ /* {ss} 会替换成两位秒 */
+ /* 非法字符 \ : * ? " < > | */
+ /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */
+
+ /* 涂鸦图片上传配置项 */
+ "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
+ "scrawlFieldName": "upfile", /* 提交的图片表单名称 */
+ "scrawlPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
+ "scrawlUrlPrefix": "", /* 图片访问路径前缀 */
+ "scrawlInsertAlign": "none",
+
+ /* 截图工具上传 */
+ "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
+ "snapscreenPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */
+ "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */
+
+ /* 抓取远程图片配置 */
+ "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
+ "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
+ "catcherFieldName": "source", /* 提交的图片列表表单名称 */
+ "catcherPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ "catcherUrlPrefix": "", /* 图片访问路径前缀 */
+ "catcherMaxSize": 2048000, /* 上传大小限制,单位B */
+ "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
+
+ /* 上传视频配置 */
+ "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
+ "videoFieldName": "upfile", /* 提交的视频表单名称 */
+ "videoPathFormat": "/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ "videoUrlPrefix": "", /* 视频访问路径前缀 */
+ "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */
+ "videoAllowFiles": [
+ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
+ ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
+
+ /* 上传文件配置 */
+ "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
+ "fileFieldName": "upfile", /* 提交的文件表单名称 */
+ "filePathFormat": "/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
+ "fileUrlPrefix": "", /* 文件访问路径前缀 */
+ "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */
+ "fileAllowFiles": [
+ ".png", ".jpg", ".jpeg", ".gif", ".bmp",
+ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
+ ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
+ ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
+ ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
+ ], /* 上传文件格式显示 */
+
+ /* 列出指定目录下的图片 */
+ "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
+ "imageManagerListPath": "/ueditor/jsp/upload/image/", /* 指定要列出图片的目录 */
+ "imageManagerListSize": 20, /* 每次列出文件数量 */
+ "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */
+ "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
+ "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
+
+ /* 列出指定目录下的文件 */
+ "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
+ "fileManagerListPath": "/ueditor/jsp/upload/file/", /* 指定要列出文件的目录 */
+ "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */
+ "fileManagerListSize": 20, /* 每次列出文件数量 */
+ "fileManagerAllowFiles": [
+ ".png", ".jpg", ".jpeg", ".gif", ".bmp",
+ ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
+ ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
+ ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
+ ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
+ ] /* 列出的文件类型 */
+
+}
\ No newline at end of file
diff --git a/public/lib/UEditor/jsp/controller.jsp b/public/lib/UEditor/jsp/controller.jsp
new file mode 100644
index 00000000..6a3ef2f1
--- /dev/null
+++ b/public/lib/UEditor/jsp/controller.jsp
@@ -0,0 +1,14 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ import="com.baidu.ueditor.ActionEnter"
+ pageEncoding="UTF-8"%>
+<%@ page trimDirectiveWhitespaces="true" %>
+<%
+
+ request.setCharacterEncoding( "utf-8" );
+ response.setHeader("Content-Type" , "text/html");
+
+ String rootPath = application.getRealPath( "/" );
+
+ out.write( new ActionEnter( request, rootPath ).exec() );
+
+%>
\ No newline at end of file
diff --git a/public/lib/UEditor/lang/en/en.js.REMOVED.git-id b/public/lib/UEditor/lang/en/en.js.REMOVED.git-id
new file mode 100644
index 00000000..3c9ae48b
--- /dev/null
+++ b/public/lib/UEditor/lang/en/en.js.REMOVED.git-id
@@ -0,0 +1 @@
+c2bdbbbc963eb5b0cc5cfe81bc5a1da521ec0458
\ No newline at end of file
diff --git a/public/lib/UEditor/lang/en/images/music.png.REMOVED.git-id b/public/lib/UEditor/lang/en/images/music.png.REMOVED.git-id
new file mode 100644
index 00000000..640cc64b
--- /dev/null
+++ b/public/lib/UEditor/lang/en/images/music.png.REMOVED.git-id
@@ -0,0 +1 @@
+2f495fe92ffecdce42b74fd57dca2687414711fb
\ No newline at end of file
diff --git a/public/lib/UEditor/lang/zh-cn/images/music.png.REMOVED.git-id b/public/lib/UEditor/lang/zh-cn/images/music.png.REMOVED.git-id
new file mode 100644
index 00000000..9dee21c0
--- /dev/null
+++ b/public/lib/UEditor/lang/zh-cn/images/music.png.REMOVED.git-id
@@ -0,0 +1 @@
+354edebc341b43e56a5e809686e17c279125b026
\ No newline at end of file
diff --git a/public/lib/UEditor/lang/zh-cn/zh-cn.js.REMOVED.git-id b/public/lib/UEditor/lang/zh-cn/zh-cn.js.REMOVED.git-id
new file mode 100644
index 00000000..de52a78e
--- /dev/null
+++ b/public/lib/UEditor/lang/zh-cn/zh-cn.js.REMOVED.git-id
@@ -0,0 +1 @@
+10ff1516281b7f5a0f34e2dcc0b93f289a627331
\ No newline at end of file
diff --git a/public/lib/UEditor/themes/default/css/ueditor.css.REMOVED.git-id b/public/lib/UEditor/themes/default/css/ueditor.css.REMOVED.git-id
new file mode 100644
index 00000000..74d32c28
--- /dev/null
+++ b/public/lib/UEditor/themes/default/css/ueditor.css.REMOVED.git-id
@@ -0,0 +1 @@
+37b7edf443bf18e1a2f235b81d6a1b1bb540c503
\ No newline at end of file
diff --git a/public/lib/UEditor/themes/default/css/ueditor.min.css.REMOVED.git-id b/public/lib/UEditor/themes/default/css/ueditor.min.css.REMOVED.git-id
new file mode 100644
index 00000000..6fa4570d
--- /dev/null
+++ b/public/lib/UEditor/themes/default/css/ueditor.min.css.REMOVED.git-id
@@ -0,0 +1 @@
+72810719dfbc50cd209ddd5349a3c50376c227fa
\ No newline at end of file
diff --git a/public/lib/UEditor/themes/default/dialogbase.css b/public/lib/UEditor/themes/default/dialogbase.css
new file mode 100644
index 00000000..ea712666
--- /dev/null
+++ b/public/lib/UEditor/themes/default/dialogbase.css
@@ -0,0 +1,100 @@
+/*弹出对话框页面样式组件
+*/
+
+/*reset
+*/
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+ margin: 0;
+ padding: 0;
+ outline: 0;
+ font-size: 100%;
+}
+
+body {
+ line-height: 1;
+}
+
+ol, ul {
+ list-style: none;
+}
+
+blockquote, q {
+ quotes: none;
+}
+
+ins {
+ text-decoration: none;
+}
+
+del {
+ text-decoration: line-through;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+/*module
+*/
+body {
+ background-color: #fff;
+ font: 12px/1.5 sans-serif, "宋体", "Arial Narrow", HELVETICA;
+ color: #646464;
+}
+
+/*tab*/
+.tabhead {
+ position: relative;
+ z-index: 10;
+}
+
+.tabhead span {
+ display: inline-block;
+ padding: 0 5px;
+ height: 30px;
+ border: 1px solid #ccc;
+ background: url("images/dialog-title-bg.png") repeat-x;
+ text-align: center;
+ line-height: 30px;
+ cursor: pointer;
+ *margin-right: 5px;
+}
+
+.tabhead span.focus {
+ height: 31px;
+ border-bottom: none;
+ background: #fff;
+}
+
+.tabbody {
+ position: relative;
+ top: -1px;
+ margin: 0 auto;
+ border: 1px solid #ccc;
+}
+
+/*button*/
+a.button {
+ display: block;
+ text-align: center;
+ line-height: 24px;
+ text-decoration: none;
+ height: 24px;
+ width: 95px;
+ border: 0;
+ color: #838383;
+ background: url(../../themes/default/images/icons-all.gif) no-repeat;
+}
+
+a.button:hover {
+ background-position: 0 -30px;
+}
\ No newline at end of file
diff --git a/public/lib/UEditor/themes/default/images/icons.gif.REMOVED.git-id b/public/lib/UEditor/themes/default/images/icons.gif.REMOVED.git-id
new file mode 100644
index 00000000..2ed424b4
--- /dev/null
+++ b/public/lib/UEditor/themes/default/images/icons.gif.REMOVED.git-id
@@ -0,0 +1 @@
+7abd30a1c6516cda6376f335902e3cadbae64c89
\ No newline at end of file
diff --git a/public/lib/UEditor/themes/default/images/icons.png.REMOVED.git-id b/public/lib/UEditor/themes/default/images/icons.png.REMOVED.git-id
new file mode 100644
index 00000000..cb048390
--- /dev/null
+++ b/public/lib/UEditor/themes/default/images/icons.png.REMOVED.git-id
@@ -0,0 +1 @@
+c015e3aac9a84ebad11b932e84722124772d9641
\ No newline at end of file
diff --git a/public/lib/UEditor/themes/default/images/tangram-colorpicker.png.REMOVED.git-id b/public/lib/UEditor/themes/default/images/tangram-colorpicker.png.REMOVED.git-id
new file mode 100644
index 00000000..736ff41d
--- /dev/null
+++ b/public/lib/UEditor/themes/default/images/tangram-colorpicker.png.REMOVED.git-id
@@ -0,0 +1 @@
+738e500cfcf2c746f977189b05a7fe43544e80f0
\ No newline at end of file
diff --git a/public/lib/UEditor/themes/iframe.css b/public/lib/UEditor/themes/iframe.css
new file mode 100644
index 00000000..32e72222
--- /dev/null
+++ b/public/lib/UEditor/themes/iframe.css
@@ -0,0 +1 @@
+/*可以在这里添加你自己的css*/
diff --git a/public/lib/UEditor/third-party/SyntaxHighlighter/shCore.js.REMOVED.git-id b/public/lib/UEditor/third-party/SyntaxHighlighter/shCore.js.REMOVED.git-id
new file mode 100644
index 00000000..4feeb131
--- /dev/null
+++ b/public/lib/UEditor/third-party/SyntaxHighlighter/shCore.js.REMOVED.git-id
@@ -0,0 +1 @@
+32491842526a32527bb92877f312b7dd2e94e5ee
\ No newline at end of file
diff --git a/public/lib/UEditor/third-party/SyntaxHighlighter/shCoreDefault.css b/public/lib/UEditor/third-party/SyntaxHighlighter/shCoreDefault.css
new file mode 100644
index 00000000..e156a6f4
--- /dev/null
+++ b/public/lib/UEditor/third-party/SyntaxHighlighter/shCoreDefault.css
@@ -0,0 +1 @@
+.syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter,.syntaxhighlighter td,.syntaxhighlighter tr,.syntaxhighlighter tbody,.syntaxhighlighter thead,.syntaxhighlighter caption,.syntaxhighlighter textarea{-moz-border-radius:0 0 0 0!important;-webkit-border-radius:0 0 0 0!important;background:none!important;border:0!important;bottom:auto!important;float:none!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-weight:normal!important;font-style:normal!important;min-height:inherit!important;min-height:auto!important;font-size:13px!important}.syntaxhighlighter{width:100%!important;margin:.3em 0 .3em 0!important;position:relative!important;overflow:auto!important;background-color:#f5f5f5!important;border:1px solid #ccc!important;border-radius:4px!important;border-collapse:separate!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .bold{font-weight:bold!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .gutter div{white-space:pre!important;word-wrap:normal}.syntaxhighlighter caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter td.code{width:100%!important}.syntaxhighlighter td.code .container{position:relative!important}.syntaxhighlighter td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;border:none!important;background:white!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0 .8em!important;font-size:1em!important;position:static!important;width:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar span.title{display:inline!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;text-decoration:none!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0 1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:none!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content{color:black!important}.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.printing a{text-decoration:none!important}.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:black!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:blue!important}.syntaxhighlighter.printing .keyword{color:#ff7800!important;font-weight:bold!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .script{font-weight:bold!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:black!important}.syntaxhighlighter{background-color:#f5f5f5!important}.syntaxhighlighter .line.highlighted.number{color:black!important}.syntaxhighlighter caption{color:black!important}.syntaxhighlighter .gutter{color:#afafaf!important;background-color:#f7f7f9!important;border-right:1px solid #e1e1e8!important;padding:9.5px 0 9.5px 9.5px!important;border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;user-select:none!important;-moz-user-select:none!important;-webkit-user-select:none!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:white!important}.syntaxhighlighter.printing .line .content{border:none!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:blue!important;background:white!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:blue!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:white!important;background:#6ce26c!important;border:none!important}.syntaxhighlighter .toolbar a{color:white!important}.syntaxhighlighter .toolbar a:hover{color:black!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a{color:black!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:blue!important}.syntaxhighlighter .keyword{color:#ff7800!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{font-weight:bold!important;color:#ff7800!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}.syntaxhighlighter .keyword{font-weight:bold!important}
\ No newline at end of file
diff --git a/public/lib/UEditor/third-party/codemirror/codemirror.css b/public/lib/UEditor/third-party/codemirror/codemirror.css
new file mode 100644
index 00000000..461ae195
--- /dev/null
+++ b/public/lib/UEditor/third-party/codemirror/codemirror.css
@@ -0,0 +1,104 @@
+.CodeMirror {
+ line-height: 1em;
+ font-family: monospace;
+}
+
+.CodeMirror-scroll {
+ overflow: auto;
+ height: 300px;
+ /* This is needed to prevent an IE[67] bug where the scrolled content
+ is visible outside of the scrolling box. */
+ position: relative;
+}
+
+.CodeMirror-gutter {
+ position: absolute; left: 0; top: 0;
+ z-index: 10;
+ background-color: #f7f7f7;
+ border-right: 1px solid #eee;
+ min-width: 2em;
+ height: 100%;
+}
+.CodeMirror-gutter-text {
+ color: #aaa;
+ text-align: right;
+ padding: .4em .2em .4em .4em;
+ white-space: pre !important;
+}
+.CodeMirror-lines {
+ padding: .4em;
+}
+
+.CodeMirror pre {
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+ border-width: 0; margin: 0; padding: 0; background: transparent;
+ font-family: inherit;
+ font-size: inherit;
+ padding: 0; margin: 0;
+ white-space: pre;
+ word-wrap: normal;
+}
+
+.CodeMirror-wrap pre {
+ word-wrap: break-word;
+ white-space: pre-wrap;
+}
+.CodeMirror-wrap .CodeMirror-scroll {
+ overflow-x: hidden;
+}
+
+.CodeMirror textarea {
+ outline: none !important;
+}
+
+.CodeMirror pre.CodeMirror-cursor {
+ z-index: 10;
+ position: absolute;
+ visibility: hidden;
+ border-left: 1px solid black;
+}
+.CodeMirror-focused pre.CodeMirror-cursor {
+ visibility: visible;
+}
+
+span.CodeMirror-selected { background: #d9d9d9; }
+.CodeMirror-focused span.CodeMirror-selected { background: #d2dcf8; }
+
+.CodeMirror-searching {background: #ffa;}
+
+/* Default theme */
+
+.cm-s-default span.cm-keyword {color: #708;}
+.cm-s-default span.cm-atom {color: #219;}
+.cm-s-default span.cm-number {color: #164;}
+.cm-s-default span.cm-def {color: #00f;}
+.cm-s-default span.cm-variable {color: black;}
+.cm-s-default span.cm-variable-2 {color: #05a;}
+.cm-s-default span.cm-variable-3 {color: #085;}
+.cm-s-default span.cm-property {color: black;}
+.cm-s-default span.cm-operator {color: black;}
+.cm-s-default span.cm-comment {color: #a50;}
+.cm-s-default span.cm-string {color: #a11;}
+.cm-s-default span.cm-string-2 {color: #f50;}
+.cm-s-default span.cm-meta {color: #555;}
+.cm-s-default span.cm-error {color: #f00;}
+.cm-s-default span.cm-qualifier {color: #555;}
+.cm-s-default span.cm-builtin {color: #30a;}
+.cm-s-default span.cm-bracket {color: #cc7;}
+.cm-s-default span.cm-tag {color: #170;}
+.cm-s-default span.cm-attribute {color: #00c;}
+.cm-s-default span.cm-header {color: #a0a;}
+.cm-s-default span.cm-quote {color: #090;}
+.cm-s-default span.cm-hr {color: #999;}
+.cm-s-default span.cm-link {color: #00c;}
+
+span.cm-header, span.cm-strong {font-weight: bold;}
+span.cm-em {font-style: italic;}
+span.cm-emstrong {font-style: italic; font-weight: bold;}
+span.cm-link {text-decoration: underline;}
+
+div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}
+div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}
diff --git a/public/lib/UEditor/third-party/codemirror/codemirror.js.REMOVED.git-id b/public/lib/UEditor/third-party/codemirror/codemirror.js.REMOVED.git-id
new file mode 100644
index 00000000..86506203
--- /dev/null
+++ b/public/lib/UEditor/third-party/codemirror/codemirror.js.REMOVED.git-id
@@ -0,0 +1 @@
+083f2421b25d8339c6201fc922866d6302ec6fbd
\ No newline at end of file
diff --git a/public/lib/UEditor/third-party/highcharts/adapters/mootools-adapter.js b/public/lib/UEditor/third-party/highcharts/adapters/mootools-adapter.js
new file mode 100644
index 00000000..50fb0f42
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/adapters/mootools-adapter.js
@@ -0,0 +1,13 @@
+/*
+ Highcharts JS v3.0.6 (2013-10-04)
+ MooTools adapter
+
+ (c) 2010-2013 Torstein Hønsi
+
+ License: www.highcharts.com/license
+*/
+(function(){var e=window,h=document,f=e.MooTools.version.substring(0,3),i=f==="1.2"||f==="1.1",j=i||f==="1.3",g=e.$extend||function(){return Object.append.apply(Object,arguments)};e.HighchartsAdapter={init:function(a){var b=Fx.prototype,c=b.start,d=Fx.Morph.prototype,e=d.compute;b.start=function(b,d){var e=this.element;if(b.d)this.paths=a.init(e,e.d,this.toD);c.apply(this,arguments);return this};d.compute=function(b,c,d){var f=this.paths;if(f)this.element.attr("d",a.step(f[0],f[1],d,this.toD));else return e.apply(this,
+arguments)}},adapterRun:function(a,b){if(b==="width"||b==="height")return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=h.getElementsByTagName("head")[0],d=h.createElement("script");d.type="text/javascript";d.src=a;d.onload=b;c.appendChild(d)},animate:function(a,b,c){var d=a.attr,f=c&&c.complete;if(d&&!a.setStyle)a.getStyle=a.attr,a.setStyle=function(){var a=arguments;this.attr.call(this,a[0],a[1][0])},a.$family=function(){return!0};e.HighchartsAdapter.stop(a);c=new Fx.Morph(d?a:$(a),
+g({transition:Fx.Transitions.Quad.easeInOut},c));if(d)c.element=a;if(b.d)c.toD=b.d;f&&c.addEvent("complete",f);c.start(b);a.fx=c},each:function(a,b){return i?$each(a,b):Array.each(a,b)},map:function(a,b){return a.map(b)},grep:function(a,b){return a.filter(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){a=a.getPosition();return{left:a.x,top:a.y}},extendWithEvents:function(a){a.addEvent||(a.nodeName?$(a):g(a,new Events))},addEvent:function(a,b,c){typeof b==="string"&&(b===
+"unload"&&(b="beforeunload"),e.HighchartsAdapter.extendWithEvents(a),a.addEvent(b,c))},removeEvent:function(a,b,c){typeof a!=="string"&&a.addEvent&&(b?(b==="unload"&&(b="beforeunload"),c?a.removeEvent(b,c):a.removeEvents&&a.removeEvents(b)):a.removeEvents())},fireEvent:function(a,b,c,d){b={type:b,target:a};b=j?new Event(b):new DOMEvent(b);b=g(b,c);if(!b.target&&b.event)b.target=b.event.target;b.preventDefault=function(){d=null};a.fireEvent&&a.fireEvent(b.type,b);d&&d(b)},washMouseEvent:function(a){if(a.page)a.pageX=
+a.page.x,a.pageY=a.page.y;return a},stop:function(a){a.fx&&a.fx.cancel()}}})();
diff --git a/public/lib/UEditor/third-party/highcharts/adapters/mootools-adapter.src.js b/public/lib/UEditor/third-party/highcharts/adapters/mootools-adapter.src.js
new file mode 100644
index 00000000..a310f0b7
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/adapters/mootools-adapter.src.js
@@ -0,0 +1,313 @@
+/**
+ * @license Highcharts JS v3.0.6 (2013-10-04)
+ * MooTools adapter
+ *
+ * (c) 2010-2013 Torstein Hønsi
+ *
+ * License: www.highcharts.com/license
+ */
+
+// JSLint options:
+/*global Fx, $, $extend, $each, $merge, Events, Event, DOMEvent */
+
+(function () {
+
+var win = window,
+ doc = document,
+ mooVersion = win.MooTools.version.substring(0, 3), // Get the first three characters of the version number
+ legacy = mooVersion === '1.2' || mooVersion === '1.1', // 1.1 && 1.2 considered legacy, 1.3 is not.
+ legacyEvent = legacy || mooVersion === '1.3', // In versions 1.1 - 1.3 the event class is named Event, in newer versions it is named DOMEvent.
+ $extend = win.$extend || function () {
+ return Object.append.apply(Object, arguments);
+ };
+
+win.HighchartsAdapter = {
+ /**
+ * Initialize the adapter. This is run once as Highcharts is first run.
+ * @param {Object} pathAnim The helper object to do animations across adapters.
+ */
+ init: function (pathAnim) {
+ var fxProto = Fx.prototype,
+ fxStart = fxProto.start,
+ morphProto = Fx.Morph.prototype,
+ morphCompute = morphProto.compute;
+
+ // override Fx.start to allow animation of SVG element wrappers
+ /*jslint unparam: true*//* allow unused parameters in fx functions */
+ fxProto.start = function (from, to) {
+ var fx = this,
+ elem = fx.element;
+
+ // special for animating paths
+ if (from.d) {
+ //this.fromD = this.element.d.split(' ');
+ fx.paths = pathAnim.init(
+ elem,
+ elem.d,
+ fx.toD
+ );
+ }
+ fxStart.apply(fx, arguments);
+
+ return this; // chainable
+ };
+
+ // override Fx.step to allow animation of SVG element wrappers
+ morphProto.compute = function (from, to, delta) {
+ var fx = this,
+ paths = fx.paths;
+
+ if (paths) {
+ fx.element.attr(
+ 'd',
+ pathAnim.step(paths[0], paths[1], delta, fx.toD)
+ );
+ } else {
+ return morphCompute.apply(fx, arguments);
+ }
+ };
+ /*jslint unparam: false*/
+ },
+
+ /**
+ * Run a general method on the framework, following jQuery syntax
+ * @param {Object} el The HTML element
+ * @param {String} method Which method to run on the wrapped element
+ */
+ adapterRun: function (el, method) {
+
+ // This currently works for getting inner width and height. If adding
+ // more methods later, we need a conditional implementation for each.
+ if (method === 'width' || method === 'height') {
+ return parseInt($(el).getStyle(method), 10);
+ }
+ },
+
+ /**
+ * Downloads a script and executes a callback when done.
+ * @param {String} scriptLocation
+ * @param {Function} callback
+ */
+ getScript: function (scriptLocation, callback) {
+ // We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.
+ var head = doc.getElementsByTagName('head')[0];
+ var script = doc.createElement('script');
+
+ script.type = 'text/javascript';
+ script.src = scriptLocation;
+ script.onload = callback;
+
+ head.appendChild(script);
+ },
+
+ /**
+ * Animate a HTML element or SVG element wrapper
+ * @param {Object} el
+ * @param {Object} params
+ * @param {Object} options jQuery-like animation options: duration, easing, callback
+ */
+ animate: function (el, params, options) {
+ var isSVGElement = el.attr,
+ effect,
+ complete = options && options.complete;
+
+ if (isSVGElement && !el.setStyle) {
+ // add setStyle and getStyle methods for internal use in Moo
+ el.getStyle = el.attr;
+ el.setStyle = function () { // property value is given as array in Moo - break it down
+ var args = arguments;
+ this.attr.call(this, args[0], args[1][0]);
+ };
+ // dirty hack to trick Moo into handling el as an element wrapper
+ el.$family = function () { return true; };
+ }
+
+ // stop running animations
+ win.HighchartsAdapter.stop(el);
+
+ // define and run the effect
+ effect = new Fx.Morph(
+ isSVGElement ? el : $(el),
+ $extend({
+ transition: Fx.Transitions.Quad.easeInOut
+ }, options)
+ );
+
+ // Make sure that the element reference is set when animating svg elements
+ if (isSVGElement) {
+ effect.element = el;
+ }
+
+ // special treatment for paths
+ if (params.d) {
+ effect.toD = params.d;
+ }
+
+ // jQuery-like events
+ if (complete) {
+ effect.addEvent('complete', complete);
+ }
+
+ // run
+ effect.start(params);
+
+ // record for use in stop method
+ el.fx = effect;
+ },
+
+ /**
+ * MooTool's each function
+ *
+ */
+ each: function (arr, fn) {
+ return legacy ?
+ $each(arr, fn) :
+ Array.each(arr, fn);
+ },
+
+ /**
+ * Map an array
+ * @param {Array} arr
+ * @param {Function} fn
+ */
+ map: function (arr, fn) {
+ return arr.map(fn);
+ },
+
+ /**
+ * Grep or filter an array
+ * @param {Array} arr
+ * @param {Function} fn
+ */
+ grep: function (arr, fn) {
+ return arr.filter(fn);
+ },
+
+ /**
+ * Return the index of an item in an array, or -1 if not matched
+ */
+ inArray: function (item, arr, from) {
+ return arr ? arr.indexOf(item, from) : -1;
+ },
+
+ /**
+ * Get the offset of an element relative to the top left corner of the web page
+ */
+ offset: function (el) {
+ var offsets = el.getPosition(); // #1496
+ return {
+ left: offsets.x,
+ top: offsets.y
+ };
+ },
+
+ /**
+ * Extends an object with Events, if its not done
+ */
+ extendWithEvents: function (el) {
+ // if the addEvent method is not defined, el is a custom Highcharts object
+ // like series or point
+ if (!el.addEvent) {
+ if (el.nodeName) {
+ el = $(el); // a dynamically generated node
+ } else {
+ $extend(el, new Events()); // a custom object
+ }
+ }
+ },
+
+ /**
+ * Add an event listener
+ * @param {Object} el HTML element or custom object
+ * @param {String} type Event type
+ * @param {Function} fn Event handler
+ */
+ addEvent: function (el, type, fn) {
+ if (typeof type === 'string') { // chart broke due to el being string, type function
+
+ if (type === 'unload') { // Moo self destructs before custom unload events
+ type = 'beforeunload';
+ }
+
+ win.HighchartsAdapter.extendWithEvents(el);
+
+ el.addEvent(type, fn);
+ }
+ },
+
+ removeEvent: function (el, type, fn) {
+ if (typeof el === 'string') {
+ // el.removeEvents below apperantly calls this method again. Do not quite understand why, so for now just bail out.
+ return;
+ }
+
+ if (el.addEvent) { // If el doesn't have an addEvent method, there are no events to remove
+ if (type) {
+ if (type === 'unload') { // Moo self destructs before custom unload events
+ type = 'beforeunload';
+ }
+
+ if (fn) {
+ el.removeEvent(type, fn);
+ } else if (el.removeEvents) { // #958
+ el.removeEvents(type);
+ }
+ } else {
+ el.removeEvents();
+ }
+ }
+ },
+
+ fireEvent: function (el, event, eventArguments, defaultFunction) {
+ var eventArgs = {
+ type: event,
+ target: el
+ };
+ // create an event object that keeps all functions
+ event = legacyEvent ? new Event(eventArgs) : new DOMEvent(eventArgs);
+ event = $extend(event, eventArguments);
+
+ // When running an event on the Chart.prototype, MooTools nests the target in event.event
+ if (!event.target && event.event) {
+ event.target = event.event.target;
+ }
+
+ // override the preventDefault function to be able to use
+ // this for custom events
+ event.preventDefault = function () {
+ defaultFunction = null;
+ };
+ // if fireEvent is not available on the object, there hasn't been added
+ // any events to it above
+ if (el.fireEvent) {
+ el.fireEvent(event.type, event);
+ }
+
+ // fire the default if it is passed and it is not prevented above
+ if (defaultFunction) {
+ defaultFunction(event);
+ }
+ },
+
+ /**
+ * Set back e.pageX and e.pageY that MooTools has abstracted away. #1165, #1346.
+ */
+ washMouseEvent: function (e) {
+ if (e.page) {
+ e.pageX = e.page.x;
+ e.pageY = e.page.y;
+ }
+ return e;
+ },
+
+ /**
+ * Stop running animations on the object
+ */
+ stop: function (el) {
+ if (el.fx) {
+ el.fx.cancel();
+ }
+ }
+};
+
+}());
diff --git a/public/lib/UEditor/third-party/highcharts/adapters/prototype-adapter.js b/public/lib/UEditor/third-party/highcharts/adapters/prototype-adapter.js
new file mode 100644
index 00000000..8a57ccae
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/adapters/prototype-adapter.js
@@ -0,0 +1,15 @@
+/*
+ Highcharts JS v3.0.6 (2013-10-04)
+ Prototype adapter
+
+ @author Michael Nelson, Torstein Hønsi.
+
+ Feel free to use and modify this script.
+ Highcharts license: www.highcharts.com/license.
+*/
+var HighchartsAdapter=function(){var f=typeof Effect!=="undefined";return{init:function(a){if(f)Effect.HighchartsTransition=Class.create(Effect.Base,{initialize:function(b,c,d,g){var e;this.element=b;this.key=c;e=b.attr?b.attr(c):$(b).getStyle(c);if(c==="d")this.paths=a.init(b,b.d,d),this.toD=d,e=0,d=1;this.start(Object.extend(g||{},{from:e,to:d,attribute:c}))},setup:function(){HighchartsAdapter._extend(this.element);if(!this.element._highchart_animation)this.element._highchart_animation={};this.element._highchart_animation[this.key]=
+this},update:function(b){var c=this.paths,d=this.element;c&&(b=a.step(c[0],c[1],b,this.toD));d.attr?d.element&&d.attr(this.options.attribute,b):(c={},c[this.options.attribute]=b,$(d).setStyle(c))},finish:function(){this.element&&this.element._highchart_animation&&delete this.element._highchart_animation[this.key]}})},adapterRun:function(a,b){return parseInt($(a).getStyle(b),10)},getScript:function(a,b){var c=$$("head")[0];c&&c.appendChild((new Element("script",{type:"text/javascript",src:a})).observe("load",
+b))},addNS:function(a){var b=/^(?:click|mouse(?:down|up|over|move|out))$/;return/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/.test(a)||b.test(a)?a:"h:"+a},addEvent:function(a,b,c){a.addEventListener||a.attachEvent?Event.observe($(a),HighchartsAdapter.addNS(b),c):(HighchartsAdapter._extend(a),a._highcharts_observe(b,c))},animate:function(a,b,c){var d,c=c||{};c.delay=0;c.duration=(c.duration||500)/1E3;c.afterFinish=c.complete;if(f)for(d in b)new Effect.HighchartsTransition($(a),
+d,b[d],c);else{if(a.attr)for(d in b)a.attr(d,b[d]);c.complete&&c.complete()}a.attr||$(a).setStyle(b)},stop:function(a){var b;if(a._highcharts_extended&&a._highchart_animation)for(b in a._highchart_animation)a._highchart_animation[b].cancel()},each:function(a,b){$A(a).each(b)},inArray:function(a,b,c){return b?b.indexOf(a,c):-1},offset:function(a){return $(a).cumulativeOffset()},fireEvent:function(a,b,c,d){a.fire?a.fire(HighchartsAdapter.addNS(b),c):a._highcharts_extended&&(c=c||{},a._highcharts_fire(b,
+c));c&&c.defaultPrevented&&(d=null);d&&d(c)},removeEvent:function(a,b,c){$(a).stopObserving&&(b&&(b=HighchartsAdapter.addNS(b)),$(a).stopObserving(b,c));window===a?Event.stopObserving(a,b,c):(HighchartsAdapter._extend(a),a._highcharts_stop_observing(b,c))},washMouseEvent:function(a){return a},grep:function(a,b){return a.findAll(b)},map:function(a,b){return a.map(b)},_extend:function(a){a._highcharts_extended||Object.extend(a,{_highchart_events:{},_highchart_animation:null,_highcharts_extended:!0,
+_highcharts_observe:function(b,a){this._highchart_events[b]=[this._highchart_events[b],a].compact().flatten()},_highcharts_stop_observing:function(b,a){b?a?this._highchart_events[b]=[this._highchart_events[b]].compact().flatten().without(a):delete this._highchart_events[b]:this._highchart_events={}},_highcharts_fire:function(a,c){var d=this;(this._highchart_events[a]||[]).each(function(a){if(!c.stopped)c.preventDefault=function(){c.defaultPrevented=!0},c.target=d,a.bind(this)(c)===!1&&c.preventDefault()}.bind(this))}})}}}();
diff --git a/public/lib/UEditor/third-party/highcharts/adapters/prototype-adapter.src.js b/public/lib/UEditor/third-party/highcharts/adapters/prototype-adapter.src.js
new file mode 100644
index 00000000..9c8529e4
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/adapters/prototype-adapter.src.js
@@ -0,0 +1,316 @@
+/**
+ * @license Highcharts JS v3.0.6 (2013-10-04)
+ * Prototype adapter
+ *
+ * @author Michael Nelson, Torstein Hønsi.
+ *
+ * Feel free to use and modify this script.
+ * Highcharts license: www.highcharts.com/license.
+ */
+
+// JSLint options:
+/*global Effect, Class, Event, Element, $, $$, $A */
+
+// Adapter interface between prototype and the Highcharts charting library
+var HighchartsAdapter = (function () {
+
+var hasEffect = typeof Effect !== 'undefined';
+
+return {
+
+ /**
+ * Initialize the adapter. This is run once as Highcharts is first run.
+ * @param {Object} pathAnim The helper object to do animations across adapters.
+ */
+ init: function (pathAnim) {
+ if (hasEffect) {
+ /**
+ * Animation for Highcharts SVG element wrappers only
+ * @param {Object} element
+ * @param {Object} attribute
+ * @param {Object} to
+ * @param {Object} options
+ */
+ Effect.HighchartsTransition = Class.create(Effect.Base, {
+ initialize: function (element, attr, to, options) {
+ var from,
+ opts;
+
+ this.element = element;
+ this.key = attr;
+ from = element.attr ? element.attr(attr) : $(element).getStyle(attr);
+
+ // special treatment for paths
+ if (attr === 'd') {
+ this.paths = pathAnim.init(
+ element,
+ element.d,
+ to
+ );
+ this.toD = to;
+
+
+ // fake values in order to read relative position as a float in update
+ from = 0;
+ to = 1;
+ }
+
+ opts = Object.extend((options || {}), {
+ from: from,
+ to: to,
+ attribute: attr
+ });
+ this.start(opts);
+ },
+ setup: function () {
+ HighchartsAdapter._extend(this.element);
+ // If this is the first animation on this object, create the _highcharts_animation helper that
+ // contain pointers to the animation objects.
+ if (!this.element._highchart_animation) {
+ this.element._highchart_animation = {};
+ }
+
+ // Store a reference to this animation instance.
+ this.element._highchart_animation[this.key] = this;
+ },
+ update: function (position) {
+ var paths = this.paths,
+ element = this.element,
+ obj;
+
+ if (paths) {
+ position = pathAnim.step(paths[0], paths[1], position, this.toD);
+ }
+
+ if (element.attr) { // SVGElement
+
+ if (element.element) { // If not, it has been destroyed (#1405)
+ element.attr(this.options.attribute, position);
+ }
+
+ } else { // HTML, #409
+ obj = {};
+ obj[this.options.attribute] = position;
+ $(element).setStyle(obj);
+ }
+
+ },
+ finish: function () {
+ // Delete the property that holds this animation now that it is finished.
+ // Both canceled animations and complete ones gets a 'finish' call.
+ if (this.element && this.element._highchart_animation) { // #1405
+ delete this.element._highchart_animation[this.key];
+ }
+ }
+ });
+ }
+ },
+
+ /**
+ * Run a general method on the framework, following jQuery syntax
+ * @param {Object} el The HTML element
+ * @param {String} method Which method to run on the wrapped element
+ */
+ adapterRun: function (el, method) {
+
+ // This currently works for getting inner width and height. If adding
+ // more methods later, we need a conditional implementation for each.
+ return parseInt($(el).getStyle(method), 10);
+
+ },
+
+ /**
+ * Downloads a script and executes a callback when done.
+ * @param {String} scriptLocation
+ * @param {Function} callback
+ */
+ getScript: function (scriptLocation, callback) {
+ var head = $$('head')[0]; // Returns an array, so pick the first element.
+ if (head) {
+ // Append a new 'script' element, set its type and src attributes, add a 'load' handler that calls the callback
+ head.appendChild(new Element('script', { type: 'text/javascript', src: scriptLocation}).observe('load', callback));
+ }
+ },
+
+ /**
+ * Custom events in prototype needs to be namespaced. This method adds a namespace 'h:' in front of
+ * events that are not recognized as native.
+ */
+ addNS: function (eventName) {
+ var HTMLEvents = /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
+ MouseEvents = /^(?:click|mouse(?:down|up|over|move|out))$/;
+ return (HTMLEvents.test(eventName) || MouseEvents.test(eventName)) ?
+ eventName :
+ 'h:' + eventName;
+ },
+
+ // el needs an event to be attached. el is not necessarily a dom element
+ addEvent: function (el, event, fn) {
+ if (el.addEventListener || el.attachEvent) {
+ Event.observe($(el), HighchartsAdapter.addNS(event), fn);
+
+ } else {
+ HighchartsAdapter._extend(el);
+ el._highcharts_observe(event, fn);
+ }
+ },
+
+ // motion makes things pretty. use it if effects is loaded, if not... still get to the end result.
+ animate: function (el, params, options) {
+ var key,
+ fx;
+
+ // default options
+ options = options || {};
+ options.delay = 0;
+ options.duration = (options.duration || 500) / 1000;
+ options.afterFinish = options.complete;
+
+ // animate wrappers and DOM elements
+ if (hasEffect) {
+ for (key in params) {
+ // The fx variable is seemingly thrown away here, but the Effect.setup will add itself to the _highcharts_animation object
+ // on the element itself so its not really lost.
+ fx = new Effect.HighchartsTransition($(el), key, params[key], options);
+ }
+ } else {
+ if (el.attr) { // #409 without effects
+ for (key in params) {
+ el.attr(key, params[key]);
+ }
+ }
+ if (options.complete) {
+ options.complete();
+ }
+ }
+
+ if (!el.attr) { // HTML element, #409
+ $(el).setStyle(params);
+ }
+ },
+
+ // this only occurs in higcharts 2.0+
+ stop: function (el) {
+ var key;
+ if (el._highcharts_extended && el._highchart_animation) {
+ for (key in el._highchart_animation) {
+ // Cancel the animation
+ // The 'finish' function in the Effect object will remove the reference
+ el._highchart_animation[key].cancel();
+ }
+ }
+ },
+
+ // um.. each
+ each: function (arr, fn) {
+ $A(arr).each(fn);
+ },
+
+ inArray: function (item, arr, from) {
+ return arr ? arr.indexOf(item, from) : -1;
+ },
+
+ /**
+ * Get the cumulative offset relative to the top left of the page. This method, unlike its
+ * jQuery and MooTools counterpart, still suffers from issue #208 regarding the position
+ * of a chart within a fixed container.
+ */
+ offset: function (el) {
+ return $(el).cumulativeOffset();
+ },
+
+ // fire an event based on an event name (event) and an object (el).
+ // again, el may not be a dom element
+ fireEvent: function (el, event, eventArguments, defaultFunction) {
+ if (el.fire) {
+ el.fire(HighchartsAdapter.addNS(event), eventArguments);
+ } else if (el._highcharts_extended) {
+ eventArguments = eventArguments || {};
+ el._highcharts_fire(event, eventArguments);
+ }
+
+ if (eventArguments && eventArguments.defaultPrevented) {
+ defaultFunction = null;
+ }
+
+ if (defaultFunction) {
+ defaultFunction(eventArguments);
+ }
+ },
+
+ removeEvent: function (el, event, handler) {
+ if ($(el).stopObserving) {
+ if (event) {
+ event = HighchartsAdapter.addNS(event);
+ }
+ $(el).stopObserving(event, handler);
+ } if (window === el) {
+ Event.stopObserving(el, event, handler);
+ } else {
+ HighchartsAdapter._extend(el);
+ el._highcharts_stop_observing(event, handler);
+ }
+ },
+
+ washMouseEvent: function (e) {
+ return e;
+ },
+
+ // um, grep
+ grep: function (arr, fn) {
+ return arr.findAll(fn);
+ },
+
+ // um, map
+ map: function (arr, fn) {
+ return arr.map(fn);
+ },
+
+ // extend an object to handle highchart events (highchart objects, not svg elements).
+ // this is a very simple way of handling events but whatever, it works (i think)
+ _extend: function (object) {
+ if (!object._highcharts_extended) {
+ Object.extend(object, {
+ _highchart_events: {},
+ _highchart_animation: null,
+ _highcharts_extended: true,
+ _highcharts_observe: function (name, fn) {
+ this._highchart_events[name] = [this._highchart_events[name], fn].compact().flatten();
+ },
+ _highcharts_stop_observing: function (name, fn) {
+ if (name) {
+ if (fn) {
+ this._highchart_events[name] = [this._highchart_events[name]].compact().flatten().without(fn);
+ } else {
+ delete this._highchart_events[name];
+ }
+ } else {
+ this._highchart_events = {};
+ }
+ },
+ _highcharts_fire: function (name, args) {
+ var target = this;
+ (this._highchart_events[name] || []).each(function (fn) {
+ // args is never null here
+ if (args.stopped) {
+ return; // "throw $break" wasn't working. i think because of the scope of 'this'.
+ }
+
+ // Attach a simple preventDefault function to skip default handler if called
+ args.preventDefault = function () {
+ args.defaultPrevented = true;
+ };
+ args.target = target;
+
+ // If the event handler return false, prevent the default handler from executing
+ if (fn.bind(this)(args) === false) {
+ args.preventDefault();
+ }
+ }
+.bind(this));
+ }
+ });
+ }
+ }
+};
+}());
diff --git a/public/lib/UEditor/third-party/highcharts/adapters/standalone-framework.js b/public/lib/UEditor/third-party/highcharts/adapters/standalone-framework.js
new file mode 100644
index 00000000..70a92db8
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/adapters/standalone-framework.js
@@ -0,0 +1,17 @@
+/*
+ Highcharts JS v3.0.6 (2013-10-04)
+
+ Standalone Highcharts Framework
+
+ License: MIT License
+*/
+var HighchartsAdapter=function(){function o(c){function a(a,b,d){a.removeEventListener(b,d,!1)}function d(a,b,d){d=a.HCProxiedMethods[d.toString()];a.detachEvent("on"+b,d)}function b(b,c){var f=b.HCEvents,i,g,k,j;if(b.removeEventListener)i=a;else if(b.attachEvent)i=d;else return;c?(g={},g[c]=!0):g=f;for(j in g)if(f[j])for(k=f[j].length;k--;)i(b,j,f[j][k])}c.HCExtended||Highcharts.extend(c,{HCExtended:!0,HCEvents:{},bind:function(b,a){var d=this,c=this.HCEvents,g;if(d.addEventListener)d.addEventListener(b,
+a,!1);else if(d.attachEvent){g=function(b){a.call(d,b)};if(!d.HCProxiedMethods)d.HCProxiedMethods={};d.HCProxiedMethods[a.toString()]=g;d.attachEvent("on"+b,g)}c[b]===r&&(c[b]=[]);c[b].push(a)},unbind:function(c,h){var f,i;c?(f=this.HCEvents[c]||[],h?(i=HighchartsAdapter.inArray(h,f),i>-1&&(f.splice(i,1),this.HCEvents[c]=f),this.removeEventListener?a(this,c,h):this.attachEvent&&d(this,c,h)):(b(this,c),this.HCEvents[c]=[])):(b(this),this.HCEvents={})},trigger:function(b,a){var d=this.HCEvents[b]||
+[],c=d.length,g,k,j;k=function(){a.defaultPrevented=!0};for(g=0;g
=b.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();a=this.options.curAnim[this.prop]=
+!0;for(e in b.curAnim)b.curAnim[e]!==!0&&(a=!1);a&&b.complete&&b.complete.call(this.elem);b=!1}else e=c-this.startTime,this.state=e/b.duration,this.pos=b.easing(e,0,1,b.duration),this.now=this.start+(this.end-this.start)*this.pos,this.update(),b=!0;return b}};this.animate=function(a,d,b){var e,h="",f,i,g;a.stopAnimation=!1;if(typeof b!=="object"||b===null)e=arguments,b={duration:e[2],easing:e[3],complete:e[4]};if(typeof b.duration!=="number")b.duration=400;b.easing=Math[b.easing]||Math.easeInOutSine;
+b.curAnim=Highcharts.extend({},d);for(g in d)i=new n(a,b,g),f=null,g==="d"?(i.paths=c.init(a,a.d,d.d),i.toD=d.d,e=0,f=1):a.attr?e=a.attr(g):(e=parseFloat(HighchartsAdapter._getStyle(a,g))||0,g!=="opacity"&&(h="px")),f||(f=parseFloat(d[g])),i.custom(e,f,h)}},_getStyle:function(c,a){return window.getComputedStyle(c).getPropertyValue(a)},getScript:function(c,a){var d=l.getElementsByTagName("head")[0],b=l.createElement("script");b.type="text/javascript";b.src=c;b.onload=a;d.appendChild(b)},inArray:function(c,
+a){return a.indexOf?a.indexOf(c):p.indexOf.call(a,c)},adapterRun:function(c,a){return parseInt(HighchartsAdapter._getStyle(c,a),10)},grep:function(c,a){return p.filter.call(c,a)},map:function(c,a){for(var d=[],b=0,e=c.length;b-1?b[g]=h.translate(b[g]):u(g,["height","y"])>-1&&(b[g]=v.translate(b[g]));b.width&&(b.width-=h.toPixels(0)-h.left);b.x&&(b.x+=h.minPixelPadding);if(a.shape.type==="path"){g=b.d;o=e;for(var r=j,s=g.length,k=0;k-1&&d.splice(c,1);z(["title","shape","group"],function(b){a[b]&&(a[b].destroy(),a[b]=null)});a.group=a.title=a.shape=a.chart=a.options=null},update:function(a,d){t(this.options,a);this.linkObjects();this.render(d)},
+linkObjects:function(){var a=this.chart,d=this.linkedObject,c=d&&(d.id||d.options.id),b=this.options.linkedTo;if(n(b)){if(!n(d)||b!==c)this.linkedObject=a.get(b)}else this.linkedObject=null}};t(s.prototype,{annotations:{add:function(a,d){var c=this.allItems,b=this.chart,f,e;Object.prototype.toString.call(a)==="[object Array]"||(a=[a]);for(e=a.length;e--;)f=new B(b,a[e]),c.push(f),f.render(d)},redraw:function(){z(this.allItems,function(a){a.redraw()})}}});s.prototype.callbacks.push(function(a){var d=
+a.options.annotations,c;c=a.renderer.g("annotations");c.attr({zIndex:7});c.add();a.annotations.allItems=[];a.annotations.chart=a;a.annotations.group=c;Object.prototype.toString.call(d)==="[object Array]"&&d.length>0&&a.annotations.add(a.options.annotations);i.addEvent(a,"redraw",function(){a.annotations.redraw()})})})(Highcharts,HighchartsAdapter);
diff --git a/public/lib/UEditor/third-party/highcharts/modules/annotations.src.js b/public/lib/UEditor/third-party/highcharts/modules/annotations.src.js
new file mode 100644
index 00000000..40ce8df3
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/annotations.src.js
@@ -0,0 +1,401 @@
+(function (Highcharts, HighchartsAdapter) {
+
+var UNDEFINED,
+ ALIGN_FACTOR,
+ ALLOWED_SHAPES,
+ Chart = Highcharts.Chart,
+ extend = Highcharts.extend,
+ each = Highcharts.each;
+
+ALLOWED_SHAPES = ["path", "rect", "circle"];
+
+ALIGN_FACTOR = {
+ top: 0,
+ left: 0,
+ center: 0.5,
+ middle: 0.5,
+ bottom: 1,
+ right: 1
+};
+
+
+// Highcharts helper methods
+var inArray = HighchartsAdapter.inArray,
+ merge = Highcharts.merge;
+
+function defaultOptions(shapeType) {
+ var shapeOptions,
+ options;
+
+ options = {
+ xAxis: 0,
+ yAxis: 0,
+ title: {
+ style: {},
+ text: "",
+ x: 0,
+ y: 0
+ },
+ shape: {
+ params: {
+ stroke: "#000000",
+ fill: "transparent",
+ strokeWidth: 2
+ }
+ }
+ };
+
+ shapeOptions = {
+ circle: {
+ params: {
+ x: 0,
+ y: 0
+ }
+ }
+ };
+
+ if (shapeOptions[shapeType]) {
+ options.shape = merge(options.shape, shapeOptions[shapeType]);
+ }
+
+ return options;
+}
+
+function isArray(obj) {
+ return Object.prototype.toString.call(obj) === '[object Array]';
+}
+
+function isNumber(n) {
+ return typeof n === 'number';
+}
+
+function defined(obj) {
+ return obj !== UNDEFINED && obj !== null;
+}
+
+function translatePath(d, xAxis, yAxis, xOffset, yOffset) {
+ var len = d.length,
+ i = 0;
+
+ while (i < len) {
+ if (typeof d[i] === 'number' && typeof d[i + 1] === 'number') {
+ d[i] = xAxis.toPixels(d[i]) - xOffset;
+ d[i + 1] = yAxis.toPixels(d[i + 1]) - yOffset;
+ i += 2;
+ } else {
+ i += 1;
+ }
+ }
+
+ return d;
+}
+
+
+// Define annotation prototype
+var Annotation = function () {
+ this.init.apply(this, arguments);
+};
+Annotation.prototype = {
+ /*
+ * Initialize the annotation
+ */
+ init: function (chart, options) {
+ var shapeType = options.shape && options.shape.type;
+
+ this.chart = chart;
+ this.options = merge({}, defaultOptions(shapeType), options);
+ },
+
+ /*
+ * Render the annotation
+ */
+ render: function (redraw) {
+ var annotation = this,
+ chart = this.chart,
+ renderer = annotation.chart.renderer,
+ group = annotation.group,
+ title = annotation.title,
+ shape = annotation.shape,
+ options = annotation.options,
+ titleOptions = options.title,
+ shapeOptions = options.shape;
+
+ if (!group) {
+ group = annotation.group = renderer.g();
+ }
+
+
+ if (!shape && shapeOptions && inArray(shapeOptions.type, ALLOWED_SHAPES) !== -1) {
+ shape = annotation.shape = renderer[options.shape.type](shapeOptions.params);
+ shape.add(group);
+ }
+
+ if (!title && titleOptions) {
+ title = annotation.title = renderer.label(titleOptions);
+ title.add(group);
+ }
+
+ group.add(chart.annotations.group);
+
+ // link annotations to point or series
+ annotation.linkObjects();
+
+ if (redraw !== false) {
+ annotation.redraw();
+ }
+ },
+
+ /*
+ * Redraw the annotation title or shape after options update
+ */
+ redraw: function () {
+ var options = this.options,
+ chart = this.chart,
+ group = this.group,
+ title = this.title,
+ shape = this.shape,
+ linkedTo = this.linkedObject,
+ xAxis = chart.xAxis[options.xAxis],
+ yAxis = chart.yAxis[options.yAxis],
+ width = options.width,
+ height = options.height,
+ anchorY = ALIGN_FACTOR[options.anchorY],
+ anchorX = ALIGN_FACTOR[options.anchorX],
+ resetBBox = false,
+ shapeParams,
+ linkType,
+ series,
+ param,
+ bbox,
+ x,
+ y;
+
+ if (linkedTo) {
+ linkType = (linkedTo instanceof Highcharts.Point) ? 'point' :
+ (linkedTo instanceof Highcharts.Series) ? 'series' : null;
+
+ if (linkType === 'point') {
+ options.xValue = linkedTo.x;
+ options.yValue = linkedTo.y;
+ series = linkedTo.series;
+ } else if (linkType === 'series') {
+ series = linkedTo;
+ }
+
+ if (group.visibility !== series.group.visibility) {
+ group.attr({
+ visibility: series.group.visibility
+ });
+ }
+ }
+
+
+ // Based on given options find annotation pixel position
+ x = (defined(options.xValue) ? xAxis.toPixels(options.xValue + xAxis.minPointOffset) - xAxis.minPixelPadding : options.x);
+ y = defined(options.yValue) ? yAxis.toPixels(options.yValue) : options.y;
+
+ if (isNaN(x) || isNaN(y) || !isNumber(x) || !isNumber(y)) {
+ return;
+ }
+
+
+ if (title) {
+ title.attr(options.title);
+ title.css(options.title.style);
+ resetBBox = true;
+ }
+
+ if (shape) {
+ shapeParams = extend({}, options.shape.params);
+
+ if (options.units === 'values') {
+ for (param in shapeParams) {
+ if (inArray(param, ['width', 'x']) > -1) {
+ shapeParams[param] = xAxis.translate(shapeParams[param]);
+ } else if (inArray(param, ['height', 'y']) > -1) {
+ shapeParams[param] = yAxis.translate(shapeParams[param]);
+ }
+ }
+
+ if (shapeParams.width) {
+ shapeParams.width -= xAxis.toPixels(0) - xAxis.left;
+ }
+
+ if (shapeParams.x) {
+ shapeParams.x += xAxis.minPixelPadding;
+ }
+
+ if (options.shape.type === 'path') {
+ translatePath(shapeParams.d, xAxis, yAxis, x, y);
+ }
+ }
+
+ // move the center of the circle to shape x/y
+ if (options.shape.type === 'circle') {
+ shapeParams.x += shapeParams.r;
+ shapeParams.y += shapeParams.r;
+ }
+
+ resetBBox = true;
+ shape.attr(shapeParams);
+ }
+
+ group.bBox = null;
+
+ // If annotation width or height is not defined in options use bounding box size
+ if (!isNumber(width)) {
+ bbox = group.getBBox();
+ width = bbox.width;
+ }
+
+ if (!isNumber(height)) {
+ // get bbox only if it wasn't set before
+ if (!bbox) {
+ bbox = group.getBBox();
+ }
+
+ height = bbox.height;
+ }
+
+ // Calculate anchor point
+ if (!isNumber(anchorX)) {
+ anchorX = ALIGN_FACTOR.center;
+ }
+
+ if (!isNumber(anchorY)) {
+ anchorY = ALIGN_FACTOR.center;
+ }
+
+ // Translate group according to its dimension and anchor point
+ x = x - width * anchorX;
+ y = y - height * anchorY;
+
+ if (chart.animation && defined(group.translateX) && defined(group.translateY)) {
+ group.animate({
+ translateX: x,
+ translateY: y
+ });
+ } else {
+ group.translate(x, y);
+ }
+ },
+
+ /*
+ * Destroy the annotation
+ */
+ destroy: function () {
+ var annotation = this,
+ chart = this.chart,
+ allItems = chart.annotations.allItems,
+ index = allItems.indexOf(annotation);
+
+ if (index > -1) {
+ allItems.splice(index, 1);
+ }
+
+ each(['title', 'shape', 'group'], function (element) {
+ if (annotation[element]) {
+ annotation[element].destroy();
+ annotation[element] = null;
+ }
+ });
+
+ annotation.group = annotation.title = annotation.shape = annotation.chart = annotation.options = null;
+ },
+
+ /*
+ * Update the annotation with a given options
+ */
+ update: function (options, redraw) {
+ extend(this.options, options);
+
+ // update link to point or series
+ this.linkObjects();
+
+ this.render(redraw);
+ },
+
+ linkObjects: function () {
+ var annotation = this,
+ chart = annotation.chart,
+ linkedTo = annotation.linkedObject,
+ linkedId = linkedTo && (linkedTo.id || linkedTo.options.id),
+ options = annotation.options,
+ id = options.linkedTo;
+
+ if (!defined(id)) {
+ annotation.linkedObject = null;
+ } else if (!defined(linkedTo) || id !== linkedId) {
+ annotation.linkedObject = chart.get(id);
+ }
+ }
+};
+
+
+// Add annotations methods to chart prototype
+extend(Chart.prototype, {
+ annotations: {
+ /*
+ * Unified method for adding annotations to the chart
+ */
+ add: function (options, redraw) {
+ var annotations = this.allItems,
+ chart = this.chart,
+ item,
+ len;
+
+ if (!isArray(options)) {
+ options = [options];
+ }
+
+ len = options.length;
+
+ while (len--) {
+ item = new Annotation(chart, options[len]);
+ annotations.push(item);
+ item.render(redraw);
+ }
+ },
+
+ /**
+ * Redraw all annotations, method used in chart events
+ */
+ redraw: function () {
+ each(this.allItems, function (annotation) {
+ annotation.redraw();
+ });
+ }
+ }
+});
+
+
+// Initialize on chart load
+Chart.prototype.callbacks.push(function (chart) {
+ var options = chart.options.annotations,
+ group;
+
+ group = chart.renderer.g("annotations");
+ group.attr({
+ zIndex: 7
+ });
+ group.add();
+
+ // initialize empty array for annotations
+ chart.annotations.allItems = [];
+
+ // link chart object to annotations
+ chart.annotations.chart = chart;
+
+ // link annotations group element to the chart
+ chart.annotations.group = group;
+
+ if (isArray(options) && options.length > 0) {
+ chart.annotations.add(chart.options.annotations);
+ }
+
+ // update annotations after chart redraw
+ Highcharts.addEvent(chart, 'redraw', function () {
+ chart.annotations.redraw();
+ });
+});
+}(Highcharts, HighchartsAdapter));
diff --git a/public/lib/UEditor/third-party/highcharts/modules/canvas-tools.js.REMOVED.git-id b/public/lib/UEditor/third-party/highcharts/modules/canvas-tools.js.REMOVED.git-id
new file mode 100644
index 00000000..0e64064f
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/canvas-tools.js.REMOVED.git-id
@@ -0,0 +1 @@
+0ddf77ac656182a3129978e26e9dfed9d75beb08
\ No newline at end of file
diff --git a/public/lib/UEditor/third-party/highcharts/modules/canvas-tools.src.js.REMOVED.git-id b/public/lib/UEditor/third-party/highcharts/modules/canvas-tools.src.js.REMOVED.git-id
new file mode 100644
index 00000000..2c4941e3
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/canvas-tools.src.js.REMOVED.git-id
@@ -0,0 +1 @@
+3ebbdcf784f5914039cae384c36ff79614baddea
\ No newline at end of file
diff --git a/public/lib/UEditor/third-party/highcharts/modules/data.js b/public/lib/UEditor/third-party/highcharts/modules/data.js
new file mode 100644
index 00000000..e309b39b
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/data.js
@@ -0,0 +1,17 @@
+/*
+ Data plugin for Highcharts
+
+ (c) 2012-2013 Torstein Hønsi
+ Last revision 2013-06-07
+
+ License: www.highcharts.com/license
+*/
+(function(h){var k=h.each,m=function(b,a){this.init(b,a)};h.extend(m.prototype,{init:function(b,a){this.options=b;this.chartOptions=a;this.columns=b.columns||this.rowsToColumns(b.rows)||[];this.columns.length?this.dataFound():(this.parseCSV(),this.parseTable(),this.parseGoogleSpreadsheet())},getColumnDistribution:function(){var b=this.chartOptions,a=b&&b.chart&&b.chart.type,c=[];k(b&&b.series||[],function(b){c.push((h.seriesTypes[b.type||a||"line"].prototype.pointArrayMap||[0]).length)});this.valueCount=
+{global:(h.seriesTypes[a||"line"].prototype.pointArrayMap||[0]).length,individual:c}},dataFound:function(){this.parseTypes();this.findHeaderRow();this.parsed();this.complete()},parseCSV:function(){var b=this,a=this.options,c=a.csv,d=this.columns,f=a.startRow||0,i=a.endRow||Number.MAX_VALUE,j=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g=0;c&&(c=c.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split(a.lineDelimiter||"\n"),k(c,function(c,h){var n=b.trim(c),p=n.indexOf("#")===0;h>=f&&h<=i&&!p&&n!==""&&
+(n=c.split(a.itemDelimiter||","),k(n,function(b,a){a>=j&&a<=e&&(d[a-j]||(d[a-j]=[]),d[a-j][g]=b)}),g+=1)}),this.dataFound())},parseTable:function(){var b=this.options,a=b.table,c=this.columns,d=b.startRow||0,f=b.endRow||Number.MAX_VALUE,i=b.startColumn||0,j=b.endColumn||Number.MAX_VALUE,e;a&&(typeof a==="string"&&(a=document.getElementById(a)),k(a.getElementsByTagName("tr"),function(a,b){e=0;b>=d&&b<=f&&k(a.childNodes,function(a){if((a.tagName==="TD"||a.tagName==="TH")&&e>=i&&e<=j)c[e]||(c[e]=[]),
+c[e][b-d]=a.innerHTML,e+=1})}),this.dataFound())},parseGoogleSpreadsheet:function(){var b=this,a=this.options,c=a.googleSpreadsheetKey,d=this.columns,f=a.startRow||0,i=a.endRow||Number.MAX_VALUE,j=a.startColumn||0,e=a.endColumn||Number.MAX_VALUE,g,h;c&&jQuery.getJSON("https://spreadsheets.google.com/feeds/cells/"+c+"/"+(a.googleSpreadsheetWorksheet||"od6")+"/public/values?alt=json-in-script&callback=?",function(a){var a=a.feed.entry,c,k=a.length,m=0,o=0,l;for(l=0;l=j&&l<=e)d[l-j]=[],d[l-j].length=Math.min(o,i-f);for(l=0;l=j&&h<=e&&g>=f&&g<=i)d[h-j][g-f]=c.content.$t;b.dataFound()})},findHeaderRow:function(){k(this.columns,function(){});this.headerRow=0},trim:function(b){return typeof b==="string"?b.replace(/^\s+|\s+$/g,""):b},parseTypes:function(){for(var b=this.columns,a=b.length,c,d,f,i;a--;)for(c=b[a].length;c--;)d=b[a][c],f=parseFloat(d),i=this.trim(d),
+i==f?(b[a][c]=f,f>31536E6?b[a].isDatetime=!0:b[a].isNumeric=!0):(d=this.parseDate(d),a===0&&typeof d==="number"&&!isNaN(d)?(b[a][c]=d,b[a].isDatetime=!0):b[a][c]=i===""?null:i)},dateFormats:{"YYYY-mm-dd":{regex:"^([0-9]{4})-([0-9]{2})-([0-9]{2})$",parser:function(b){return Date.UTC(+b[1],b[2]-1,+b[3])}}},parseDate:function(b){var a=this.options.parseDate,c,d,f;a&&(c=a(b));if(typeof b==="string")for(d in this.dateFormats)a=this.dateFormats[d],(f=b.match(a.regex))&&(c=a.parser(f));return c},rowsToColumns:function(b){var a,
+c,d,f,i;if(b){i=[];c=b.length;for(a=0;a1&&(a=b.shift(),this.headerRow===0&&a.shift(),a.isDatetime?c="datetime":a.isNumeric||(c="category"));for(e=0;e1&&j[g].push(b[e+1][g]!==void 0?b[e+1][g]:null),f>2&&j[g].push(b[e+2][g]!==void 0?b[e+2][g]:null),f>3&&j[g].push(b[e+3][g]!==void 0?b[e+3][g]:null),f>4&&j[g].push(b[e+4][g]!==void 0?b[e+4][g]:null);i[k]={name:b[e].name,data:j};e+=f}d.complete({xAxis:{type:c},series:i})}}});h.Data=m;h.data=function(b,a){return new m(b,a)};h.wrap(h.Chart.prototype,
+"init",function(b,a,c){var d=this;a&&a.data?h.data(h.extend(a.data,{complete:function(f){a.series&&k(a.series,function(b,c){a.series[c]=h.merge(b,f.series[c])});a=h.merge(f,a);b.call(d,a,c)}}),a):b.call(d,a,c)})})(Highcharts);
diff --git a/public/lib/UEditor/third-party/highcharts/modules/data.src.js.REMOVED.git-id b/public/lib/UEditor/third-party/highcharts/modules/data.src.js.REMOVED.git-id
new file mode 100644
index 00000000..03c1c6f3
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/data.src.js.REMOVED.git-id
@@ -0,0 +1 @@
+d344799f07a6d8a4e1922ab40a77b440bfbeb0f6
\ No newline at end of file
diff --git a/public/lib/UEditor/third-party/highcharts/modules/drilldown.js b/public/lib/UEditor/third-party/highcharts/modules/drilldown.js
new file mode 100644
index 00000000..1df1acce
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/drilldown.js
@@ -0,0 +1,11 @@
+(function(e){function q(b,a,c){return"rgba("+[Math.round(b[0]+(a[0]-b[0])*c),Math.round(b[1]+(a[1]-b[1])*c),Math.round(b[2]+(a[2]-b[2])*c),b[3]+(a[3]-b[3])*c].join(",")+")"}var m=function(){},j=e.getOptions(),g=e.each,n=e.extend,o=e.wrap,h=e.Chart,i=e.seriesTypes,k=i.pie,l=i.column,r=HighchartsAdapter.fireEvent;n(j.lang,{drillUpText:"◁ Back to {series.name}"});j.drilldown={activeAxisLabelStyle:{cursor:"pointer",color:"#039",fontWeight:"bold",textDecoration:"underline"},activeDataLabelStyle:{cursor:"pointer",
+color:"#039",fontWeight:"bold",textDecoration:"underline"},animation:{duration:500},drillUpButton:{position:{align:"right",x:-10,y:10}}};e.SVGRenderer.prototype.Element.prototype.fadeIn=function(){this.attr({opacity:0.1,visibility:"visible"}).animate({opacity:1},{duration:250})};h.prototype.drilldownLevels=[];h.prototype.addSeriesAsDrilldown=function(b,a){var c=b.series,d=c.xAxis,f=c.yAxis,e;e=b.color||c.color;var g,a=n({color:e},a);g=HighchartsAdapter.inArray(this,c.points);this.drilldownLevels.push({seriesOptions:c.userOptions,
+shapeArgs:b.shapeArgs,bBox:b.graphic.getBBox(),color:e,newSeries:a,pointOptions:c.options.data[g],pointIndex:g,oldExtremes:{xMin:d&&d.userMin,xMax:d&&d.userMax,yMin:f&&f.userMin,yMax:f&&f.userMax}});e=this.addSeries(a,!1);if(d)d.oldPos=d.pos,d.userMin=d.userMax=null,f.userMin=f.userMax=null;if(c.type===e.type)e.animate=e.animateDrilldown||m,e.options.animation=!0;c.remove(!1);this.redraw();this.showDrillUpButton()};h.prototype.getDrilldownBackText=function(){return this.options.lang.drillUpText.replace("{series.name}",
+this.drilldownLevels[this.drilldownLevels.length-1].seriesOptions.name)};h.prototype.showDrillUpButton=function(){var b=this,a=this.getDrilldownBackText(),c=b.options.drilldown.drillUpButton;this.drillUpButton?this.drillUpButton.attr({text:a}).align():this.drillUpButton=this.renderer.button(a,null,null,function(){b.drillUp()}).attr(n({align:c.position.align,zIndex:9},c.theme)).add().align(c.position,!1,c.relativeTo||"plotBox")};h.prototype.drillUp=function(){var b=this.drilldownLevels.pop(),a=this.series[0],
+c=b.oldExtremes,d=this.addSeries(b.seriesOptions,!1);r(this,"drillup",{seriesOptions:b.seriesOptions});if(d.type===a.type)d.drilldownLevel=b,d.animate=d.animateDrillupTo||m,d.options.animation=!0,a.animateDrillupFrom&&a.animateDrillupFrom(b);a.remove(!1);d.xAxis&&(d.xAxis.setExtremes(c.xMin,c.xMax,!1),d.yAxis.setExtremes(c.yMin,c.yMax,!1));this.redraw();this.drilldownLevels.length===0?this.drillUpButton=this.drillUpButton.destroy():this.drillUpButton.attr({text:this.getDrilldownBackText()}).align()};
+k.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],c=this.chart.options.drilldown.animation,d=a.shapeArgs,f=d.start,s=(d.end-f)/this.points.length,h=e.Color(a.color).rgba;b||g(this.points,function(a,b){var g=e.Color(a.color).rgba;a.graphic.attr(e.merge(d,{start:f+b*s,end:f+(b+1)*s})).animate(a.shapeArgs,e.merge(c,{step:function(a,d){d.prop==="start"&&this.attr({fill:q(h,g,d.pos)})}}))})};k.prototype.animateDrillupTo=l.prototype.animateDrillupTo=
+function(b){if(!b){var a=this,c=a.drilldownLevel;g(this.points,function(a){a.graphic.hide();a.dataLabel&&a.dataLabel.hide();a.connector&&a.connector.hide()});setTimeout(function(){g(a.points,function(a,b){var e=b===c.pointIndex?"show":"fadeIn";a.graphic[e]();if(a.dataLabel)a.dataLabel[e]();if(a.connector)a.connector[e]()})},Math.max(this.chart.options.drilldown.animation.duration-50,0));this.animate=m}};l.prototype.animateDrilldown=function(b){var a=this.chart.drilldownLevels[this.chart.drilldownLevels.length-
+1].shapeArgs,c=this.chart.options.drilldown.animation;b||(a.x+=this.xAxis.oldPos-this.xAxis.pos,g(this.points,function(b){b.graphic.attr(a).animate(b.shapeArgs,c)}))};l.prototype.animateDrillupFrom=k.prototype.animateDrillupFrom=function(b){var a=this.chart.options.drilldown.animation,c=this.group;delete this.group;g(this.points,function(d){var f=d.graphic,g=e.Color(d.color).rgba;delete d.graphic;f.animate(b.shapeArgs,e.merge(a,{step:function(a,c){c.prop==="start"&&this.attr({fill:q(g,e.Color(b.color).rgba,
+c.pos)})},complete:function(){f.destroy();c&&(c=c.destroy())}}))})};e.Point.prototype.doDrilldown=function(){for(var b=this.series.chart,a=b.options.drilldown,c=a.series.length,d;c--&&!d;)a.series[c].id===this.drilldown&&(d=a.series[c]);r(b,"drilldown",{point:this,seriesOptions:d});d&&b.addSeriesAsDrilldown(this,d)};o(e.Point.prototype,"init",function(b,a,c,d){var f=b.call(this,a,c,d),b=a.chart,a=(a=a.xAxis&&a.xAxis.ticks[d])&&a.label;if(f.drilldown){if(e.addEvent(f,"click",function(){f.doDrilldown()}),
+a){if(!a._basicStyle)a._basicStyle=a.element.getAttribute("style");a.addClass("highcharts-drilldown-axis-label").css(b.options.drilldown.activeAxisLabelStyle).on("click",function(){f.doDrilldown&&f.doDrilldown()})}}else a&&a._basicStyle&&a.element.setAttribute("style",a._basicStyle);return f});o(e.Series.prototype,"drawDataLabels",function(b){var a=this.chart.options.drilldown.activeDataLabelStyle;b.call(this);g(this.points,function(b){if(b.drilldown&&b.dataLabel)b.dataLabel.attr({"class":"highcharts-drilldown-data-label"}).css(a).on("click",
+function(){b.doDrilldown()})})});l.prototype.supportsDrilldown=!0;k.prototype.supportsDrilldown=!0;var p,j=function(b){b.call(this);g(this.points,function(a){a.drilldown&&a.graphic&&a.graphic.attr({"class":"highcharts-drilldown-point"}).css({cursor:"pointer"})})};for(p in i)i[p].prototype.supportsDrilldown&&o(i[p].prototype,"drawTracker",j)})(Highcharts);
diff --git a/public/lib/UEditor/third-party/highcharts/modules/drilldown.src.js.REMOVED.git-id b/public/lib/UEditor/third-party/highcharts/modules/drilldown.src.js.REMOVED.git-id
new file mode 100644
index 00000000..8beedf9e
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/drilldown.src.js.REMOVED.git-id
@@ -0,0 +1 @@
+558aed4df47d00419d337aed6477ed0b2eb72663
\ No newline at end of file
diff --git a/public/lib/UEditor/third-party/highcharts/modules/exporting.js b/public/lib/UEditor/third-party/highcharts/modules/exporting.js
new file mode 100644
index 00000000..8ec202c4
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/exporting.js
@@ -0,0 +1,22 @@
+/*
+ Highcharts JS v3.0.6 (2013-10-04)
+ Exporting module
+
+ (c) 2010-2013 Torstein Hønsi
+
+ License: www.highcharts.com/license
+*/
+(function(f){var A=f.Chart,t=f.addEvent,C=f.removeEvent,k=f.createElement,n=f.discardElement,u=f.css,o=f.merge,r=f.each,p=f.extend,D=Math.max,j=document,B=window,E=f.isTouchDevice,F=f.Renderer.prototype.symbols,x=f.getOptions(),y;p(x.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"});x.navigation={menuStyle:{border:"1px solid #A0A0A0",
+background:"#FFFFFF",padding:"5px 0"},menuItemStyle:{padding:"0 10px",background:"none",color:"#303030",fontSize:E?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{symbolFill:"#E0E0E0",symbolSize:14,symbolStroke:"#666",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,theme:{fill:"white",stroke:"none"},verticalAlign:"top",width:24}};x.exporting={type:"image/png",url:"http://export.highcharts.com/",buttons:{contextButton:{menuClassName:"highcharts-contextmenu",
+symbol:"menu",_titleKey:"contextButtonTitle",menuItems:[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]}}};f.post=function(c,a){var d,b;b=k("form",{method:"post",
+action:c,enctype:"multipart/form-data"},{display:"none"},j.body);for(d in a)k("input",{type:"hidden",name:d,value:a[d]},null,b);b.submit();n(b)};p(A.prototype,{getSVG:function(c){var a=this,d,b,z,h,g=o(a.options,c);if(!j.createElementNS)j.createElementNS=function(a,b){return j.createElement(b)};c=k("div",null,{position:"absolute",top:"-9999em",width:a.chartWidth+"px",height:a.chartHeight+"px"},j.body);b=a.renderTo.style.width;h=a.renderTo.style.height;b=g.exporting.sourceWidth||g.chart.width||/px$/.test(b)&&
+parseInt(b,10)||600;h=g.exporting.sourceHeight||g.chart.height||/px$/.test(h)&&parseInt(h,10)||400;p(g.chart,{animation:!1,renderTo:c,forExport:!0,width:b,height:h});g.exporting.enabled=!1;g.series=[];r(a.series,function(a){z=o(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});z.isInternal||g.series.push(z)});d=new f.Chart(g,a.callback);r(["xAxis","yAxis"],function(b){r(a[b],function(a,c){var g=d[b][c],f=a.getExtremes(),h=f.userMin,f=f.userMax;g&&(h!==void 0||f!==void 0)&&g.setExtremes(h,
+f,!0,!1)})});b=d.container.innerHTML;g=null;d.destroy();n(c);b=b.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/").replace(/ /g," ").replace(//g,"").replace(/
/g,'xlink:href="$1"/>').replace(/id=([^" >]+)/g,'id="$1"').replace(/class=([^" >]+)/g,'class="$1"').replace(/ transform /g," ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()});return b=b.replace(/(url\(#highcharts-[0-9]+)"/g,"$1").replace(/"/g,"'")},exportChart:function(c,a){var c=c||{},d=this.options.exporting,d=this.getSVG(o({chart:{borderRadius:0}},d.chartOptions,a,{exporting:{sourceWidth:c.sourceWidth||
+d.sourceWidth,sourceHeight:c.sourceHeight||d.sourceHeight}})),c=o(this.options.exporting,c);f.post(c.url,{filename:c.filename||"chart",type:c.type,width:c.width||0,scale:c.scale||2,svg:d})},print:function(){var c=this,a=c.container,d=[],b=a.parentNode,f=j.body,h=f.childNodes;if(!c.isPrinting)c.isPrinting=!0,r(h,function(a,b){if(a.nodeType===1)d[b]=a.style.display,a.style.display="none"}),f.appendChild(a),B.focus(),B.print(),setTimeout(function(){b.appendChild(a);r(h,function(a,b){if(a.nodeType===
+1)a.style.display=d[b]});c.isPrinting=!1},1E3)},contextMenu:function(c,a,d,b,f,h,g){var e=this,j=e.options.navigation,q=j.menuItemStyle,l=e.chartWidth,m=e.chartHeight,o="cache-"+c,i=e[o],s=D(f,h),v,w,n;if(!i)e[o]=i=k("div",{className:c},{position:"absolute",zIndex:1E3,padding:s+"px"},e.container),v=k("div",null,p({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},j.menuStyle),i),w=function(){u(i,{display:"none"});g&&g.setState(0);e.openMenu=!1},t(i,
+"mouseleave",function(){n=setTimeout(w,500)}),t(i,"mouseenter",function(){clearTimeout(n)}),t(document,"mousedown",function(a){e.pointer.inClass(a.target,c)||w()}),r(a,function(a){if(a){var b=a.separator?k("hr",null,null,v):k("div",{onmouseover:function(){u(this,j.menuItemHoverStyle)},onmouseout:function(){u(this,q)},onclick:function(){w();a.onclick.apply(e,arguments)},innerHTML:a.text||e.options.lang[a.textKey]},p({cursor:"pointer"},q),v);e.exportDivElements.push(b)}}),e.exportDivElements.push(v,
+i),e.exportMenuWidth=i.offsetWidth,e.exportMenuHeight=i.offsetHeight;a={display:"block"};d+e.exportMenuWidth>l?a.right=l-d-f-s+"px":a.left=d-s+"px";b+h+e.exportMenuHeight>m&&g.alignOptions.verticalAlign!=="top"?a.bottom=m-b-s+"px":a.top=b+h-s+"px";u(i,a);e.openMenu=!0},addButton:function(c){var a=this,d=a.renderer,b=o(a.options.navigation.buttonOptions,c),j=b.onclick,h=b.menuItems,g,e,k={stroke:b.symbolStroke,fill:b.symbolFill},q=b.symbolSize||12;if(!a.btnCount)a.btnCount=0;if(!a.exportDivElements)a.exportDivElements=
+[],a.exportSVGElements=[];if(b.enabled!==!1){var l=b.theme,m=l.states,n=m&&m.hover,m=m&&m.select,i;delete l.states;j?i=function(){j.apply(a,arguments)}:h&&(i=function(){a.contextMenu(e.menuClassName,h,e.translateX,e.translateY,e.width,e.height,e);e.setState(2)});b.text&&b.symbol?l.paddingLeft=f.pick(l.paddingLeft,25):b.text||p(l,{width:b.width,height:b.height,padding:0});e=d.button(b.text,0,0,i,l,n,m).attr({title:a.options.lang[b._titleKey],"stroke-linecap":"round"});e.menuClassName=c.menuClassName||
+"highcharts-menu-"+a.btnCount++;b.symbol&&(g=d.symbol(b.symbol,b.symbolX-q/2,b.symbolY-q/2,q,q).attr(p(k,{"stroke-width":b.symbolStrokeWidth||1,zIndex:1})).add(e));e.add().align(p(b,{width:e.width,x:f.pick(b.x,y)}),!0,"spacingBox");y+=(e.width+b.buttonSpacing)*(b.align==="right"?-1:1);a.exportSVGElements.push(e,g)}},destroyExport:function(c){var c=c.target,a,d;for(a=0;aj-s||j===s?r:r+(p-r)*((j-s-k)/(j-s))};this.getX=function(k,a){return b+(a?-1:1)*(q(k)/2+c.dataLabels.distance)};this.center=[b,d,j];this.centerX=b;A(a,function(a){g+=a.y});A(a,function(a){o=null;x=g?a.y/g:0;m=d-j/2+h*j;l=m+x*j;i=q(m);y=b-i/2;B=y+
+i;i=q(l);n=b-i/2;t=n+i;m>v?(y=n=b-r/2,B=t=b+r/2):l>v&&(o=l,i=q(v),n=b-i/2,t=n+i,l=v);w=["M",y,m,"L",B,m,t,l];o&&w.push(t,o,n,o);w.push(n,l,"Z");a.shapeType="path";a.shapeArgs={d:w};a.percentage=x*100;a.plotX=b;a.plotY=(m+(o||l))/2;a.tooltipPos=[b,a.plotY];a.slice=z;a.half=u;h+=x});this.setTooltipPoints()},drawPoints:function(){var a=this,g=a.options,e=a.chart.renderer;A(a.data,function(f){var h=f.graphic,c=f.shapeArgs;h?h.animate(c):f.graphic=e.path(c).attr({fill:f.color,stroke:g.borderColor,"stroke-width":g.borderWidth}).add(a.group)})},
+sortByAngle:z,drawDataLabels:function(){var a=this.data,g=this.options.dataLabels.distance,e,f,h,c=a.length,d,b;for(this.center[2]-=2*g;c--;)h=a[c],f=(e=h.half)?1:-1,b=h.plotY,d=this.getX(b,e),h.labelPos=[0,b,d+(g-5)*f,b,d+g*f,b,e?"right":"left",0];p.pie.prototype.drawDataLabels.call(this)}})})(Highcharts);
diff --git a/public/lib/UEditor/third-party/highcharts/modules/funnel.src.js b/public/lib/UEditor/third-party/highcharts/modules/funnel.src.js
new file mode 100644
index 00000000..f9f5c080
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/funnel.src.js
@@ -0,0 +1,289 @@
+/**
+ * @license
+ * Highcharts funnel module, Beta
+ *
+ * (c) 2010-2012 Torstein Hønsi
+ *
+ * License: www.highcharts.com/license
+ */
+
+/*global Highcharts */
+(function (Highcharts) {
+
+'use strict';
+
+// create shortcuts
+var defaultOptions = Highcharts.getOptions(),
+ defaultPlotOptions = defaultOptions.plotOptions,
+ seriesTypes = Highcharts.seriesTypes,
+ merge = Highcharts.merge,
+ noop = function () {},
+ each = Highcharts.each;
+
+// set default options
+defaultPlotOptions.funnel = merge(defaultPlotOptions.pie, {
+ center: ['50%', '50%'],
+ width: '90%',
+ neckWidth: '30%',
+ height: '100%',
+ neckHeight: '25%',
+
+ dataLabels: {
+ //position: 'right',
+ connectorWidth: 1,
+ connectorColor: '#606060'
+ },
+ size: true, // to avoid adapting to data label size in Pie.drawDataLabels
+ states: {
+ select: {
+ color: '#C0C0C0',
+ borderColor: '#000000',
+ shadow: false
+ }
+ }
+});
+
+
+seriesTypes.funnel = Highcharts.extendClass(seriesTypes.pie, {
+
+ type: 'funnel',
+ animate: noop,
+
+ /**
+ * Overrides the pie translate method
+ */
+ translate: function () {
+
+ var
+ // Get positions - either an integer or a percentage string must be given
+ getLength = function (length, relativeTo) {
+ return (/%$/).test(length) ?
+ relativeTo * parseInt(length, 10) / 100 :
+ parseInt(length, 10);
+ },
+
+ sum = 0,
+ series = this,
+ chart = series.chart,
+ plotWidth = chart.plotWidth,
+ plotHeight = chart.plotHeight,
+ cumulative = 0, // start at top
+ options = series.options,
+ center = options.center,
+ centerX = getLength(center[0], plotWidth),
+ centerY = getLength(center[0], plotHeight),
+ width = getLength(options.width, plotWidth),
+ tempWidth,
+ getWidthAt,
+ height = getLength(options.height, plotHeight),
+ neckWidth = getLength(options.neckWidth, plotWidth),
+ neckHeight = getLength(options.neckHeight, plotHeight),
+ neckY = height - neckHeight,
+ data = series.data,
+ path,
+ fraction,
+ half = options.dataLabels.position === 'left' ? 1 : 0,
+
+ x1,
+ y1,
+ x2,
+ x3,
+ y3,
+ x4,
+ y5;
+
+ // Return the width at a specific y coordinate
+ series.getWidthAt = getWidthAt = function (y) {
+ return y > height - neckHeight || height === neckHeight ?
+ neckWidth :
+ neckWidth + (width - neckWidth) * ((height - neckHeight - y) / (height - neckHeight));
+ };
+ series.getX = function (y, half) {
+ return centerX + (half ? -1 : 1) * ((getWidthAt(y) / 2) + options.dataLabels.distance);
+ };
+
+ // Expose
+ series.center = [centerX, centerY, height];
+ series.centerX = centerX;
+
+ /*
+ * Individual point coordinate naming:
+ *
+ * x1,y1 _________________ x2,y1
+ * \ /
+ * \ /
+ * \ /
+ * \ /
+ * \ /
+ * x3,y3 _________ x4,y3
+ *
+ * Additional for the base of the neck:
+ *
+ * | |
+ * | |
+ * | |
+ * x3,y5 _________ x4,y5
+ */
+
+
+
+
+ // get the total sum
+ each(data, function (point) {
+ sum += point.y;
+ });
+
+ each(data, function (point) {
+ // set start and end positions
+ y5 = null;
+ fraction = sum ? point.y / sum : 0;
+ y1 = centerY - height / 2 + cumulative * height;
+ y3 = y1 + fraction * height;
+ //tempWidth = neckWidth + (width - neckWidth) * ((height - neckHeight - y1) / (height - neckHeight));
+ tempWidth = getWidthAt(y1);
+ x1 = centerX - tempWidth / 2;
+ x2 = x1 + tempWidth;
+ tempWidth = getWidthAt(y3);
+ x3 = centerX - tempWidth / 2;
+ x4 = x3 + tempWidth;
+
+ // the entire point is within the neck
+ if (y1 > neckY) {
+ x1 = x3 = centerX - neckWidth / 2;
+ x2 = x4 = centerX + neckWidth / 2;
+
+ // the base of the neck
+ } else if (y3 > neckY) {
+ y5 = y3;
+
+ tempWidth = getWidthAt(neckY);
+ x3 = centerX - tempWidth / 2;
+ x4 = x3 + tempWidth;
+
+ y3 = neckY;
+ }
+
+ // save the path
+ path = [
+ 'M',
+ x1, y1,
+ 'L',
+ x2, y1,
+ x4, y3
+ ];
+ if (y5) {
+ path.push(x4, y5, x3, y5);
+ }
+ path.push(x3, y3, 'Z');
+
+ // prepare for using shared dr
+ point.shapeType = 'path';
+ point.shapeArgs = { d: path };
+
+
+ // for tooltips and data labels
+ point.percentage = fraction * 100;
+ point.plotX = centerX;
+ point.plotY = (y1 + (y5 || y3)) / 2;
+
+ // Placement of tooltips and data labels
+ point.tooltipPos = [
+ centerX,
+ point.plotY
+ ];
+
+ // Slice is a noop on funnel points
+ point.slice = noop;
+
+ // Mimicking pie data label placement logic
+ point.half = half;
+
+ cumulative += fraction;
+ });
+
+
+ series.setTooltipPoints();
+ },
+ /**
+ * Draw a single point (wedge)
+ * @param {Object} point The point object
+ * @param {Object} color The color of the point
+ * @param {Number} brightness The brightness relative to the color
+ */
+ drawPoints: function () {
+ var series = this,
+ options = series.options,
+ chart = series.chart,
+ renderer = chart.renderer;
+
+ each(series.data, function (point) {
+
+ var graphic = point.graphic,
+ shapeArgs = point.shapeArgs;
+
+ if (!graphic) { // Create the shapes
+ point.graphic = renderer.path(shapeArgs).
+ attr({
+ fill: point.color,
+ stroke: options.borderColor,
+ 'stroke-width': options.borderWidth
+ }).
+ add(series.group);
+
+ } else { // Update the shapes
+ graphic.animate(shapeArgs);
+ }
+ });
+ },
+
+ /**
+ * Funnel items don't have angles (#2289)
+ */
+ sortByAngle: noop,
+
+ /**
+ * Extend the pie data label method
+ */
+ drawDataLabels: function () {
+ var data = this.data,
+ labelDistance = this.options.dataLabels.distance,
+ leftSide,
+ sign,
+ point,
+ i = data.length,
+ x,
+ y;
+
+ // In the original pie label anticollision logic, the slots are distributed
+ // from one labelDistance above to one labelDistance below the pie. In funnels
+ // we don't want this.
+ this.center[2] -= 2 * labelDistance;
+
+ // Set the label position array for each point.
+ while (i--) {
+ point = data[i];
+ leftSide = point.half;
+ sign = leftSide ? 1 : -1;
+ y = point.plotY;
+ x = this.getX(y, leftSide);
+
+ // set the anchor point for data labels
+ point.labelPos = [
+ 0, // first break of connector
+ y, // a/a
+ x + (labelDistance - 5) * sign, // second break, right outside point shape
+ y, // a/a
+ x + labelDistance * sign, // landing point for connector
+ y, // a/a
+ leftSide ? 'right' : 'left', // alignment
+ 0 // center angle
+ ];
+ }
+
+ seriesTypes.pie.prototype.drawDataLabels.call(this);
+ }
+
+});
+
+
+}(Highcharts));
diff --git a/public/lib/UEditor/third-party/highcharts/modules/heatmap.js b/public/lib/UEditor/third-party/highcharts/modules/heatmap.js
new file mode 100644
index 00000000..32f9a3f3
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/heatmap.js
@@ -0,0 +1 @@
+(function(b){var k=b.seriesTypes,l=b.each;k.heatmap=b.extendClass(k.map,{colorKey:"z",useMapGeometry:!1,pointArrayMap:["y","z"],translate:function(){var c=this,b=c.options,i=Number.MAX_VALUE,j=Number.MIN_VALUE;c.generatePoints();l(c.data,function(a){var e=a.x,f=a.y,d=a.z,g=(b.colsize||1)/2,h=(b.rowsize||1)/2;a.path=["M",e-g,f-h,"L",e+g,f-h,"L",e+g,f+h,"L",e-g,f+h,"Z"];a.shapeType="path";a.shapeArgs={d:c.translatePath(a.path)};typeof d==="number"&&(d>j?j=d:d dataMax) {
+ dataMax = value;
+ } else if (value < dataMin) {
+ dataMin = value;
+ }
+ }
+ });
+
+ series.translateColors(dataMin, dataMax);
+ },
+
+ getBox: function () {}
+
+ });
+
+}(Highcharts));
diff --git a/public/lib/UEditor/third-party/highcharts/modules/map.js b/public/lib/UEditor/third-party/highcharts/modules/map.js
new file mode 100644
index 00000000..9b8a632d
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/map.js
@@ -0,0 +1,27 @@
+/*
+ Map plugin v0.1 for Highcharts
+
+ (c) 2011-2013 Torstein Hønsi
+
+ License: www.highcharts.com/license
+*/
+(function(g){function x(a,b,c){for(var d=4,e=[];d--;)e[d]=Math.round(b.rgba[d]+(a.rgba[d]-b.rgba[d])*(1-c));return"rgba("+e.join(",")+")"}var r=g.Axis,y=g.Chart,s=g.Point,z=g.Pointer,l=g.each,v=g.extend,p=g.merge,n=g.pick,A=g.numberFormat,B=g.getOptions(),k=g.seriesTypes,q=B.plotOptions,t=g.wrap,u=g.Color,w=function(){};B.mapNavigation={buttonOptions:{align:"right",verticalAlign:"bottom",x:0,width:18,height:18,style:{fontSize:"15px",fontWeight:"bold",textAlign:"center"}},buttons:{zoomIn:{onclick:function(){this.mapZoom(0.5)},
+text:"+",y:-32},zoomOut:{onclick:function(){this.mapZoom(2)},text:"-",y:0}}};g.splitPath=function(a){var b,a=a.replace(/([A-Za-z])/g," $1 "),a=a.replace(/^\s*/,"").replace(/\s*$/,""),a=a.split(/[ ,]+/);for(b=0;bc?this:e,c=(e.max-e.min)*e.transA,e.minPixelPadding=
+(e.len-c)/2});t(y.prototype,"render",function(a){var b=this,c=b.options.mapNavigation;a.call(b);b.renderMapNavigation();c.zoomOnDoubleClick&&g.addEvent(b.container,"dblclick",function(a){b.pointer.onContainerDblClick(a)});c.zoomOnMouseWheel&&g.addEvent(b.container,document.onmousewheel===void 0?"DOMMouseScroll":"mousewheel",function(a){b.pointer.onContainerMouseWheel(a)})});v(z.prototype,{onContainerDblClick:function(a){var b=this.chart,a=this.normalize(a);b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-
+b.plotTop)&&b.mapZoom(0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY))},onContainerMouseWheel:function(a){var b=this.chart,c,a=this.normalize(a);c=a.detail||-(a.wheelDelta/120);b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop)&&b.mapZoom(c>0?2:0.5,b.xAxis[0].toValue(a.chartX),b.yAxis[0].toValue(a.chartY))}});t(z.prototype,"init",function(a,b,c){a.call(this,b,c);if(c.mapNavigation.enableTouchZoom)this.pinchX=this.pinchHor=this.pinchY=this.pinchVert=!0});v(y.prototype,{renderMapNavigation:function(){var a=
+this,b=this.options.mapNavigation,c=b.buttons,d,e,f,i=function(){this.handler.call(a)};if(b.enableButtons)for(d in c)if(c.hasOwnProperty(d))f=p(b.buttonOptions,c[d]),e=a.renderer.button(f.text,0,0,i).attr({width:f.width,height:f.height}).css(f.style).add(),e.handler=f.onclick,e.align(v(f,{width:e.width,height:e.height}),null,"spacingBox")},fitToBox:function(a,b){l([["x","width"],["y","height"]],function(c){var d=c[0],c=c[1];a[d]+a[c]>b[d]+b[c]&&(a[c]>b[c]?(a[c]=b[c],a[d]=b[d]):a[d]=b[d]+b[c]-a[c]);
+a[c]>b[c]&&(a[c]=b[c]);a[d]"},states:{normal:{animation:!0}}});r=g.extendClass(s,{applyOptions:function(a,b){var c=s.prototype.applyOptions.call(this,a,b);if(c.path&&typeof c.path==="string")c.path=c.options.path=g.splitPath(c.path);return c},onMouseOver:function(){clearTimeout(this.colorInterval);
+s.prototype.onMouseOver.call(this)},onMouseOut:function(){var a=this,b=+new Date,c=u(a.options.color),d=u(a.pointAttr.hover.fill),e=a.series.options.states.normal.animation,f=e&&(e.duration||500);if(f&&c.rgba.length===4&&d.rgba.length===4)delete a.pointAttr[""].fill,clearTimeout(a.colorInterval),a.colorInterval=setInterval(function(){var e=(new Date-b)/f,h=a.graphic;e>1&&(e=1);h&&h.attr("fill",x(d,c,e));e>=1&&clearTimeout(a.colorInterval)},13);s.prototype.onMouseOut.call(a)}});k.map=g.extendClass(k.scatter,
+{type:"map",pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",fill:"color"},colorKey:"y",pointClass:r,trackerGroups:["group","markerGroup","dataLabelsGroup"],getSymbol:w,supportsDrilldown:!0,getExtremesFromAll:!0,useMapGeometry:!0,init:function(a){var b=this,c=a.options.legend.valueDecimals,d=[],e,f,i,h,j,o,m;o=a.options.legend.layout==="horizontal";g.Series.prototype.init.apply(this,arguments);j=b.options.colorRange;if(h=b.options.valueRanges)l(h,function(a){f=a.from;i=a.to;e=
+"";f===void 0?e="< ":i===void 0&&(e="> ");f!==void 0&&(e+=A(f,c));f!==void 0&&i!==void 0&&(e+=" - ");i!==void 0&&(e+=A(i,c));d.push(g.extend({chart:b.chart,name:e,options:{},drawLegendSymbol:k.area.prototype.drawLegendSymbol,visible:!0,setState:function(){},setVisible:function(){}},a))}),b.legendItems=d;else if(j)f=j.from,i=j.to,h=j.fromLabel,j=j.toLabel,m=o?[0,0,1,0]:[0,1,0,0],o||(o=h,h=j,j=o),o={linearGradient:{x1:m[0],y1:m[1],x2:m[2],y2:m[3]},stops:[[0,f],[1,i]]},d=[{chart:b.chart,options:{},fromLabel:h,
+toLabel:j,color:o,drawLegendSymbol:this.drawLegendSymbolGradient,visible:!0,setState:function(){},setVisible:function(){}}],b.legendItems=d},drawLegendSymbol:k.area.prototype.drawLegendSymbol,drawLegendSymbolGradient:function(a,b){var c=a.options.symbolPadding,d=n(a.options.padding,8),e,f,i=this.chart.renderer.fontMetrics(a.options.itemStyle.fontSize).h,h=a.options.layout==="horizontal",j;j=n(a.options.rectangleLength,200);h?(e=-(c/2),f=0):(e=-j+a.baseline-c/2,f=d+i);b.fromText=this.chart.renderer.text(b.fromLabel,
+f,e).attr({zIndex:2}).add(b.legendGroup);f=b.fromText.getBBox();b.legendSymbol=this.chart.renderer.rect(h?f.x+f.width+c:f.x-i-c,f.y,h?j:i,h?i:j,2).attr({zIndex:1}).add(b.legendGroup);j=b.legendSymbol.getBBox();b.toText=this.chart.renderer.text(b.toLabel,j.x+j.width+c,h?e:j.y+j.height-c).attr({zIndex:2}).add(b.legendGroup);e=b.toText.getBBox();h?(a.offsetWidth=f.width+j.width+e.width+c*2+d,a.itemY=i+d):(a.offsetWidth=Math.max(f.width,e.width)+c+j.width+d,a.itemY=j.height+d,a.itemX=c)},getBox:function(a){var b=
+Number.MIN_VALUE,c=Number.MAX_VALUE,d=Number.MIN_VALUE,e=Number.MAX_VALUE;l(a||this.options.data,function(a){for(var i=a.path,h=i.length,j=!1,g=Number.MIN_VALUE,m=Number.MAX_VALUE,k=Number.MIN_VALUE,l=Number.MAX_VALUE;h--;)typeof i[h]==="number"&&!isNaN(i[h])&&(j?(g=Math.max(g,i[h]),m=Math.min(m,i[h])):(k=Math.max(k,i[h]),l=Math.min(l,i[h])),j=!j);a._maxX=g;a._minX=m;a._maxY=k;a._minY=l;b=Math.max(b,g);c=Math.min(c,m);d=Math.max(d,k);e=Math.min(e,l)});this.minY=e;this.maxY=d;this.minX=c;this.maxX=
+b},translatePath:function(a){var b=!1,c=this.xAxis,d=this.yAxis,e,a=[].concat(a);for(e=a.length;e--;)typeof a[e]==="number"&&(a[e]=b?Math.round(c.translate(a[e])):Math.round(d.len-d.translate(a[e])),b=!b);return a},setData:function(){g.Series.prototype.setData.apply(this,arguments);this.getBox()},translate:function(){var a=this,b=Number.MAX_VALUE,c=Number.MIN_VALUE;a.generatePoints();l(a.data,function(d){d.shapeType="path";d.shapeArgs={d:a.translatePath(d.path)};if(typeof d.y==="number")if(d.y>c)c=
+d.y;else if(d.y=i)&&(h===void 0||k<=h)){l=m.color;break}}else e&&k!==void 0&&(m=1-(b-k)/(b-a),l=k===null?c.nullColor:x(i,h,m));if(l)g.color=null,g.options.color=l})},drawGraph:w,drawDataLabels:w,drawPoints:function(){var a=this.xAxis,
+b=this.yAxis,c=this.colorKey;l(this.data,function(a){a.plotY=1;if(a[c]===null)a[c]=0,a.isNull=!0});k.column.prototype.drawPoints.apply(this);l(this.data,function(d){var e=d.dataLabels,f=a.toPixels(d._minX,!0),g=a.toPixels(d._maxX,!0),h=b.toPixels(d._minY,!0),j=b.toPixels(d._maxY,!0);d.plotX=Math.round(f+(g-f)*n(e&&e.anchorX,0.5));d.plotY=Math.round(h+(j-h)*n(e&&e.anchorY,0.5));d.isNull&&(d[c]=null)});g.Series.prototype.drawDataLabels.call(this)},animateDrilldown:function(a){var b=this.chart.plotBox,
+c=this.chart.drilldownLevels[this.chart.drilldownLevels.length-1],d=c.bBox,e=this.chart.options.drilldown.animation;if(!a)a=Math.min(d.width/b.width,d.height/b.height),c.shapeArgs={scaleX:a,scaleY:a,translateX:d.x,translateY:d.y},l(this.points,function(a){a.graphic.attr(c.shapeArgs).animate({scaleX:1,scaleY:1,translateX:0,translateY:0},e)}),delete this.animate},animateDrillupFrom:function(a){k.column.prototype.animateDrillupFrom.call(this,a)},animateDrillupTo:function(a){k.column.prototype.animateDrillupTo.call(this,
+a)}});q.mapline=p(q.map,{lineWidth:1,backgroundColor:"none"});k.mapline=g.extendClass(k.map,{type:"mapline",pointAttrToOptions:{stroke:"color","stroke-width":"lineWidth",fill:"backgroundColor"},drawLegendSymbol:k.line.prototype.drawLegendSymbol});q.mappoint=p(q.scatter,{dataLabels:{enabled:!0,format:"{point.name}",color:"black",style:{textShadow:"0 0 5px white"}}});k.mappoint=g.extendClass(k.scatter,{type:"mappoint"});g.Map=function(a,b){var c={endOnTick:!1,gridLineWidth:0,labels:{enabled:!1},lineWidth:0,
+minPadding:0,maxPadding:0,startOnTick:!1,tickWidth:0,title:null},d;d=a.series;a.series=null;a=p({chart:{type:"map",panning:"xy"},xAxis:c,yAxis:p(c,{reversed:!0})},a,{chart:{inverted:!1}});a.series=d;return new g.Chart(a,b)}})(Highcharts);
diff --git a/public/lib/UEditor/third-party/highcharts/modules/map.src.js.REMOVED.git-id b/public/lib/UEditor/third-party/highcharts/modules/map.src.js.REMOVED.git-id
new file mode 100644
index 00000000..5157cfce
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/map.src.js.REMOVED.git-id
@@ -0,0 +1 @@
+6af8e21e63914533678be7a86bb7455d5b9f1445
\ No newline at end of file
diff --git a/public/lib/UEditor/third-party/highcharts/modules/no-data-to-display.js b/public/lib/UEditor/third-party/highcharts/modules/no-data-to-display.js
new file mode 100644
index 00000000..c9ff9cac
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/no-data-to-display.js
@@ -0,0 +1,12 @@
+/*
+ Highcharts JS v3.0.6 (2013-10-04)
+ Plugin for displaying a message when there is no data visible in chart.
+
+ (c) 2010-2013 Highsoft AS
+ Author: Øystein Moseng
+
+ License: www.highcharts.com/license
+*/
+(function(c){function f(){return!!this.points.length}function g(){this.hasData()?this.hideNoData():this.showNoData()}var d=c.seriesTypes,e=c.Chart.prototype,h=c.getOptions(),i=c.extend;i(h.lang,{noData:"No data to display"});h.noData={position:{x:0,y:0,align:"center",verticalAlign:"middle"},attr:{},style:{fontWeight:"bold",fontSize:"12px",color:"#60606a"}};d.pie.prototype.hasData=f;if(d.gauge)d.gauge.prototype.hasData=f;if(d.waterfall)d.waterfall.prototype.hasData=f;c.Series.prototype.hasData=function(){return this.dataMax!==
+void 0&&this.dataMin!==void 0};e.showNoData=function(a){var b=this.options,a=a||b.lang.noData,b=b.noData;if(!this.noDataLabel)this.noDataLabel=this.renderer.label(a,0,0,null,null,null,null,null,"no-data").attr(b.attr).css(b.style).add(),this.noDataLabel.align(i(this.noDataLabel.getBBox(),b.position),!1,"plotBox")};e.hideNoData=function(){if(this.noDataLabel)this.noDataLabel=this.noDataLabel.destroy()};e.hasData=function(){for(var a=this.series,b=a.length;b--;)if(a[b].hasData()&&!a[b].options.isInternal)return!0;
+return!1};e.callbacks.push(function(a){c.addEvent(a,"load",g);c.addEvent(a,"redraw",g)})})(Highcharts);
diff --git a/public/lib/UEditor/third-party/highcharts/modules/no-data-to-display.src.js b/public/lib/UEditor/third-party/highcharts/modules/no-data-to-display.src.js
new file mode 100644
index 00000000..bc278a8d
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/modules/no-data-to-display.src.js
@@ -0,0 +1,128 @@
+/**
+ * @license Highcharts JS v3.0.6 (2013-10-04)
+ * Plugin for displaying a message when there is no data visible in chart.
+ *
+ * (c) 2010-2013 Highsoft AS
+ * Author: Øystein Moseng
+ *
+ * License: www.highcharts.com/license
+ */
+
+(function (H) { // docs
+
+ var seriesTypes = H.seriesTypes,
+ chartPrototype = H.Chart.prototype,
+ defaultOptions = H.getOptions(),
+ extend = H.extend;
+
+ // Add language option
+ extend(defaultOptions.lang, {
+ noData: 'No data to display'
+ });
+
+ // Add default display options for message
+ defaultOptions.noData = {
+ position: {
+ x: 0,
+ y: 0,
+ align: 'center',
+ verticalAlign: 'middle'
+ },
+ attr: {
+ },
+ style: {
+ fontWeight: 'bold',
+ fontSize: '12px',
+ color: '#60606a'
+ }
+ };
+
+ /**
+ * Define hasData functions for series. These return true if there are data points on this series within the plot area
+ */
+ function hasDataPie() {
+ return !!this.points.length; /* != 0 */
+ }
+
+ seriesTypes.pie.prototype.hasData = hasDataPie;
+
+ if (seriesTypes.gauge) {
+ seriesTypes.gauge.prototype.hasData = hasDataPie;
+ }
+
+ if (seriesTypes.waterfall) {
+ seriesTypes.waterfall.prototype.hasData = hasDataPie;
+ }
+
+ H.Series.prototype.hasData = function () {
+ return this.dataMax !== undefined && this.dataMin !== undefined;
+ };
+
+ /**
+ * Display a no-data message.
+ *
+ * @param {String} str An optional message to show in place of the default one
+ */
+ chartPrototype.showNoData = function (str) {
+ var chart = this,
+ options = chart.options,
+ text = str || options.lang.noData,
+ noDataOptions = options.noData;
+
+ if (!chart.noDataLabel) {
+ chart.noDataLabel = chart.renderer.label(text, 0, 0, null, null, null, null, null, 'no-data')
+ .attr(noDataOptions.attr)
+ .css(noDataOptions.style)
+ .add();
+ chart.noDataLabel.align(extend(chart.noDataLabel.getBBox(), noDataOptions.position), false, 'plotBox');
+ }
+ };
+
+ /**
+ * Hide no-data message
+ */
+ chartPrototype.hideNoData = function () {
+ var chart = this;
+ if (chart.noDataLabel) {
+ chart.noDataLabel = chart.noDataLabel.destroy();
+ }
+ };
+
+ /**
+ * Returns true if there are data points within the plot area now
+ */
+ chartPrototype.hasData = function () {
+ var chart = this,
+ series = chart.series,
+ i = series.length;
+
+ while (i--) {
+ if (series[i].hasData() && !series[i].options.isInternal) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+
+ /**
+ * Show no-data message if there is no data in sight. Otherwise, hide it.
+ */
+ function handleNoData() {
+ var chart = this;
+ if (chart.hasData()) {
+ chart.hideNoData();
+ } else {
+ chart.showNoData();
+ }
+ }
+
+ /**
+ * Add event listener to handle automatic display of no-data message
+ */
+ chartPrototype.callbacks.push(function (chart) {
+ H.addEvent(chart, 'load', handleNoData);
+ H.addEvent(chart, 'redraw', handleNoData);
+ });
+
+}(Highcharts));
diff --git a/public/lib/UEditor/third-party/highcharts/themes/dark-blue.js b/public/lib/UEditor/third-party/highcharts/themes/dark-blue.js
new file mode 100644
index 00000000..47e53e0d
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/themes/dark-blue.js
@@ -0,0 +1,254 @@
+/**
+ * Dark blue theme for Highcharts JS
+ * @author Torstein Hønsi
+ */
+
+Highcharts.theme = {
+ colors: ["#DDDF0D", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee",
+ "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"],
+ chart: {
+ backgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 },
+ stops: [
+ [0, 'rgb(48, 48, 96)'],
+ [1, 'rgb(0, 0, 0)']
+ ]
+ },
+ borderColor: '#000000',
+ borderWidth: 2,
+ className: 'dark-container',
+ plotBackgroundColor: 'rgba(255, 255, 255, .1)',
+ plotBorderColor: '#CCCCCC',
+ plotBorderWidth: 1
+ },
+ title: {
+ style: {
+ color: '#C0C0C0',
+ font: 'bold 16px "Trebuchet MS", Verdana, sans-serif'
+ }
+ },
+ subtitle: {
+ style: {
+ color: '#666666',
+ font: 'bold 12px "Trebuchet MS", Verdana, sans-serif'
+ }
+ },
+ xAxis: {
+ gridLineColor: '#333333',
+ gridLineWidth: 1,
+ labels: {
+ style: {
+ color: '#A0A0A0'
+ }
+ },
+ lineColor: '#A0A0A0',
+ tickColor: '#A0A0A0',
+ title: {
+ style: {
+ color: '#CCC',
+ fontWeight: 'bold',
+ fontSize: '12px',
+ fontFamily: 'Trebuchet MS, Verdana, sans-serif'
+
+ }
+ }
+ },
+ yAxis: {
+ gridLineColor: '#333333',
+ labels: {
+ style: {
+ color: '#A0A0A0'
+ }
+ },
+ lineColor: '#A0A0A0',
+ minorTickInterval: null,
+ tickColor: '#A0A0A0',
+ tickWidth: 1,
+ title: {
+ style: {
+ color: '#CCC',
+ fontWeight: 'bold',
+ fontSize: '12px',
+ fontFamily: 'Trebuchet MS, Verdana, sans-serif'
+ }
+ }
+ },
+ tooltip: {
+ backgroundColor: 'rgba(0, 0, 0, 0.75)',
+ style: {
+ color: '#F0F0F0'
+ }
+ },
+ toolbar: {
+ itemStyle: {
+ color: 'silver'
+ }
+ },
+ plotOptions: {
+ line: {
+ dataLabels: {
+ color: '#CCC'
+ },
+ marker: {
+ lineColor: '#333'
+ }
+ },
+ spline: {
+ marker: {
+ lineColor: '#333'
+ }
+ },
+ scatter: {
+ marker: {
+ lineColor: '#333'
+ }
+ },
+ candlestick: {
+ lineColor: 'white'
+ }
+ },
+ legend: {
+ itemStyle: {
+ font: '9pt Trebuchet MS, Verdana, sans-serif',
+ color: '#A0A0A0'
+ },
+ itemHoverStyle: {
+ color: '#FFF'
+ },
+ itemHiddenStyle: {
+ color: '#444'
+ }
+ },
+ credits: {
+ style: {
+ color: '#666'
+ }
+ },
+ labels: {
+ style: {
+ color: '#CCC'
+ }
+ },
+
+ navigation: {
+ buttonOptions: {
+ symbolStroke: '#DDDDDD',
+ hoverSymbolStroke: '#FFFFFF',
+ theme: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#606060'],
+ [0.6, '#333333']
+ ]
+ },
+ stroke: '#000000'
+ }
+ }
+ },
+
+ // scroll charts
+ rangeSelector: {
+ buttonTheme: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#888'],
+ [0.6, '#555']
+ ]
+ },
+ stroke: '#000000',
+ style: {
+ color: '#CCC',
+ fontWeight: 'bold'
+ },
+ states: {
+ hover: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#BBB'],
+ [0.6, '#888']
+ ]
+ },
+ stroke: '#000000',
+ style: {
+ color: 'white'
+ }
+ },
+ select: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.1, '#000'],
+ [0.3, '#333']
+ ]
+ },
+ stroke: '#000000',
+ style: {
+ color: 'yellow'
+ }
+ }
+ }
+ },
+ inputStyle: {
+ backgroundColor: '#333',
+ color: 'silver'
+ },
+ labelStyle: {
+ color: 'silver'
+ }
+ },
+
+ navigator: {
+ handles: {
+ backgroundColor: '#666',
+ borderColor: '#AAA'
+ },
+ outlineColor: '#CCC',
+ maskFill: 'rgba(16, 16, 16, 0.5)',
+ series: {
+ color: '#7798BF',
+ lineColor: '#A6C7ED'
+ }
+ },
+
+ scrollbar: {
+ barBackgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#888'],
+ [0.6, '#555']
+ ]
+ },
+ barBorderColor: '#CCC',
+ buttonArrowColor: '#CCC',
+ buttonBackgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#888'],
+ [0.6, '#555']
+ ]
+ },
+ buttonBorderColor: '#CCC',
+ rifleColor: '#FFF',
+ trackBackgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0, '#000'],
+ [1, '#333']
+ ]
+ },
+ trackBorderColor: '#666'
+ },
+
+ // special colors for some of the
+ legendBackgroundColor: 'rgba(0, 0, 0, 0.5)',
+ legendBackgroundColorSolid: 'rgb(35, 35, 70)',
+ dataLabelsColor: '#444',
+ textColor: '#C0C0C0',
+ maskColor: 'rgba(255,255,255,0.3)'
+};
+
+// Apply the theme
+var highchartsOptions = Highcharts.setOptions(Highcharts.theme);
diff --git a/public/lib/UEditor/third-party/highcharts/themes/dark-green.js b/public/lib/UEditor/third-party/highcharts/themes/dark-green.js
new file mode 100644
index 00000000..5edddf9a
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/themes/dark-green.js
@@ -0,0 +1,255 @@
+/**
+ * Dark blue theme for Highcharts JS
+ * @author Torstein Hønsi
+ */
+
+Highcharts.theme = {
+ colors: ["#DDDF0D", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee",
+ "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"],
+ chart: {
+ backgroundColor: {
+ linearGradient: [0, 0, 250, 500],
+ stops: [
+ [0, 'rgb(48, 96, 48)'],
+ [1, 'rgb(0, 0, 0)']
+ ]
+ },
+ borderColor: '#000000',
+ borderWidth: 2,
+ className: 'dark-container',
+ plotBackgroundColor: 'rgba(255, 255, 255, .1)',
+ plotBorderColor: '#CCCCCC',
+ plotBorderWidth: 1
+ },
+ title: {
+ style: {
+ color: '#C0C0C0',
+ font: 'bold 16px "Trebuchet MS", Verdana, sans-serif'
+ }
+ },
+ subtitle: {
+ style: {
+ color: '#666666',
+ font: 'bold 12px "Trebuchet MS", Verdana, sans-serif'
+ }
+ },
+ xAxis: {
+ gridLineColor: '#333333',
+ gridLineWidth: 1,
+ labels: {
+ style: {
+ color: '#A0A0A0'
+ }
+ },
+ lineColor: '#A0A0A0',
+ tickColor: '#A0A0A0',
+ title: {
+ style: {
+ color: '#CCC',
+ fontWeight: 'bold',
+ fontSize: '12px',
+ fontFamily: 'Trebuchet MS, Verdana, sans-serif'
+
+ }
+ }
+ },
+ yAxis: {
+ gridLineColor: '#333333',
+ labels: {
+ style: {
+ color: '#A0A0A0'
+ }
+ },
+ lineColor: '#A0A0A0',
+ minorTickInterval: null,
+ tickColor: '#A0A0A0',
+ tickWidth: 1,
+ title: {
+ style: {
+ color: '#CCC',
+ fontWeight: 'bold',
+ fontSize: '12px',
+ fontFamily: 'Trebuchet MS, Verdana, sans-serif'
+ }
+ }
+ },
+ tooltip: {
+ backgroundColor: 'rgba(0, 0, 0, 0.75)',
+ style: {
+ color: '#F0F0F0'
+ }
+ },
+ toolbar: {
+ itemStyle: {
+ color: 'silver'
+ }
+ },
+ plotOptions: {
+ line: {
+ dataLabels: {
+ color: '#CCC'
+ },
+ marker: {
+ lineColor: '#333'
+ }
+ },
+ spline: {
+ marker: {
+ lineColor: '#333'
+ }
+ },
+ scatter: {
+ marker: {
+ lineColor: '#333'
+ }
+ },
+ candlestick: {
+ lineColor: 'white'
+ }
+ },
+ legend: {
+ itemStyle: {
+ font: '9pt Trebuchet MS, Verdana, sans-serif',
+ color: '#A0A0A0'
+ },
+ itemHoverStyle: {
+ color: '#FFF'
+ },
+ itemHiddenStyle: {
+ color: '#444'
+ }
+ },
+ credits: {
+ style: {
+ color: '#666'
+ }
+ },
+ labels: {
+ style: {
+ color: '#CCC'
+ }
+ },
+
+
+ navigation: {
+ buttonOptions: {
+ symbolStroke: '#DDDDDD',
+ hoverSymbolStroke: '#FFFFFF',
+ theme: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#606060'],
+ [0.6, '#333333']
+ ]
+ },
+ stroke: '#000000'
+ }
+ }
+ },
+
+ // scroll charts
+ rangeSelector: {
+ buttonTheme: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#888'],
+ [0.6, '#555']
+ ]
+ },
+ stroke: '#000000',
+ style: {
+ color: '#CCC',
+ fontWeight: 'bold'
+ },
+ states: {
+ hover: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#BBB'],
+ [0.6, '#888']
+ ]
+ },
+ stroke: '#000000',
+ style: {
+ color: 'white'
+ }
+ },
+ select: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.1, '#000'],
+ [0.3, '#333']
+ ]
+ },
+ stroke: '#000000',
+ style: {
+ color: 'yellow'
+ }
+ }
+ }
+ },
+ inputStyle: {
+ backgroundColor: '#333',
+ color: 'silver'
+ },
+ labelStyle: {
+ color: 'silver'
+ }
+ },
+
+ navigator: {
+ handles: {
+ backgroundColor: '#666',
+ borderColor: '#AAA'
+ },
+ outlineColor: '#CCC',
+ maskFill: 'rgba(16, 16, 16, 0.5)',
+ series: {
+ color: '#7798BF',
+ lineColor: '#A6C7ED'
+ }
+ },
+
+ scrollbar: {
+ barBackgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#888'],
+ [0.6, '#555']
+ ]
+ },
+ barBorderColor: '#CCC',
+ buttonArrowColor: '#CCC',
+ buttonBackgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#888'],
+ [0.6, '#555']
+ ]
+ },
+ buttonBorderColor: '#CCC',
+ rifleColor: '#FFF',
+ trackBackgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0, '#000'],
+ [1, '#333']
+ ]
+ },
+ trackBorderColor: '#666'
+ },
+
+ // special colors for some of the
+ legendBackgroundColor: 'rgba(0, 0, 0, 0.5)',
+ legendBackgroundColorSolid: 'rgb(35, 35, 70)',
+ dataLabelsColor: '#444',
+ textColor: '#C0C0C0',
+ maskColor: 'rgba(255,255,255,0.3)'
+};
+
+// Apply the theme
+var highchartsOptions = Highcharts.setOptions(Highcharts.theme);
diff --git a/public/lib/UEditor/third-party/highcharts/themes/gray.js b/public/lib/UEditor/third-party/highcharts/themes/gray.js
new file mode 100644
index 00000000..4e8f82a1
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/themes/gray.js
@@ -0,0 +1,257 @@
+/**
+ * Gray theme for Highcharts JS
+ * @author Torstein Hønsi
+ */
+
+Highcharts.theme = {
+ colors: ["#DDDF0D", "#7798BF", "#55BF3B", "#DF5353", "#aaeeee", "#ff0066", "#eeaaee",
+ "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"],
+ chart: {
+ backgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0, 'rgb(96, 96, 96)'],
+ [1, 'rgb(16, 16, 16)']
+ ]
+ },
+ borderWidth: 0,
+ borderRadius: 15,
+ plotBackgroundColor: null,
+ plotShadow: false,
+ plotBorderWidth: 0
+ },
+ title: {
+ style: {
+ color: '#FFF',
+ font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
+ }
+ },
+ subtitle: {
+ style: {
+ color: '#DDD',
+ font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
+ }
+ },
+ xAxis: {
+ gridLineWidth: 0,
+ lineColor: '#999',
+ tickColor: '#999',
+ labels: {
+ style: {
+ color: '#999',
+ fontWeight: 'bold'
+ }
+ },
+ title: {
+ style: {
+ color: '#AAA',
+ font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
+ }
+ }
+ },
+ yAxis: {
+ alternateGridColor: null,
+ minorTickInterval: null,
+ gridLineColor: 'rgba(255, 255, 255, .1)',
+ minorGridLineColor: 'rgba(255,255,255,0.07)',
+ lineWidth: 0,
+ tickWidth: 0,
+ labels: {
+ style: {
+ color: '#999',
+ fontWeight: 'bold'
+ }
+ },
+ title: {
+ style: {
+ color: '#AAA',
+ font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
+ }
+ }
+ },
+ legend: {
+ itemStyle: {
+ color: '#CCC'
+ },
+ itemHoverStyle: {
+ color: '#FFF'
+ },
+ itemHiddenStyle: {
+ color: '#333'
+ }
+ },
+ labels: {
+ style: {
+ color: '#CCC'
+ }
+ },
+ tooltip: {
+ backgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0, 'rgba(96, 96, 96, .8)'],
+ [1, 'rgba(16, 16, 16, .8)']
+ ]
+ },
+ borderWidth: 0,
+ style: {
+ color: '#FFF'
+ }
+ },
+
+
+ plotOptions: {
+ series: {
+ shadow: true
+ },
+ line: {
+ dataLabels: {
+ color: '#CCC'
+ },
+ marker: {
+ lineColor: '#333'
+ }
+ },
+ spline: {
+ marker: {
+ lineColor: '#333'
+ }
+ },
+ scatter: {
+ marker: {
+ lineColor: '#333'
+ }
+ },
+ candlestick: {
+ lineColor: 'white'
+ }
+ },
+
+ toolbar: {
+ itemStyle: {
+ color: '#CCC'
+ }
+ },
+
+ navigation: {
+ buttonOptions: {
+ symbolStroke: '#DDDDDD',
+ hoverSymbolStroke: '#FFFFFF',
+ theme: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#606060'],
+ [0.6, '#333333']
+ ]
+ },
+ stroke: '#000000'
+ }
+ }
+ },
+
+ // scroll charts
+ rangeSelector: {
+ buttonTheme: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#888'],
+ [0.6, '#555']
+ ]
+ },
+ stroke: '#000000',
+ style: {
+ color: '#CCC',
+ fontWeight: 'bold'
+ },
+ states: {
+ hover: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#BBB'],
+ [0.6, '#888']
+ ]
+ },
+ stroke: '#000000',
+ style: {
+ color: 'white'
+ }
+ },
+ select: {
+ fill: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.1, '#000'],
+ [0.3, '#333']
+ ]
+ },
+ stroke: '#000000',
+ style: {
+ color: 'yellow'
+ }
+ }
+ }
+ },
+ inputStyle: {
+ backgroundColor: '#333',
+ color: 'silver'
+ },
+ labelStyle: {
+ color: 'silver'
+ }
+ },
+
+ navigator: {
+ handles: {
+ backgroundColor: '#666',
+ borderColor: '#AAA'
+ },
+ outlineColor: '#CCC',
+ maskFill: 'rgba(16, 16, 16, 0.5)',
+ series: {
+ color: '#7798BF',
+ lineColor: '#A6C7ED'
+ }
+ },
+
+ scrollbar: {
+ barBackgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#888'],
+ [0.6, '#555']
+ ]
+ },
+ barBorderColor: '#CCC',
+ buttonArrowColor: '#CCC',
+ buttonBackgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0.4, '#888'],
+ [0.6, '#555']
+ ]
+ },
+ buttonBorderColor: '#CCC',
+ rifleColor: '#FFF',
+ trackBackgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
+ stops: [
+ [0, '#000'],
+ [1, '#333']
+ ]
+ },
+ trackBorderColor: '#666'
+ },
+
+ // special colors for some of the demo examples
+ legendBackgroundColor: 'rgba(48, 48, 48, 0.8)',
+ legendBackgroundColorSolid: 'rgb(70, 70, 70)',
+ dataLabelsColor: '#444',
+ textColor: '#E0E0E0',
+ maskColor: 'rgba(255,255,255,0.3)'
+};
+
+// Apply the theme
+var highchartsOptions = Highcharts.setOptions(Highcharts.theme);
diff --git a/public/lib/UEditor/third-party/highcharts/themes/grid.js b/public/lib/UEditor/third-party/highcharts/themes/grid.js
new file mode 100644
index 00000000..cee0657d
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/themes/grid.js
@@ -0,0 +1,103 @@
+/**
+ * Grid theme for Highcharts JS
+ * @author Torstein Hønsi
+ */
+
+Highcharts.theme = {
+ colors: ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'],
+ chart: {
+ backgroundColor: {
+ linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 },
+ stops: [
+ [0, 'rgb(255, 255, 255)'],
+ [1, 'rgb(240, 240, 255)']
+ ]
+ },
+ borderWidth: 2,
+ plotBackgroundColor: 'rgba(255, 255, 255, .9)',
+ plotShadow: true,
+ plotBorderWidth: 1
+ },
+ title: {
+ style: {
+ color: '#000',
+ font: 'bold 16px "Trebuchet MS", Verdana, sans-serif'
+ }
+ },
+ subtitle: {
+ style: {
+ color: '#666666',
+ font: 'bold 12px "Trebuchet MS", Verdana, sans-serif'
+ }
+ },
+ xAxis: {
+ gridLineWidth: 1,
+ lineColor: '#000',
+ tickColor: '#000',
+ labels: {
+ style: {
+ color: '#000',
+ font: '11px Trebuchet MS, Verdana, sans-serif'
+ }
+ },
+ title: {
+ style: {
+ color: '#333',
+ fontWeight: 'bold',
+ fontSize: '12px',
+ fontFamily: 'Trebuchet MS, Verdana, sans-serif'
+
+ }
+ }
+ },
+ yAxis: {
+ minorTickInterval: 'auto',
+ lineColor: '#000',
+ lineWidth: 1,
+ tickWidth: 1,
+ tickColor: '#000',
+ labels: {
+ style: {
+ color: '#000',
+ font: '11px Trebuchet MS, Verdana, sans-serif'
+ }
+ },
+ title: {
+ style: {
+ color: '#333',
+ fontWeight: 'bold',
+ fontSize: '12px',
+ fontFamily: 'Trebuchet MS, Verdana, sans-serif'
+ }
+ }
+ },
+ legend: {
+ itemStyle: {
+ font: '9pt Trebuchet MS, Verdana, sans-serif',
+ color: 'black'
+
+ },
+ itemHoverStyle: {
+ color: '#039'
+ },
+ itemHiddenStyle: {
+ color: 'gray'
+ }
+ },
+ labels: {
+ style: {
+ color: '#99b'
+ }
+ },
+
+ navigation: {
+ buttonOptions: {
+ theme: {
+ stroke: '#CCCCCC'
+ }
+ }
+ }
+};
+
+// Apply the theme
+var highchartsOptions = Highcharts.setOptions(Highcharts.theme);
diff --git a/public/lib/UEditor/third-party/highcharts/themes/skies.js b/public/lib/UEditor/third-party/highcharts/themes/skies.js
new file mode 100644
index 00000000..e942648e
--- /dev/null
+++ b/public/lib/UEditor/third-party/highcharts/themes/skies.js
@@ -0,0 +1,89 @@
+/**
+ * Skies theme for Highcharts JS
+ * @author Torstein Hønsi
+ */
+
+Highcharts.theme = {
+ colors: ["#514F78", "#42A07B", "#9B5E4A", "#72727F", "#1F949A", "#82914E", "#86777F", "#42A07B"],
+ chart: {
+ className: 'skies',
+ borderWidth: 0,
+ plotShadow: true,
+ plotBackgroundImage: 'http://www.highcharts.com/demo/gfx/skies.jpg',
+ plotBackgroundColor: {
+ linearGradient: [0, 0, 250, 500],
+ stops: [
+ [0, 'rgba(255, 255, 255, 1)'],
+ [1, 'rgba(255, 255, 255, 0)']
+ ]
+ },
+ plotBorderWidth: 1
+ },
+ title: {
+ style: {
+ color: '#3E576F',
+ font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
+ }
+ },
+ subtitle: {
+ style: {
+ color: '#6D869F',
+ font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
+ }
+ },
+ xAxis: {
+ gridLineWidth: 0,
+ lineColor: '#C0D0E0',
+ tickColor: '#C0D0E0',
+ labels: {
+ style: {
+ color: '#666',
+ fontWeight: 'bold'
+ }
+ },
+ title: {
+ style: {
+ color: '#666',
+ font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
+ }
+ }
+ },
+ yAxis: {
+ alternateGridColor: 'rgba(255, 255, 255, .5)',
+ lineColor: '#C0D0E0',
+ tickColor: '#C0D0E0',
+ tickWidth: 1,
+ labels: {
+ style: {
+ color: '#666',
+ fontWeight: 'bold'
+ }
+ },
+ title: {
+ style: {
+ color: '#666',
+ font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif'
+ }
+ }
+ },
+ legend: {
+ itemStyle: {
+ font: '9pt Trebuchet MS, Verdana, sans-serif',
+ color: '#3E576F'
+ },
+ itemHoverStyle: {
+ color: 'black'
+ },
+ itemHiddenStyle: {
+ color: 'silver'
+ }
+ },
+ labels: {
+ style: {
+ color: '#3E576F'
+ }
+ }
+};
+
+// Apply the theme
+var highchartsOptions = Highcharts.setOptions(Highcharts.theme);
diff --git a/public/lib/UEditor/third-party/jquery-1.10.2.js.REMOVED.git-id b/public/lib/UEditor/third-party/jquery-1.10.2.js.REMOVED.git-id
new file mode 100644
index 00000000..45cb1191
--- /dev/null
+++ b/public/lib/UEditor/third-party/jquery-1.10.2.js.REMOVED.git-id
@@ -0,0 +1 @@
+c5c648255c1574dcc95c506b82c25044f0972dfd
\ No newline at end of file
diff --git a/public/lib/UEditor/third-party/jquery-1.10.2.min.js.REMOVED.git-id b/public/lib/UEditor/third-party/jquery-1.10.2.min.js.REMOVED.git-id
new file mode 100644
index 00000000..0521730f
--- /dev/null
+++ b/public/lib/UEditor/third-party/jquery-1.10.2.min.js.REMOVED.git-id
@@ -0,0 +1 @@
+da4170647dd102aa92a57cb4936ff6dfa58d78c2
\ No newline at end of file
diff --git a/public/lib/UEditor/third-party/video-js/font/vjs.eot b/public/lib/UEditor/third-party/video-js/font/vjs.eot
new file mode 100644
index 0000000000000000000000000000000000000000..a075c19f0b5d7d01c0edf7741d1b733c8b123b72
GIT binary patch
literal 3536
zcmds4O>7&-6@G7*4%9TWN`70-_Maz<`Mv22Hu8^ilEh&~IEBY~H
z8MR%YQqbg(z$tUP(b^h&N&O#yL37;An9iw6L5VhQc9DVxPbT<9_-98L@4)WAX%QF}M_}X8#A%Bi~
zWq#(;#d;l{sO2vD8|Ig;o*(?N5hIe{A@bZ^n439Q`|L;mMBgrIaRCa~9|(P{LGE5y
zUcci11(zZ3KptLNeQ8F0!)Idr66F5nnJX9REIot%LCDdSndP~YpTGNaqNYvgUcb0{
zX?-P>{Rif6LI19`HmvVX=PPfX^?v&cYPR$6(W^HwCy`C-yV4Gu5F4B{!4>|^`YxrU
zn?yB|b}Ua~$X;o&Gyyt|QKAUPZ0X8EL}96g-y%0P@RNKV@+pUYL5Jwo{a6sjV!QWB
z<^1S5Dw}jq#9&eiv2|}+F$oKM1z_G6k|mdg?m>-O{IrN1x-x}@6^cE@w8djXK}8Ka
zD_etvRYP_GKG;xeH{ifj&B#4MR#8kcyY~3VzkT)yd;LTj`7zcFv?v(c2oKHF0%WP=
zrFMi56p0B$;k{sO(QfxT_v`*&d6nYy7%k8T?BO84!SC>wk|qsGE7IR&pFA#4$?IaX
z>ZSw?h%~lwOac(utXW$kA+J%c@;0)j5czX$2~o@2+vfH*Z`U??v$hFKdrwWSA{XQ@
z1_N!HC(VgM?!!h^ZM<5k@NXL3YHe0^H(ss6UgU+i0(&oY;y}jre5sgE>iJ?e6x0-X
zp9c>6Ri-QT@um!1Io~Wv^d}OhpvGx1s+h{XDYYxj-B7uPxsZ!X0wZyZ)%z)-+Wy
z3`NzHp`jPQX67<_jO&I1v+}L7{)jkSA`U6$#F3`Qzd4deM)oI6IWi(5o1A>%8=~~X
zYNR?MqMW=tssGP0Gfme`-Ub%1i!66C(>4-q)~Rmg7;AEFF_|J%q^E$GSX+!!oYa$g
zBCdE8m6a|I1@Tub6-&ptC&h`lC!hs$*+#Q1kl_~m9zlC);oKYX_E_|qp&p8ifDJyGch{Fh+CXCLm#j}?{$
z&;{Vd?H#Vy*~A_xKyL{9kfbz~Xo#p?3ucRXJsvzjJ&wFbbw`#C=&O2O*YmSI1zj)X
z{D=Mi!xL6}V_%yH_lCp0wwGXbzdZ(ne_8(G|t}_{N;R|Fr_l?-U2sCkfU%G`)
zoK2T#N+DaBECqQHes6Ep{=7Ibu{gocZQR-ziW{@nXN~v}n_|-2L3B(k{%m98Ryl55
zpPjvK#LIAuwfgE`;%@s4_uvQ-uqbdUFzQh}AseT_D1cflWdYDaUUVoPEJqkRU5=rm
z0mUH?-1YW!r&3wt`FO0ojaiS!`})$UGm)sTNoH>K=h`FDqrH87r;i-*dYNNgNA#ZF
z-to@Es>;4rx0!n(k!WvcP9_oq1DVWJEZPP)J+au)L!JIs=}d2=%j;u~MG`d29wMk7bPcrt!_e*F~(--^$Zmu2p%v
zTD9`IhaC&MY-3lpu`7`U*NTN*Hf`|Mb}UgW1h0fGu^JS{+4VWR1ishdW$LDD4)22g
zro+4OUHjPK#k=EQKry=-p;6(@<|XhQ4lmO<9>TWX1^v4Y@5ZC~R}Sxi{?5T?_SA)Q
zbE{9_y?x-ZJvldjd1(f(?lJ4By>8JpJjdrKN?GgK9mSVEdcdEpGjLN6;BlTon?-9-
z4vtn=*2h-Y=I5f>R3`dZ)R`HaQ5-Nb1KErLs{`-&2jM;B
+
+
\ No newline at end of file
diff --git a/public/lib/UEditor/third-party/video-js/font/vjs.ttf b/public/lib/UEditor/third-party/video-js/font/vjs.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..eb2463791823ded2c3f9b1321e9fa3a331e8a5eb
GIT binary patch
literal 3372
zcmds4O>7&-6@G7*fn;iIyc-9T2d@aR`g@Y
zGHSa(rJ~6pfm;+g2my>Dyd*%202X}dA5gI9p$G~jZDAlmqZWH~(ThDih#6;9iJ0w$ia`Noc7v6k#0SX_qq0{3NlQc#iqPBaGBhNgS
z%A|g~KS0FKL!NzkZT`~lU;A?f@~3#NF3n%QRIkGmwcW*d)6(j-3&Y?td=}=fLLOY3zj}$z
z(X$vIh8$U+Ut2u&>DxagYT1GA^-CLZG?v=<
zC*-Ck{sv!weA=O((Ghx8OmHJl2Ti2=pp`F7oTrjS_XsgqltgU3J9bRM;vhu&xsYtR
zByjniKNvi$`+wzCiqR9a
zOz*LW1N;WR#h**MG%T%4f0cdmlsqeMiDcC+2^bJ%?BJ*bAhK1nQzD_R5w3CtRa1zx
zY)4!?rAo!BRJc;x;howJEE_qsxQbekRtWezbWe)o`Rx16s@i<5T;^XjyVcr)>TbSP
zg}tZ?aT)er>c)YL8M$I1moRdLOfaA;@*xi#(p06VM^QCpXy^sU-I`ZZ!n0vT^EM5B
ze~`xyJGar!zqEaa33tfD-i^ntwyCR%X)3C&jE=ta1uK^@V%{(nn3ZmqjK{>`5_^=Q
zP8=zE^2;N6Y-E4HlH=ndvYD9|za&ZxR^!!i5#`L?8RLJBnQ5+WaRpdF7Fq6QrV0ve
z)v0dR7<+PVF`2?tpr?VDXh)QjoG=nbJf?UQm6aY22JkBs3&j!cOL9Es@#}$XrcjJ~
z;<0=#n+XJ?U#ymH-G5fv;1;js4Sn#JkXQCLGdFuB-_biCcKg`dQu~{0IFlL~DGUy~
zC)|<2;~l!hS=R|OH9A@tIN_djIXdh9eRiE5)1_9wzeUzhPJR8PCb#O6q_@i2*tz_Z
z&zwAU=4<)Xbh*p_UxE$IL%1gmJ1hyH3&4xpJ5;Z;g&ZkBZxDG%P>PB)O4O+bGKHKG
z3p_+Uj(k83N0uJaSB;!uXx}wB6r4)W<{pp-}&nzsK+I;a>}T<2(62
zO!dXXm)G~o;=SMi7OC-_l-r3z<(RJfnCqlhEnC0sA_pZxEx1_cY
z9#NE@vuSbR3uHO>jmTdZnph(*y}~EXrb~3iU_+TG26zR2@9ft8xH3JxGR@C#-`*aL
znF}`-%-ASfV$nMR3{0>5czgSHDQ4bSSh!)vN^p$5`s$zKZu=Pb;5ZSmC~zt;>QOww
z22O!d0JTue0HFDt7*IUejxcnF979D1ih~}w>+kDLCNt&>v1n%pvk{9845X50!x3ML
z%-pVJJHwIV{R0DMjve!QnWH_&jK2QGW(g(g8Pp
z(dh9b-CDbJwm;nC^)bi7;e_#(vMPse80oX)JxYL-Ua_MyXz?~Z>0#q4T^MuoQqFM;oJc$uas
z?eH$>-*$L61?U$J?}7dkd;?vi^R!4C^b|dZPu+{>7dM^)GXvccU7=N)r%i~9OIKFs
z!A!z(owjVc35!LFP==CNErK_Fk%k4jpsoDTj_Xs5#-#Nk{L(9wlQ?3ht^9liK2XzX8D
O(EG1%n1UYuukdfbdl*On
literal 0
HcmV?d00001
diff --git a/public/lib/UEditor/third-party/video-js/font/vjs.woff b/public/lib/UEditor/third-party/video-js/font/vjs.woff
new file mode 100644
index 0000000000000000000000000000000000000000..c3f0f1d80718ac2a16e2daeaf82ce59ed76a3f06
GIT binary patch
literal 4228
zcmZWtXHb({wEX~Sp$kZnDn)8c0!R-vSO`U$AORDkBTYcMQlv>hI-vLM=>8ENpBn0D$`uzy{Dl7zfb(
zyZ-+$GBJ?=06G=`;E)9X{z!Mml_C=p8#4glgwV2uX%KPGs&ctvj4+{TNE#QVK?2YR
z&RAGqg3+|QG;T@*`qKOtQli!F3onI2xwd%FVF0U}E15!F`{T~Ek>G%
z4sYH&VI~@=H(cn-ZWk35ml749>)DAu0KJ?XDIGHGF^2Q$|9HWJuu}B4C|P&dL_~XW
zlMKo|MP#f&AFGad`>@+${QL=3jy5)mBrk&cSOg_!?$uaPYs7@P|Lm5T2WjKEy3-F?
zbDvxHCyI8D%jQzOYt(PtCx{O6%6koptQxt!e6B#rIU1yQd)9RI=&D0qR9%IlX-?(f
z#X%Te=9rivpjIXq5i5&^OaycX%n=4xyxJG2B^FNea-C6~7xZdF-Cn8C&K3`ev?h6^=P87k8IMjI#^iDNq1
zJ`A_c^%&Raf5V3;Gdk83_9}f2X+Eh;8=N3q%RBINY&ZLpUwxjmw}@-QAFwojc+GQd
z+iF?<-W_V-cN5%hY8ac+v_^b*+GIZQ9xHUs-4-J7kb{S93B5GPqDc9>s)!@#84lrv
zN1u29VCwx6SVFA0%pO{6CQR|za|wL6DmFyv6qYi+$>8`oIc1o`-I?jREBnl2QSnEx
zBa!1IZYR#P<;|Fbm#|{=Y6SOJ2T)oPS6_R~-Kuu&sklmvjCGjD&2P+(w=u%N7EFG`
z57=zy{Bt)2x4Sgp3iiI}=ojOC^I=1WIC({uSIxvv057%8`)wd!vfD@F7f;#s_e4Et
z+FmKwykKced^IMO+~RWKDhYg(Hz<;BEkeXoGGf^xD&EY`RGy&FHwzd?QZnj
zVT;1T_cRY3GHN#_Y$iOO8kLq<*lk(YZDcQwuKi_6f=lwZ!}m^8;Fv!m$Gvs@(d>$d
z(v`3z_>5aS{HLJ1n(4a2lPgIz81XT0(g5eHmqFNi`sJvugOaa(Sj}G-?o~<-fA1m@
z?``~!&BjIkxG+g4s$`SK7tm_b_LswswGndTo`?ZQ=R;dq_%D^|*r|~8@4jf1f_+W%
z9~^XTj@yi3)TAvhR^g)W@*U65s%NL;|E&B}x0miqr!O_?q56MMK)7Xh_FagpajF(R
zXJ6!PBP?$F?O_0{4a3{=UVlE@{C;&sq~WAp%_O^R+G8(}B0T7enqQ*n!Z~TGN5QT)
z^Q}*s@86Nz0@`Z>niIUfXt_wJeTLiWC_8T9XBBM4a|w78MzPH1&>A@+yKG$ulquip
zWt{)?gN^sIvDoisLkIr2(JnKj#`~W$U1rgZt?IJ99Xd5SbK|3=lSrR8m6>_L(oe9b
zca;pO4Tz!ION-PIu5!!%+!kL(a52yKyQjNi$Q`!&CF&_+@5lLtt}gg
zldYpQF>9mwCM!lUmZiX}4Bjm;yJRoSL1!Sq)Jik#V`%u+3N)8MaAH%)u+
z9Z!TNynO6KK0(iUtMsI`{?JNoXpu+hKMD@|0rj5WDux?;Raa|d5SoY$VmIC9oxaa0
z={qyb@*seu7zaX}Y=ePwAY3r})Vd{;zh@`0fNa(&DLvwqFqS@+Tt*ob;#vGL{8jh6S733)o83z#@2@sZaQu)^)7c
z(~pn+Bw2UM#~rG{@rOEZn4eJR1u>HP$;`po3jQXlFY}*Wn
zE%~c}yX4=rWaFDni!H47RxoZ&Vi;Bk=lWr33@mq!|
zwN{{uw;$#z+rS~$p&b7dP5ssQ02wm;8Yr)D>X)LV)1RNDv!DHpK033BAI*Ca94_Ha
z7=5PuNM`sFUsiUY*7d~E9U=59pan@%l^@Y@|4E1M)_IVfUM{zl_DF>LjhMq+v~Yty
zA8QK7$Ez0D&x|1}sYry^R*i1i2?~nF7^I>(@zH|NS8^~;4ARiN3;hUL
zPuJDpq+sA#ua24g(44xXHka^YBz{65`MCgmu-8C@gZW*()2GGfL`ka*f52P+js~9Z
z_5<%4C-nZ;vgN50mB8HAY3y8)}$!yy^og8*Cn1tyXd1mglM~}XJ0`e$i
z9*CY@Q<)E2<@8n{64dn{e-V(FMft?=LYI1p`xjpr+%_N>rhI&5@IJ4+uBnS9O83D<
zd)ZEUq<31Rh6flQulPV)hAkZP!*DuuOf8w}Xd+Oyk$q!r(KI;~hFR^Per%}MvzsTR
z+&Vp$SfTu}S`;{zIrhM4nrT;G0quyW27*vM&Si~T?s=t1_nfo@+Cnom9
z%dr{DCXRd^Ef;tSuD|SJ^G;Z1s9o7SJ6*9ukBi|1Np75@aMh>t(ed=~w>JG7gG*mt-*NaiifzrxBUT+8Hb`!DM*;V8&kDc4I?#
zAzU=wb6A&gdsC?RHB7*CvuyluS`+j+Z>@l;5YA^Vnl#as1R)!4q_;2#NwK-hv+%0A
znTG17S}g^A{$VrtrVO-L+<6#tT%g_WP^u3mk@3Mo@3j)*>zc{VBdMi^(gV5u8p|l1#X*J-`>eYEoG*O~4&|B7
zHqCzq)=H$5;=;tbUmC17c}_}ytH6R4;`~uWArr4z5n|mUYenP9H~Z2c`s&i4H*&4`^fe@b48@gn_P)~wTdVZ5ujP*&W<1pzZRgs0u=^xJtIyDQb_Rd-Ntj*Geq_7J
z$}-e(f>&H?W5o5^!L1}$FJ5uUqq9vrmokpMmLZ~sRV`^PH_-JLVrRkbUgIMH+rR9Z
z6E+RTnv((wr6VlfJLE2GT_LFEmnu9_zu?ndbiV!b+t&q^Q_WRH1Y%zJ)7`EW+f?iU
z>JYzFn@-RIjD
zm&NX9rsQ0ie_;n|Td$i!rh5~Xt%naPNyd?+TU!BrHx5Jws6FR%bD$2K1ZjqoBkf%0
znaW=8+!E6eH;;%zwN20Tpb2VcSlU5@3_cv1nW@c`m$ULtP?u>p8H*jT_Dxw$@kTx!
zTh_zSQwsj|Nq5j_v?~yoU2>Etag6$~Ed&t;O#GRs|GVdkMlUe9urhI@UC?I?B_-VH
zD1rbZH-MlSt$%CXmoUX-@*ufuy$AQ6OkUuu?1Wu~y@Eg>&<2)Ei2mWq-|y*
z4BEV)FEn@a^c}<71NPK^?@5~jaG6}55M4U*eG3avfyR)Dc{3{9ho>FLEg^A$D8i2R
z0(5V)9sb|kQTwOhc(I8Hro@Nr`e)_h=-YtQT1NZ-_FZBCStcfCSr(2i5LzqNOV>Ev
zfC--=j+BMatn=lo^fVJq3rhgt{Wm`(9qP>hup$yy`ehE>YOi5pO)M-_3hDg9t0f3=itYthmimV7e0$>t
zUe!~vXj{~#*idg4Ai|Y{Lh;vi&g!{}QLrCTgAZMw28`VNR&&Cotm~)~t5!ey(@}gX
zPJoy$rG44hDLV9v?-@lmP7!kto5a3R%i1DL&EM0`<{+gPd<2*B^|0|P7>zo^?KfWD
zK6$dC=ZJ{ayOZ|Sb*9TL_cBS&6B;!L;n=CZXmO@x@5siVT&PL)tN* {
+ editor.execCommand('inserthtml', `https://github.com/d2-projects/d2-admin
`)
+ }
+}
diff --git a/src/components/d2-ueditor/index.vue b/src/components/d2-ueditor/index.vue
new file mode 100644
index 00000000..b636145b
--- /dev/null
+++ b/src/components/d2-ueditor/index.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
diff --git a/src/components/d2-ueditor/ueditor.config.js b/src/components/d2-ueditor/ueditor.config.js
new file mode 100644
index 00000000..984a0f9a
--- /dev/null
+++ b/src/components/d2-ueditor/ueditor.config.js
@@ -0,0 +1,11 @@
+export default {
+ UEDITOR_HOME_URL: './lib/UEditor/',
+ // 编辑器不自动被内容撑高
+ autoHeightEnabled: false,
+ // 初始容器高度
+ initialFrameHeight: 240,
+ // 初始容器宽度
+ initialFrameWidth: '100%',
+ // 关闭自动保存
+ enableAutoSave: false
+}
diff --git a/src/components/index.js b/src/components/index.js
index 271269c2..e6b4aba2 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -17,3 +17,4 @@ Vue.component('d2-icon-svg', () => import('./d2-icon-svg/index.vue'))
Vue.component('d2-markdown', () => import('./d2-markdown'))
Vue.component('d2-mde', () => import('./d2-mde'))
Vue.component('d2-quill', () => import('./d2-quill'))
+Vue.component('d2-ueditor', () => import('./d2-ueditor'))
diff --git a/src/main.js b/src/main.js
index b11a2976..2b8fc81a 100644
--- a/src/main.js
+++ b/src/main.js
@@ -23,6 +23,8 @@ import vueJsonTreeView from 'vue-json-tree-view'
import { GridLayout, GridItem } from 'vue-grid-layout'
// [ 可选插件组件 ] 区域划分组件
import SplitPane from 'vue-splitpane'
+// [ 可选插件组件 ] UEditor
+import VueUeditorWrap from 'vue-ueditor-wrap'
// 菜单和路由设置
import router from './router'
@@ -40,6 +42,7 @@ Vue.use(vueJsonTreeView)
Vue.component('d2-grid-layout', GridLayout)
Vue.component('d2-grid-item', GridItem)
Vue.component('SplitPane', SplitPane)
+Vue.component('VueUeditorWrap', VueUeditorWrap)
new Vue({
router,
diff --git a/src/menu/modules/demo-components.js b/src/menu/modules/demo-components.js
index fc2235e2..62b00eef 100644
--- a/src/menu/modules/demo-components.js
+++ b/src/menu/modules/demo-components.js
@@ -51,6 +51,16 @@ export default {
{ path: `${pre}layout/splitpane`, title: '区域划分' }
]
},
+ {
+ path: `${pre}editor`,
+ title: '编辑器',
+ icon: 'pencil-square-o',
+ children: [
+ { path: `${pre}editor-ueditor`, title: 'UEditor', icon: '' },
+ { path: `${pre}editor-quill`, title: 'Quill', icon: '' },
+ { path: `${pre}editor-simpleMDE`, title: 'simpleMDE', icon: '' }
+ ]
+ },
{
path: `${pre}icon`,
title: '图标',
@@ -85,8 +95,6 @@ export default {
]
},
{ path: `${pre}countup`, title: '数字动画', icon: 'motorcycle' },
- { path: `${pre}editor-quill`, title: '富文本编辑器', icon: 'pencil-square-o (edit, edit)' },
- { path: `${pre}editor-simpleMDE`, title: 'markdown编辑器', icon: 'font' },
{ path: `${pre}highlight`, title: '代码高亮显示', icon: 'code' },
{ path: `${pre}json-tree`, title: 'JSON 展示', icon: 'sitemap' }
])('/demo/components/')
diff --git a/src/pages/demo/components/editor-ueditor/index.vue b/src/pages/demo/components/editor-ueditor/index.vue
new file mode 100644
index 00000000..ae78c67f
--- /dev/null
+++ b/src/pages/demo/components/editor-ueditor/index.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+ Result
+
+
+
+
+
+
+ 当前内容 x2
+
+
+ 清空
+
+
+
+
+
+
diff --git a/src/router/modules/components.js b/src/router/modules/components.js
index 3944410f..720659d1 100644
--- a/src/router/modules/components.js
+++ b/src/router/modules/components.js
@@ -26,6 +26,7 @@ export default {
{ path: 'contextmenu/disabled', name: `${pre}contextmenu-disabled`, component: () => import('@/pages/demo/components/contextmenu/disabled.vue'), meta: { ...meta, title: '右键菜单 禁用' } },
{ path: 'contextmenu/custom-trigger', name: `${pre}contextmenu-custom-trigger`, component: () => import('@/pages/demo/components/contextmenu/custom-trigger.vue'), meta: { ...meta, title: '右键菜单 自定义触发' } },
{ path: 'countup', name: `${pre}countup`, component: () => import('@/pages/demo/components/countup'), meta: { ...meta, title: '数字动画' } },
+ { path: 'editor-ueditor', name: `${pre}editor-ueditor`, component: () => import('@/pages/demo/components/editor-ueditor'), meta: { ...meta, title: 'UEditor' } },
{ path: 'editor-quill', name: `${pre}editor-quill`, component: () => import('@/pages/demo/components/editor-quill'), meta: { ...meta, title: '富文本编辑器' } },
{ path: 'editor-simpleMDE', name: `${pre}editor-simpleMDE`, component: () => import('@/pages/demo/components/editor-simpleMDE'), meta: { ...meta, title: 'markdown编辑器' } },
{ path: 'highlight', name: `${pre}highlight`, component: () => import('@/pages/demo/components/highlight'), meta: { ...meta, title: '代码高亮组件' } },