1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-21 14:19:43 +02:00
documize/gui/public/tinymce/plugins/toc/plugin.min.js
2018-01-19 11:36:38 +00:00

1 line
No EOL
2.9 KiB
JavaScript

!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),e=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),n=tinymce.util.Tools.resolve("tinymce.util.I18n"),o=tinymce.util.Tools.resolve("tinymce.util.Tools"),r=function(t){return t.getParam("toc_class","mce-toc")},i=function(t){var e=t.getParam("toc_header","h2");return/^h[1-6]$/.test(e)?e:"h2"},c=function(t){var e=parseInt(t.getParam("toc_depth","3"),10);return e>=1&&e<=9?e:3},l=function(t){var e=0;return function(){var n=(new Date).getTime().toString(32);return t+n+(e++).toString(32)}}("mcetoc_"),a=function(t){var e=r(t),n=i(t),a=function(t){var e,n=[];for(e=1;e<=t;e++)n.push("h"+e);return n.join(",")}(c(t)),u=t.$(a);return u.length&&/^h[1-9]$/i.test(n)&&(u=u.filter(function(n,o){return!t.dom.hasClass(o.parentNode,e)})),o.map(u,function(e){return{id:e.id?e.id:l(),level:parseInt(e.nodeName.replace(/^H/i,""),10),title:t.$.text(e),element:e}})},u=function(t){var o,r,c,l,u="",d=a(t),s=function(t){var e,n=9;for(e=0;e<t.length;e++)if(t[e].level<n&&(n=t[e].level),1===n)return n;return n}(d)-1;if(!d.length)return"";for(u+=function(t,n){var o="</"+t+">";return"<"+t+' contenteditable="true">'+e.DOM.encode(n)+o}(i(t),n.translate("Table of Contents")),o=0;o<d.length;o++){if(c=d[o],c.element.id=c.id,l=d[o+1]&&d[o+1].level,s===c.level)u+="<li>";else for(r=s;r<c.level;r++)u+="<ul><li>";if(u+='<a href="#'+c.id+'">'+c.title+"</a>",l!==c.level&&l)for(r=c.level;r>l;r--)u+="</li></ul><li>";else u+="</li>",l||(u+="</ul>");s=c.level}return u},d=function(t){var e=r(t),n=t.$("."+e);n.length&&t.undoManager.transact(function(){n.html(u(t))})},s={hasHeaders:function(t){return a(t).length>0},insertToc:function(t){var e=r(t);!function(t,e){return!e.length||t.dom.getParents(e[0],".mce-offscreen-selection").length>0}(t,t.$("."+e))?d(t):t.insertContent(function(t){var e=u(t);return'<div class="'+t.dom.encode(r(t))+'" contenteditable="false">'+e+"</div>"}(t))},updateToc:d},f=function(t){t.addCommand("mceInsertToc",function(){s.insertToc(t)}),t.addCommand("mceUpdateToc",function(){s.updateToc(t)})},m=function(t){var e=t.$,n=r(t);t.on("PreProcess",function(t){var o=e("."+n,t.node);o.length&&(o.removeAttr("contentEditable"),o.find("[contenteditable]").removeAttr("contentEditable"))}),t.on("SetContent",function(){var t=e("."+n);t.length&&(t.attr("contentEditable",!1),t.children(":first-child").attr("contentEditable",!0))})},v=function(t){return function(e){var n=e.control;t.on("LoadContent SetContent change",function(){n.disabled(t.readonly||!s.hasHeaders(t))})}},h=function(t){t.addButton("toc",{tooltip:"Table of Contents",cmd:"mceInsertToc",icon:"toc",onPostRender:v(t)}),t.addButton("tocupdate",{tooltip:"Update",cmd:"mceUpdateToc",icon:"reload"}),t.addMenuItem("toc",{text:"Table of Contents",context:"insert",cmd:"mceInsertToc",onPostRender:v(t)}),t.addContextToolbar(function(t){return function(e){return e&&t.dom.is(e,"."+r(t))&&t.getBody().contains(e)}}(t),"tocupdate")};t.add("toc",function(t){f(t),h(t),m(t)})}();