1 line
4.0 KiB
JavaScript
1 line
4.0 KiB
JavaScript
tinymce.PluginManager.add("leanote_code",function(a,b){function c(a){return a?("object"==typeof a&&(a=$(a).html()),a.replace(/\<br *\/*\>/gi,"\n").replace(/<\/(p|li|div|ul|ol|hr)>/,"\n").replace(/(<([^>]+)>)/gi,"").replace(/\n\n/g,"\n")):a}function d(a){return a?("object"==typeof a&&(a=$(a).html()),a.replace(/\n/g,"<br />")):a}function e(){var a=$("#editorContent").children(),b=a&&a.length>0?a[a.length-1]:null;b&&"P"==b.tagName||$("#editorContent").append('<p><br data-mce-bogus="1"></p>')}function f(a){if(!LEA.readOnly){h=tinymce.activeEditor;var b,f=h.selection.getNode(),g=h.selection.getContent(),i=LeaAce.isInAce(f),j=!1,k=!1;i&&(j=i[0],k=i[1]),$("#editorContent .toggle-raw").remove();var l='class="brush:'+a+'"';if(a&&"convert"!=a){if(j&&j.session.setMode("ace/mode/"+a),k||"PRE"!=f.nodeName||(k=$(f)),k){var m=LeaAce.getPreBrush(k);return void k.removeClass(m).addClass("brush:"+a)}}else if(a&&("BODY"==f.nodeName||"editorContent"==$(f).attr("id")))return;if(LeaAce.canAce()){var n=LeaAce.getAceId();if(LeaAce.disableAddHistory(),j){var o=j.getValue();o=o.replace(/</g,"<"),o=o.replace(/>/g,">"),o=o.replace(/\n/g,"<br />"),k.replaceWith("<p>"+o+"</p>"),j.destroy()}else{if("PRE"==f.nodeName){var k=$(f),o=k.html();return o&&(o=o.replace(/\n/g,"<br />")),void k.replaceWith("<p>"+o+"</p>")}var b=g;if(!b&&("BODY"==f.nodeName||"editorContent"==$(f).attr("id")))return;b?(b=c(b),h.insertContent('<pre id="'+n+'" '+l+">"+b+"</pre>")):(b=c(f),$(f).replaceWith("<pre id='"+n+"'"+l+">"+b+"</pre>"));var j=LeaAce.initAce(n);j&&(j.focus(),a&&"convert"!=a&&j.session.setMode("ace/mode/"+a),e())}LeaAce.resetAddHistory()}else if("PRE"!=f.nodeName&&(f=$(f).closest("pre").get(0)),f&&"PRE"==f.nodeName){var k=$(f),o=k.html();o&&(o=o.replace(/\n/g,"<br />")),k.replaceWith("<p>"+o+"</p>")}else{try{b=$.trim($(g).text())}catch(p){}b||(b=$.trim(g));var q=null,n=LeaAce.getAceId();b?(b=d(b),q='<pre id="'+n+'" '+l+">"+b+"</pre>",h.insertContent(q)):f?(b=d(f),q='<pre id="'+n+'" '+l+">"+b+"</pre>",$(f).replaceWith(q)):(q='<pre id="'+n+'" '+l+">"+b+"</pre>",h.insertContent(q)),q&&e()}}}function g(){return function(){var b=this;a.on("nodeChange",function(){var c=null;try{var d=a.selection.getNode();if("PRE"!=d.nodeName&&(d=$(d).closest("pre").get(0)),d){var e=LeaAce.isInAce(d),f=!1,g=!1;if(e||"PRE"==d.nodeName){e?(f=e[0],g=e[1]):g=$(d);var h=LeaAce.getPreBrush(g);c=$.trim(h.split(":")[1]),b.diableValue("convert",!1)}else b.diableValue("convert",!0)}}catch(i){log(i)}"convert"!=c&&b.value(c)})}}var h=a;a.addButton("leanote_code",function(){var a=["Convert Code:convert","CSS:css","HTML:html","Javascript:javascript","C/C++:c_cpp","C#:csharp","Java:java","Objective-c:objectivec","PHP:php","Python:python","Ruby:ruby","Shell:sh","Delphi:delphi","Golang:golang","Erlang:erlang","Groovy:groovy","Latex:latex","Xml:xml","ActionScript:actionScript"],b=[];for(var c in a){var d=a[c].split(":");b.push({text:d[0],value:d[1]})}return{type:"listbox",text:"Language",tooltip:"`ctrl/cmd+shift+c` toggle code",values:b,fixedWidth:!0,onselect:function(a){a.control.settings.value&&f(a.control.settings.value)},onPostRender:g(b)}}),a.addButton("leanote_inline_code",{icon:"code",tooltip:"Inline Code",stateSelector:"code",onclick:function(){a.execCommand("mceToggleFormat",!1,"code")}}),LeaAce.canAce()&&a.addButton("leanote_ace_pre",{icon:"ace-pre",tooltip:"Toggle ace with raw html",active:LeaAce.isAce===!1,onclick:function(){LeaAce.isAce===!1?(this.active(!1),LeaAce.isAce=!0,LeaAce.initAceFromContent(a)):(this.active(!0),LeaAce.allToPre(a),LeaAce.isAce=!1)}}),h.addCommand("toggleCode",f),h.addShortcut("ctrl+shift+c","","toggleCode"),h.addShortcut("meta+shift+c","","toggleCode"),LeaAce.canAce()&&a.on("keydown",function(a){var b=LeaAce.nowIsInAce();return b?(setTimeout(function(){b[0].focus()}),!0):void 0}),h.on("keydown",function(a){var b=a.which?a.which:a.keyCode;if(9==b&&!a.shiftKey){var c=h.selection.getNode();return c&&("LI"==c.nodeName||$(c.closest("li")).length>0)?!0:(h.insertContent(" "),a.preventDefault(),a.stopPropagation(),!1)}})}); |