plugin.min.js 6.2 KB

1
  1. tinymce.PluginManager.add("fullpage",function(e){var t=tinymce.each,l=tinymce.html.Node;var i,n;function a(){var t=r();e.windowManager.open({title:"Document properties",data:t,defaults:{type:"textbox",size:40},body:[{name:"title",label:"Title"},{name:"keywords",label:"Keywords"},{name:"description",label:"Description"},{name:"robots",label:"Robots"},{name:"author",label:"Author"},{name:"docencoding",label:"Encoding"}],onSubmit:function(e){o(tinymce.extend(t,e.data))}})}function r(){var l=f(),i={},n,a;function r(e,t){var l=e.attr(t);return l||""}i.fontface=e.getParam("fullpage_default_fontface","");i.fontsize=e.getParam("fullpage_default_fontsize","");n=l.firstChild;if(n.type==7){i.xml_pi=true;a=/encoding="([^"]+)"/.exec(n.value);if(a){i.docencoding=a[1]}}n=l.getAll("#doctype")[0];if(n){i.doctype="<!DOCTYPE"+n.value+">"}n=l.getAll("title")[0];if(n&&n.firstChild){i.title=n.firstChild.value}t(l.getAll("meta"),function(e){var t=e.attr("name"),l=e.attr("http-equiv"),n;if(t){i[t.toLowerCase()]=e.attr("content")}else if(l=="Content-Type"){n=/charset\s*=\s*(.*)\s*/gi.exec(e.attr("content"));if(n){i.docencoding=n[1]}}});n=l.getAll("html")[0];if(n){i.langcode=r(n,"lang")||r(n,"xml:lang")}i.stylesheets=[];tinymce.each(l.getAll("link"),function(e){if(e.attr("rel")=="stylesheet"){i.stylesheets.push(e.attr("href"))}});n=l.getAll("body")[0];if(n){i.langdir=r(n,"dir");i.style=r(n,"style");i.visited_color=r(n,"vlink");i.link_color=r(n,"link");i.active_color=r(n,"alink")}return i}function o(n){var a,r,o,s,d,c=e.dom;function u(e,t,l){e.attr(t,l?l:undefined)}function m(e){if(r.firstChild){r.insert(e,r.firstChild)}else{r.append(e)}}a=f();r=a.getAll("head")[0];if(!r){s=a.getAll("html")[0];r=new l("head",1);if(s.firstChild){s.insert(r,s.firstChild,true)}else{s.append(r)}}s=a.firstChild;if(n.xml_pi){d='version="1.0"';if(n.docencoding){d+=' encoding="'+n.docencoding+'"'}if(s.type!=7){s=new l("xml",7);a.insert(s,a.firstChild,true)}s.value=d}else if(s&&s.type==7){s.remove()}s=a.getAll("#doctype")[0];if(n.doctype){if(!s){s=new l("#doctype",10);if(n.xml_pi){a.insert(s,a.firstChild)}else{m(s)}}s.value=n.doctype.substring(9,n.doctype.length-1)}else if(s){s.remove()}s=null;t(a.getAll("meta"),function(e){if(e.attr("http-equiv")=="Content-Type"){s=e}});if(n.docencoding){if(!s){s=new l("meta",1);s.attr("http-equiv","Content-Type");s.shortEnded=true;m(s)}s.attr("content","text/html; charset="+n.docencoding)}else{s.remove()}s=a.getAll("title")[0];if(n.title){if(!s){s=new l("title",1);m(s)}else{s.empty()}s.append(new l("#text",3)).value=n.title}else if(s){s.remove()}t("keywords,description,author,copyright,robots".split(","),function(e){var t=a.getAll("meta"),i,r,o=n[e];for(i=0;i<t.length;i++){r=t[i];if(r.attr("name")==e){if(o){r.attr("content",o)}else{r.remove()}return}}if(o){s=new l("meta",1);s.attr("name",e);s.attr("content",o);s.shortEnded=true;m(s)}});var g={};tinymce.each(a.getAll("link"),function(e){if(e.attr("rel")=="stylesheet"){g[e.attr("href")]=e}});tinymce.each(n.stylesheets,function(e){if(!g[e]){s=new l("link",1);s.attr({rel:"stylesheet",text:"text/css",href:e});s.shortEnded=true;m(s)}delete g[e]});tinymce.each(g,function(e){e.remove()});s=a.getAll("body")[0];if(s){u(s,"dir",n.langdir);u(s,"style",n.style);u(s,"vlink",n.visited_color);u(s,"link",n.link_color);u(s,"alink",n.active_color);c.setAttribs(e.getBody(),{style:n.style,dir:n.dir,vLink:n.visited_color,link:n.link_color,aLink:n.active_color})}s=a.getAll("html")[0];if(s){u(s,"lang",n.langcode);u(s,"xml:lang",n.langcode)}if(!r.firstChild){r.remove()}o=new tinymce.html.Serializer({validate:false,indent:true,apply_source_formatting:true,indent_before:"head,html,body,meta,title,script,link,style",indent_after:"head,html,body,meta,title,script,link,style"}).serialize(a);i=o.substring(0,o.indexOf("</body>"))}function f(){return new tinymce.html.DomParser({validate:false,root_name:"#document"}).parse(i)}function s(l){var a,r,o=l.content,s,c="",u=e.dom,m;if(l.selection){return}function g(e){return e.replace(/<\/?[A-Z]+/g,function(e){return e.toLowerCase()})}if(l.format=="raw"&&i){return}if(l.source_view&&e.getParam("fullpage_hide_in_source_view")){return}o=o.replace(/<(\/?)BODY/gi,"<$1body");a=o.indexOf("<body");if(a!=-1){a=o.indexOf(">",a);i=g(o.substring(0,a+1));r=o.indexOf("</body",a);if(r==-1){r=o.length}l.content=o.substring(a+1,r);n=g(o.substring(r))}else{i=d();n="\n</body>\n</html>"}s=f();t(s.getAll("style"),function(e){if(e.firstChild){c+=e.firstChild.value}});m=s.getAll("body")[0];if(m){u.setAttribs(e.getBody(),{style:m.attr("style")||"",dir:m.attr("dir")||"",vLink:m.attr("vlink")||"",link:m.attr("link")||"",aLink:m.attr("alink")||""})}u.remove("fullpage_styles");var y=e.getDoc().getElementsByTagName("head")[0];if(c){u.add(y,"style",{id:"fullpage_styles"},c);m=u.get("fullpage_styles");if(m.styleSheet){m.styleSheet.cssText=c}}var h={};tinymce.each(y.getElementsByTagName("link"),function(e){if(e.rel=="stylesheet"&&e.getAttribute("data-mce-fullpage")){h[e.href]=e}});tinymce.each(s.getAll("link"),function(e){var t=e.attr("href");if(!h[t]&&e.attr("rel")=="stylesheet"){u.add(y,"link",{rel:"stylesheet",text:"text/css",href:t,"data-mce-fullpage":"1"})}delete h[t]});tinymce.each(h,function(e){e.parentNode.removeChild(e)})}function d(){var t="",l,i="";if(e.getParam("fullpage_default_xml_pi")){t+='<?xml version="1.0" encoding="'+e.getParam("fullpage_default_encoding","ISO-8859-1")+'" ?>\n'}t+=e.getParam("fullpage_default_doctype","<!DOCTYPE html>");t+="\n<html>\n<head>\n";if(l=e.getParam("fullpage_default_title")){t+="<title>"+l+"</title>\n"}if(l=e.getParam("fullpage_default_encoding")){t+='<meta http-equiv="Content-Type" content="text/html; charset='+l+'" />\n'}if(l=e.getParam("fullpage_default_font_family")){i+="font-family: "+l+";"}if(l=e.getParam("fullpage_default_font_size")){i+="font-size: "+l+";"}if(l=e.getParam("fullpage_default_text_color")){i+="color: "+l+";"}t+="</head>\n<body"+(i?' style="'+i+'"':"")+">\n";return t}function c(t){if(!t.selection&&(!t.source_view||!e.getParam("fullpage_hide_in_source_view"))){t.content=tinymce.trim(i)+"\n"+tinymce.trim(t.content)+"\n"+tinymce.trim(n)}}e.addCommand("mceFullPageProperties",a);e.addButton("fullpage",{title:"Document properties",cmd:"mceFullPageProperties"});e.addMenuItem("fullpage",{text:"Document properties",cmd:"mceFullPageProperties",context:"file"});e.on("BeforeSetContent",s);e.on("GetContent",c)});