2890 lines
155 KiB
HTML
2890 lines
155 KiB
HTML
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
|
||
<html>
|
||
<head>
|
||
<title>
|
||
Overview
|
||
</title>
|
||
<link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style">
|
||
<script>
|
||
function asd() {
|
||
|
||
parent.document.title="TinyMCE_Engine.class.js Overview";
|
||
|
||
}
|
||
</script>
|
||
</head>
|
||
<body bgcolor="white" onload="asd();">
|
||
|
||
<!-- ========== START OF NAVBAR ========== -->
|
||
<a name="navbar_top"><!-- --></a>
|
||
<table border="0" width="100%" cellpadding="1" cellspacing="0">
|
||
<tr>
|
||
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
|
||
<a name="navbar_top_firstrow"><!-- --></a>
|
||
<table border="0" cellpadding="0" cellspacing="3">
|
||
<tr align="center" valign="top">
|
||
|
||
|
||
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a> </td>
|
||
<td bgcolor="#FFFFFF" class="NavBarCell1Rev"> <font class="NavBarFont1Rev"><b>File</b></font> </td>
|
||
|
||
|
||
<td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font> </td>
|
||
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a> </td>
|
||
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a> </td>
|
||
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a> </td>
|
||
</tr>
|
||
</table>
|
||
</td>
|
||
<td bgcolor="#EEEEFF" align="right" valign="top">
|
||
<em>
|
||
<b></b></em>
|
||
</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td bgcolor="white" class="NavBarCell2"><font size="-2">
|
||
PREV
|
||
NEXT</font></td>
|
||
<td bgcolor="white" class="NavBarCell2"><font size="-2">
|
||
<a href="index.html" target="_top"><b>FRAMES</b></a>
|
||
<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
|
||
|
||
<script>
|
||
<!--
|
||
if(window==top) {
|
||
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
|
||
}
|
||
//-->
|
||
</script>
|
||
<noscript>
|
||
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
|
||
</noscript>
|
||
</font></td>
|
||
</tr>
|
||
</table>
|
||
<!-- =========== END OF NAVBAR =========== -->
|
||
|
||
<hr>
|
||
<center>
|
||
|
||
<h2>TinyMCE_Engine.class.js</h2>
|
||
|
||
</center>
|
||
|
||
|
||
|
||
|
||
<h4>Summary</h4>
|
||
<p>
|
||
|
||
No overview generated for 'TinyMCE_Engine.class.js'<BR/><BR/>
|
||
|
||
</p>
|
||
|
||
<hr>
|
||
|
||
|
||
<table border="1" cellpadding="3" cellspacing="0" width="100%">
|
||
<tr bgcolor="#CCCCFF" class="TableHeadingColor">
|
||
<td colspan=2><font size="+2">
|
||
|
||
<b>Class Summary</b>
|
||
|
||
</font></td>
|
||
</tr>
|
||
|
||
<tr bgcolor="white" class="TableRowColor">
|
||
<td width="15%"><b><a href="TinyMCE_Engine.html">TinyMCE_Engine</a></b></td>
|
||
<td> </td>
|
||
</tr>
|
||
|
||
</table>
|
||
<hr/>
|
||
|
||
|
||
<!-- ========== METHOD SUMMARY =========== -->
|
||
|
||
<!-- ========== END METHOD SUMMARY =========== -->
|
||
|
||
|
||
<pre class="sourceview"><span class="comment">/**
|
||
* $RCSfile: overview-summary-TinyMCE_Engine.class.js.html,v $
|
||
* $Revision: 1.42 $
|
||
* $Date: 2006/04/14 20:00:29 $
|
||
*
|
||
* <span class="attrib">@author</span> Moxiecode
|
||
* <span class="attrib">@copyright</span> Copyright <20> 2004-2006, Moxiecode Systems AB, All rights reserved.
|
||
*/</span>
|
||
|
||
<span class="comment">/**
|
||
* Core engine class for TinyMCE, a instance of this class is available as a global called tinyMCE.
|
||
*
|
||
* <span class="attrib">@constructor</span>
|
||
*/</span>
|
||
<span class="reserved">function</span> TinyMCE_Engine() {
|
||
<span class="reserved">this</span>.majorVersion = <span class="literal">"2"</span>;
|
||
<span class="reserved">this</span>.minorVersion = <span class="literal">"0.6"</span>;
|
||
<span class="reserved">this</span>.releaseDate = <span class="literal">"2006-xx-xx"</span>;
|
||
|
||
<span class="reserved">this</span>.instances = new Array();
|
||
<span class="reserved">this</span>.switchClassCache = new Array();
|
||
<span class="reserved">this</span>.windowArgs = new Array();
|
||
<span class="reserved">this</span>.loadedFiles = new Array();
|
||
<span class="reserved">this</span>.configs = new Array();
|
||
<span class="reserved">this</span>.currentConfig = 0;
|
||
<span class="reserved">this</span>.eventHandlers = new Array();
|
||
|
||
<span class="comment">// Browser check</span>
|
||
var ua = navigator.userAgent;
|
||
<span class="reserved">this</span>.isMSIE = (navigator.appName == <span class="literal">"Microsoft Internet Explorer"</span>);
|
||
<span class="reserved">this</span>.isMSIE5 = <span class="reserved">this</span>.isMSIE && (ua.indexOf(<span class="literal">'MSIE 5'</span>) != -1);
|
||
<span class="reserved">this</span>.isMSIE5_0 = <span class="reserved">this</span>.isMSIE && (ua.indexOf(<span class="literal">'MSIE 5.0'</span>) != -1);
|
||
<span class="reserved">this</span>.isGecko = ua.indexOf(<span class="literal">'Gecko'</span>) != -1;
|
||
<span class="reserved">this</span>.isSafari = ua.indexOf(<span class="literal">'Safari'</span>) != -1;
|
||
<span class="reserved">this</span>.isOpera = ua.indexOf(<span class="literal">'Opera'</span>) != -1;
|
||
<span class="reserved">this</span>.isMac = ua.indexOf(<span class="literal">'Mac'</span>) != -1;
|
||
<span class="reserved">this</span>.isNS7 = ua.indexOf(<span class="literal">'Netscape/7'</span>) != -1;
|
||
<span class="reserved">this</span>.isNS71 = ua.indexOf(<span class="literal">'Netscape/7.1'</span>) != -1;
|
||
<span class="reserved">this</span>.dialogCounter = 0;
|
||
<span class="reserved">this</span>.plugins = new Array();
|
||
<span class="reserved">this</span>.themes = new Array();
|
||
<span class="reserved">this</span>.menus = new Array();
|
||
<span class="reserved">this</span>.loadedPlugins = new Array();
|
||
<span class="reserved">this</span>.buttonMap = new Array();
|
||
<span class="reserved">this</span>.isLoaded = false;
|
||
|
||
<span class="comment">// Fake MSIE on Opera and if Opera fakes IE, Gecko or Safari cancel those</span>
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.isOpera) {
|
||
<span class="reserved">this</span>.isMSIE = true;
|
||
<span class="reserved">this</span>.isGecko = false;
|
||
<span class="reserved">this</span>.isSafari = false;
|
||
}
|
||
|
||
<span class="comment">// TinyMCE editor id instance counter</span>
|
||
<span class="reserved">this</span>.idCounter = 0;
|
||
};
|
||
|
||
TinyMCE_Engine.<span class="reserved">prototype</span> = {
|
||
<span class="comment">/**
|
||
* Initializes TinyMCE with the specific configuration settings. This method
|
||
* may be called multiple times when multiple instances with diffrent settings is to be created.
|
||
*
|
||
* <span class="attrib">@param</span> {Array} Name/Value array of initialization settings.
|
||
*/</span>
|
||
init : <span class="reserved">function</span>(settings) {
|
||
var theme;
|
||
|
||
<span class="reserved">this</span>.settings = settings;
|
||
|
||
<span class="comment">// Check if valid browser has execcommand support</span>
|
||
<span class="reserved">if</span> (typeof(document.execCommand) == <span class="literal">'undefined'</span>)
|
||
<span class="reserved">return</span>;
|
||
|
||
<span class="comment">// Get script base path</span>
|
||
<span class="reserved">if</span> (!tinyMCE.baseURL) {
|
||
var elements = document.getElementsByTagName(<span class="literal">'script'</span>);
|
||
|
||
<span class="reserved">for</span> (var i=0; i<elements.length; i++) {
|
||
<span class="reserved">if</span> (elements[i].src && (elements[i].src.indexOf(<span class="literal">"tiny_mce.js"</span>) != -1 || elements[i].src.indexOf(<span class="literal">"tiny_mce_dev.js"</span>) != -1 || elements[i].src.indexOf(<span class="literal">"tiny_mce_src.js"</span>) != -1 || elements[i].src.indexOf(<span class="literal">"tiny_mce_gzip"</span>) != -1)) {
|
||
var src = elements[i].src;
|
||
|
||
tinyMCE.srcMode = (src.indexOf(<span class="literal">'_src'</span>) != -1 || src.indexOf(<span class="literal">'_dev'</span>) != -1) ? <span class="literal">'_src'</span> : <span class="literal">''</span>;
|
||
tinyMCE.gzipMode = src.indexOf(<span class="literal">'_gzip'</span>) != -1;
|
||
src = src.substring(0, src.lastIndexOf(<span class="literal">'/'</span>));
|
||
|
||
<span class="reserved">if</span> (settings.exec_mode == <span class="literal">"src"</span> || settings.exec_mode == <span class="literal">"normal"</span>)
|
||
tinyMCE.srcMode = settings.exec_mode == <span class="literal">"src"</span> ? <span class="literal">'_src'</span> : <span class="literal">''</span>;
|
||
|
||
tinyMCE.baseURL = src;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Get document base path</span>
|
||
<span class="reserved">this</span>.documentBasePath = document.location.href;
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.documentBasePath.indexOf(<span class="literal">'?'</span>) != -1)
|
||
<span class="reserved">this</span>.documentBasePath = <span class="reserved">this</span>.documentBasePath.substring(0, <span class="reserved">this</span>.documentBasePath.indexOf(<span class="literal">'?'</span>));
|
||
<span class="reserved">this</span>.documentURL = <span class="reserved">this</span>.documentBasePath;
|
||
<span class="reserved">this</span>.documentBasePath = <span class="reserved">this</span>.documentBasePath.substring(0, <span class="reserved">this</span>.documentBasePath.lastIndexOf(<span class="literal">'/'</span>));
|
||
|
||
<span class="comment">// If not HTTP absolute</span>
|
||
<span class="reserved">if</span> (tinyMCE.baseURL.indexOf(<span class="literal">'://'</span>) == -1 && tinyMCE.baseURL.charAt(0) != <span class="literal">'/'</span>) {
|
||
<span class="comment">// If site absolute</span>
|
||
tinyMCE.baseURL = <span class="reserved">this</span>.documentBasePath + <span class="literal">"/"</span> + tinyMCE.baseURL;
|
||
}
|
||
|
||
<span class="comment">// Set default values on settings</span>
|
||
<span class="reserved">this</span>._def(<span class="literal">"mode"</span>, <span class="literal">"none"</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"theme"</span>, <span class="literal">"advanced"</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"plugins"</span>, <span class="literal">""</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"language"</span>, <span class="literal">"en"</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"docs_language"</span>, <span class="reserved">this</span>.settings[<span class="literal">'language'</span>]);
|
||
<span class="reserved">this</span>._def(<span class="literal">"elements"</span>, <span class="literal">""</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"textarea_trigger"</span>, <span class="literal">"mce_editable"</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"editor_selector"</span>, <span class="literal">""</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"editor_deselector"</span>, <span class="literal">"mceNoEditor"</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"valid_elements"</span>, <span class="literal">"+a[id|style|rel|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|style],-ul[class|style],-li[class|style],br,img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align],-sub[style|class],-sup[style|class],-blockquote[dir|style],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],-td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[style|class|align],-pre[class|align|style],address[class|align|style],-h1[id|style|dir|class|align],-h2[id|style|dir|class|align],-h3[id|style|dir|class|align],-h4[id|style|dir|class|align],-h5[id|style|dir|class|align],-h6[id|style|dir|class|align],hr[class|style],-font[face|size|style|id|class|dir|color],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang]"</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"extended_valid_elements"</span>, <span class="literal">""</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"invalid_elements"</span>, <span class="literal">""</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"encoding"</span>, <span class="literal">""</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"urlconverter_callback"</span>, tinyMCE.getParam(<span class="literal">"urlconvertor_callback"</span>, <span class="literal">"TinyMCE_Engine.prototype.convertURL"</span>));
|
||
<span class="reserved">this</span>._def(<span class="literal">"save_callback"</span>, <span class="literal">""</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"debug"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"force_br_newlines"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"force_p_newlines"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"add_form_submit_trigger"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"relative_urls"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"remove_script_host"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"focus_alert"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"document_base_url"</span>, <span class="reserved">this</span>.documentURL);
|
||
<span class="reserved">this</span>._def(<span class="literal">"visual"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"visual_table_class"</span>, <span class="literal">"mceVisualAid"</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"setupcontent_callback"</span>, <span class="literal">""</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"fix_content_duplication"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"custom_undo_redo"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"custom_undo_redo_levels"</span>, -1);
|
||
<span class="reserved">this</span>._def(<span class="literal">"custom_undo_redo_keyboard_shortcuts"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"custom_undo_redo_restore_selection"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"verify_html"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"apply_source_formatting"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"directionality"</span>, <span class="literal">"ltr"</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"cleanup_on_startup"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"inline_styles"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"convert_newlines_to_brs"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"auto_reset_designmode"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"entities"</span>, <span class="literal">"39,#39,160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,34,quot,38,amp,60,lt,62,gt,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"entity_encoding"</span>, <span class="literal">"named"</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"cleanup_callback"</span>, <span class="literal">""</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"add_unload_trigger"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"ask"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"nowrap"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"auto_resize"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"auto_focus"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"cleanup"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"remove_linebreaks"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"button_tile_map"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"submit_patch"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"browsers"</span>, <span class="literal">"msie,safari,gecko,opera"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"dialog_type"</span>, <span class="literal">"window"</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"accessibility_warnings"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"accessibility_focus"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"merge_styles_invalid_parents"</span>, <span class="literal">""</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"force_hex_style_colors"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"trim_span_elements"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"convert_fonts_to_spans"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"doctype"</span>, <span class="literal">'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"font_size_classes"</span>, <span class="literal">''</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"font_size_style_values"</span>, <span class="literal">'xx-small,x-small,small,medium,large,x-large,xx-large'</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"event_elements"</span>, <span class="literal">'a,img'</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"convert_urls"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"table_inline_editing"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"object_resizing"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"custom_shortcuts"</span>, true);
|
||
<span class="reserved">this</span>._def(<span class="literal">"convert_on_click"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"content_css"</span>, <span class="literal">''</span>);
|
||
<span class="reserved">this</span>._def(<span class="literal">"fix_list_elements"</span>, false);
|
||
<span class="reserved">this</span>._def(<span class="literal">"fix_table_elements"</span>, false);
|
||
|
||
<span class="comment">// Browser check IE</span>
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.isMSIE && <span class="reserved">this</span>.settings[<span class="literal">'browsers'</span>].indexOf(<span class="literal">'msie'</span>) == -1)
|
||
<span class="reserved">return</span>;
|
||
|
||
<span class="comment">// Browser check Gecko</span>
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.isGecko && <span class="reserved">this</span>.settings[<span class="literal">'browsers'</span>].indexOf(<span class="literal">'gecko'</span>) == -1)
|
||
<span class="reserved">return</span>;
|
||
|
||
<span class="comment">// Browser check Safari</span>
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.isSafari && <span class="reserved">this</span>.settings[<span class="literal">'browsers'</span>].indexOf(<span class="literal">'safari'</span>) == -1)
|
||
<span class="reserved">return</span>;
|
||
|
||
<span class="comment">// Browser check Opera</span>
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.isOpera && <span class="reserved">this</span>.settings[<span class="literal">'browsers'</span>].indexOf(<span class="literal">'opera'</span>) == -1)
|
||
<span class="reserved">return</span>;
|
||
|
||
<span class="comment">// If not super absolute make it so</span>
|
||
var baseHREF = tinyMCE.settings[<span class="literal">'document_base_url'</span>];
|
||
var h = document.location.href;
|
||
var p = h.indexOf(<span class="literal">'://'</span>);
|
||
<span class="reserved">if</span> (p > 0 && document.location.protocol != <span class="literal">"file:"</span>) {
|
||
p = h.indexOf(<span class="literal">'/'</span>, p + 3);
|
||
h = h.substring(0, p);
|
||
|
||
<span class="reserved">if</span> (baseHREF.indexOf(<span class="literal">'://'</span>) == -1)
|
||
baseHREF = h + baseHREF;
|
||
|
||
tinyMCE.settings[<span class="literal">'document_base_url'</span>] = baseHREF;
|
||
tinyMCE.settings[<span class="literal">'document_base_prefix'</span>] = h;
|
||
}
|
||
|
||
<span class="comment">// Trim away query part</span>
|
||
<span class="reserved">if</span> (baseHREF.indexOf(<span class="literal">'?'</span>) != -1)
|
||
baseHREF = baseHREF.substring(0, baseHREF.indexOf(<span class="literal">'?'</span>));
|
||
|
||
<span class="reserved">this</span>.settings[<span class="literal">'base_href'</span>] = baseHREF.substring(0, baseHREF.lastIndexOf(<span class="literal">'/'</span>)) + <span class="literal">"/"</span>;
|
||
|
||
theme = <span class="reserved">this</span>.settings[<span class="literal">'theme'</span>];
|
||
<span class="reserved">this</span>.blockRegExp = new RegExp(<span class="literal">"^(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|blockquote|center|dl|dt|dd|dir|fieldset|form|noscript|noframes|menu|isindex|samp)$"</span>, <span class="literal">"i"</span>);
|
||
<span class="reserved">this</span>.posKeyCodes = new Array(13,45,36,35,33,34,37,38,39,40);
|
||
<span class="reserved">this</span>.uniqueURL = <span class="literal">'javascript:TINYMCE_UNIQUEURL();'</span>; <span class="comment">// Make unique URL non real URL</span>
|
||
<span class="reserved">this</span>.uniqueTag = <span class="literal">'<div id="mceTMPElement" style="display: none">TMP</div>'</span>;
|
||
<span class="reserved">this</span>.callbacks = new Array(<span class="literal">'onInit'</span>, <span class="literal">'getInfo'</span>, <span class="literal">'getEditorTemplate'</span>, <span class="literal">'setupContent'</span>, <span class="literal">'onChange'</span>, <span class="literal">'onPageLoad'</span>, <span class="literal">'handleNodeChange'</span>, <span class="literal">'initInstance'</span>, <span class="literal">'execCommand'</span>, <span class="literal">'getControlHTML'</span>, <span class="literal">'handleEvent'</span>, <span class="literal">'cleanup'</span>);
|
||
|
||
<span class="comment">// Theme url</span>
|
||
<span class="reserved">this</span>.settings[<span class="literal">'theme_href'</span>] = tinyMCE.baseURL + <span class="literal">"/themes/"</span> + theme;
|
||
|
||
<span class="reserved">if</span> (!tinyMCE.isMSIE)
|
||
<span class="reserved">this</span>.settings[<span class="literal">'force_br_newlines'</span>] = false;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.getParam(<span class="literal">"popups_css"</span>, false)) {
|
||
var cssPath = tinyMCE.getParam(<span class="literal">"popups_css"</span>, <span class="literal">""</span>);
|
||
|
||
<span class="comment">// Is relative</span>
|
||
<span class="reserved">if</span> (cssPath.indexOf(<span class="literal">'://'</span>) == -1 && cssPath.charAt(0) != <span class="literal">'/'</span>)
|
||
<span class="reserved">this</span>.settings[<span class="literal">'popups_css'</span>] = <span class="reserved">this</span>.documentBasePath + <span class="literal">"/"</span> + cssPath;
|
||
<span class="reserved">else</span>
|
||
<span class="reserved">this</span>.settings[<span class="literal">'popups_css'</span>] = cssPath;
|
||
} <span class="reserved">else</span>
|
||
<span class="reserved">this</span>.settings[<span class="literal">'popups_css'</span>] = tinyMCE.baseURL + <span class="literal">"/themes/"</span> + theme + <span class="literal">"/css/editor_popup.css"</span>;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.getParam(<span class="literal">"editor_css"</span>, false)) {
|
||
var cssPath = tinyMCE.getParam(<span class="literal">"editor_css"</span>, <span class="literal">""</span>);
|
||
|
||
<span class="comment">// Is relative</span>
|
||
<span class="reserved">if</span> (cssPath.indexOf(<span class="literal">'://'</span>) == -1 && cssPath.charAt(0) != <span class="literal">'/'</span>)
|
||
<span class="reserved">this</span>.settings[<span class="literal">'editor_css'</span>] = <span class="reserved">this</span>.documentBasePath + <span class="literal">"/"</span> + cssPath;
|
||
<span class="reserved">else</span>
|
||
<span class="reserved">this</span>.settings[<span class="literal">'editor_css'</span>] = cssPath;
|
||
} <span class="reserved">else</span>
|
||
<span class="reserved">this</span>.settings[<span class="literal">'editor_css'</span>] = tinyMCE.baseURL + <span class="literal">"/themes/"</span> + theme + <span class="literal">"/css/editor_ui.css"</span>;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'debug'</span>]) {
|
||
var msg = <span class="literal">"Debug: \n"</span>;
|
||
|
||
msg += <span class="literal">"baseURL: "</span> + <span class="reserved">this</span>.baseURL + <span class="literal">"\n"</span>;
|
||
msg += <span class="literal">"documentBasePath: "</span> + <span class="reserved">this</span>.documentBasePath + <span class="literal">"\n"</span>;
|
||
msg += <span class="literal">"content_css: "</span> + <span class="reserved">this</span>.settings[<span class="literal">'content_css'</span>] + <span class="literal">"\n"</span>;
|
||
msg += <span class="literal">"popups_css: "</span> + <span class="reserved">this</span>.settings[<span class="literal">'popups_css'</span>] + <span class="literal">"\n"</span>;
|
||
msg += <span class="literal">"editor_css: "</span> + <span class="reserved">this</span>.settings[<span class="literal">'editor_css'</span>] + <span class="literal">"\n"</span>;
|
||
|
||
alert(msg);
|
||
}
|
||
|
||
<span class="comment">// Only do this once</span>
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.configs.length == 0) {
|
||
<span class="comment">// Is Safari enabled</span>
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.isSafari && <span class="reserved">this</span>.getParam(<span class="literal">'safari_warning'</span>, false))
|
||
alert(<span class="literal">"Safari support is very limited and should be considered experimental.\nSo there is no need to even submit bugreports on this early version.\nYou can disable this message by setting: safari_warning option to false"</span>);
|
||
|
||
<span class="reserved">if</span> (typeof(TinyMCECompressed) == <span class="literal">"undefined"</span>) {
|
||
tinyMCE.addEvent(window, <span class="literal">"DOMContentLoaded"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>.onLoad);
|
||
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && !tinyMCE.isOpera) {
|
||
<span class="reserved">if</span> (document.body)
|
||
tinyMCE.addEvent(document.body, <span class="literal">"readystatechange"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>.onLoad);
|
||
<span class="reserved">else</span>
|
||
tinyMCE.addEvent(document, <span class="literal">"readystatechange"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>.onLoad);
|
||
}
|
||
|
||
tinyMCE.addEvent(window, <span class="literal">"load"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>.onLoad);
|
||
tinyMCE._addUnloadEvents();
|
||
}
|
||
}
|
||
|
||
<span class="reserved">this</span>.loadScript(tinyMCE.baseURL + <span class="literal">'/themes/'</span> + <span class="reserved">this</span>.settings[<span class="literal">'theme'</span>] + <span class="literal">'/editor_template'</span> + tinyMCE.srcMode + <span class="literal">'.js'</span>);
|
||
<span class="reserved">this</span>.loadScript(tinyMCE.baseURL + <span class="literal">'/langs/'</span> + <span class="reserved">this</span>.settings[<span class="literal">'language'</span>] + <span class="literal">'.js'</span>);
|
||
<span class="reserved">this</span>.loadCSS(<span class="reserved">this</span>.settings[<span class="literal">'editor_css'</span>]);
|
||
|
||
<span class="comment">// Add plugins</span>
|
||
var p = tinyMCE.getParam(<span class="literal">'plugins'</span>, <span class="literal">''</span>, true, <span class="literal">','</span>);
|
||
<span class="reserved">if</span> (p.length > 0) {
|
||
<span class="reserved">for</span> (var i=0; i<p.length; i++) {
|
||
<span class="reserved">if</span> (p[i].charAt(0) != <span class="literal">'-'</span>)
|
||
<span class="reserved">this</span>.loadScript(tinyMCE.baseURL + <span class="literal">'/plugins/'</span> + p[i] + <span class="literal">'/editor_plugin'</span> + tinyMCE.srcMode + <span class="literal">'.js'</span>);
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Setup entities</span>
|
||
settings[<span class="literal">'cleanup_entities'</span>] = new Array();
|
||
var entities = tinyMCE.getParam(<span class="literal">'entities'</span>, <span class="literal">''</span>, true, <span class="literal">','</span>);
|
||
<span class="reserved">for</span> (var i=0; i<entities.length; i+=2)
|
||
settings[<span class="literal">'cleanup_entities'</span>][<span class="literal">'c'</span> + entities[i]] = entities[i+1];
|
||
|
||
<span class="comment">// Save away this config</span>
|
||
settings[<span class="literal">'index'</span>] = <span class="reserved">this</span>.configs.length;
|
||
<span class="reserved">this</span>.configs[<span class="reserved">this</span>.configs.length] = settings;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Adds unload event handles to execute triggerSave.
|
||
*
|
||
* <span class="attrib">@private</span>
|
||
*/</span>
|
||
_addUnloadEvents : <span class="reserved">function</span>() {
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE) {
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'add_unload_trigger'</span>]) {
|
||
tinyMCE.addEvent(window, <span class="literal">"unload"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>.unloadHandler);
|
||
tinyMCE.addEvent(window.document, <span class="literal">"beforeunload"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>.unloadHandler);
|
||
}
|
||
} <span class="reserved">else</span> {
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'add_unload_trigger'</span>])
|
||
tinyMCE.addEvent(window, <span class="literal">"unload"</span>, <span class="reserved">function</span> () {tinyMCE.triggerSave(true, true);});
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Assigns a default value for a specific config parameter.
|
||
*
|
||
* <span class="attrib">@param</span> {string} key Settings key to add default value to.
|
||
* <span class="attrib">@param</span> {object} def_val Default value to assign if the settings option isn't defined.
|
||
* <span class="attrib">@param</span> {boolean} t Trim all white space, if true all whitespace will be removed from option value.
|
||
* <span class="attrib">@private</span>
|
||
*/</span>
|
||
_def : <span class="reserved">function</span>(key, def_val, t) {
|
||
var v = tinyMCE.getParam(key, def_val);
|
||
|
||
v = t ? v.replace(/\s+/g,<span class="literal">""</span>) : v;
|
||
|
||
<span class="reserved">this</span>.settings[key] = v;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns true/false if the specified plugin is loaded or not.
|
||
*
|
||
* <span class="attrib">@param</span> {string} n Plugin name to look for.
|
||
* <span class="attrib">@return</span> true/false if the specified plugin is loaded or not.
|
||
* <span class="attrib">@type</span> boolean
|
||
*/</span>
|
||
hasPlugin : <span class="reserved">function</span>(n) {
|
||
<span class="reserved">return</span> typeof(<span class="reserved">this</span>.plugins[n]) != <span class="literal">"undefined"</span> && <span class="reserved">this</span>.plugins[n] != null;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Adds the specified plugin to the list of loaded plugins, this will also setup the baseURL
|
||
* property of the plugin.
|
||
*
|
||
* <span class="attrib">@param</span> {string} Plugin name/id.
|
||
* <span class="attrib">@param</span> {TinyMCE_Plugin} p Plugin instance to add.
|
||
*/</span>
|
||
addPlugin : <span class="reserved">function</span>(n, p) {
|
||
var op = <span class="reserved">this</span>.plugins[n];
|
||
|
||
<span class="comment">// Use the previous plugin object base URL used when loading external plugins</span>
|
||
p.baseURL = op ? op.baseURL : tinyMCE.baseURL + <span class="literal">"/plugins/"</span> + n;
|
||
<span class="reserved">this</span>.plugins[n] = p;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Sets the baseURL of the specified plugin, this is useful if the plugin is loaded from
|
||
* a external location.
|
||
*
|
||
* <span class="attrib">@param</span> {string} n Plugin name/id to set base URL on. This have to be added before.
|
||
* <span class="attrib">@param</span> {string} u Base URL of plugin, this string should be the URL prefix for the plugin without a trailing slash.
|
||
*/</span>
|
||
setPluginBaseURL : <span class="reserved">function</span>(n, u) {
|
||
var op = <span class="reserved">this</span>.plugins[n];
|
||
|
||
<span class="reserved">if</span> (op)
|
||
op.baseURL = u;
|
||
<span class="reserved">else</span>
|
||
<span class="reserved">this</span>.plugins[n] = {baseURL : u};
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Load plugin from external URL.
|
||
*
|
||
* <span class="attrib">@param</span> {string} n Plugin name for example \"emotions\".
|
||
* <span class="attrib">@param</span> {string} u URL of plugin directory to load.
|
||
*/</span>
|
||
loadPlugin : <span class="reserved">function</span>(n, u) {
|
||
u = u.indexOf(<span class="literal">'.js'</span>) != -1 ? u.substring(0, u.lastIndexOf(<span class="literal">'/'</span>)) : u;
|
||
u = u.charAt(u.length-1) == <span class="literal">'/'</span> ? u.substring(0, u.length-1) : u;
|
||
<span class="reserved">this</span>.plugins[n] = {baseURL : u};
|
||
<span class="reserved">this</span>.loadScript(u + <span class="literal">"/editor_plugin"</span> + (tinyMCE.srcMode ? <span class="literal">'_src'</span> : <span class="literal">''</span>) + <span class="literal">".js"</span>);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns true/false if the specified theme is loaded or not.
|
||
*
|
||
* <span class="attrib">@param</span> {string} n Theme name/id to check for.
|
||
* <span class="attrib">@return</span> true/false if the specified theme is loaded or not.
|
||
* <span class="attrib">@type</span> boolean
|
||
*/</span>
|
||
hasTheme : <span class="reserved">function</span>(n) {
|
||
<span class="reserved">return</span> typeof(<span class="reserved">this</span>.themes[n]) != <span class="literal">"undefined"</span> && <span class="reserved">this</span>.themes[n] != null;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Adds the specified theme in to the list of loaded themes.
|
||
*
|
||
* <span class="attrib">@param</span> {string} n Theme name/id to add the object reference to.
|
||
* <span class="attrib">@param</span> {TinyMCE_Theme} t Theme instance to add to the loaded list.
|
||
*/</span>
|
||
addTheme : <span class="reserved">function</span>(n, t) {
|
||
<span class="reserved">this</span>.themes[n] = t;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Adds a floating menu instance to TinyMCE.
|
||
*
|
||
* <span class="attrib">@param</span> {string} n TinyMCE menu id.
|
||
* <span class="attrib">@param</span> {TinyMCE_Menu} m TinyMCE menu instance.
|
||
*/</span>
|
||
addMenu : <span class="reserved">function</span>(n, m) {
|
||
<span class="reserved">this</span>.menus[n] = m;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Checks if the specified menu by name is added to TinyMCE.
|
||
*
|
||
* <span class="attrib">@param</span> {string} n TinyMCE menu id.
|
||
* <span class="attrib">@return</span> true/false if it exists or not.
|
||
* <span class="attrib">@type</span> boolean
|
||
*/</span>
|
||
hasMenu : <span class="reserved">function</span>(n) {
|
||
<span class="reserved">return</span> typeof(<span class="reserved">this</span>.plugins[n]) != <span class="literal">"undefined"</span> && <span class="reserved">this</span>.plugins[n] != null;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Loads the specified script by writing the a script tag to the current page.
|
||
* This will also check if the file has been loaded before. This function should only be used
|
||
* when the page is loading.
|
||
*
|
||
* <span class="attrib">@param</span> {string} url Script URL to load.
|
||
*/</span>
|
||
loadScript : <span class="reserved">function</span>(url) {
|
||
<span class="reserved">for</span> (var i=0; i<<span class="reserved">this</span>.loadedFiles.length; i++) {
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.loadedFiles[i] == url)
|
||
<span class="reserved">return</span>;
|
||
}
|
||
|
||
document.write(<span class="literal">'<sc'</span>+<span class="literal">'ript language="javascript" type="text/javascript" src="'</span> + url + <span class="literal">'"></script>'</span>);
|
||
|
||
<span class="reserved">this</span>.loadedFiles[<span class="reserved">this</span>.loadedFiles.length] = url;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Loads the specified CSS by writing the a link tag to the current page.
|
||
* This will also check if the file has been loaded before. This function should only be used
|
||
* when the page is loading.
|
||
*
|
||
* <span class="attrib">@param</span> {string} url CSS file URL to load or comma separated list of files.
|
||
*/</span>
|
||
loadCSS : <span class="reserved">function</span>(url) {
|
||
var ar = url.replace(/\s+/, <span class="literal">''</span>).split(<span class="literal">','</span>);
|
||
var lflen = 0, csslen = 0;
|
||
var skip = false;
|
||
var x = 0, i = 0;
|
||
|
||
<span class="reserved">for</span> (x = 0,csslen = ar.length; x<csslen; x++) {
|
||
ignore_css = false;
|
||
|
||
<span class="reserved">if</span> (ar[x] != null && ar[x] != <span class="literal">'null'</span> && ar[x].length > 0) {
|
||
<span class="comment">/* Make sure it doesn't exist. */</span>
|
||
<span class="reserved">for</span> (i=0, lflen=<span class="reserved">this</span>.loadedFiles.length; i<lflen; i++) {
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.loadedFiles[i] == ar[x]) {
|
||
skip = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
<span class="reserved">if</span> (!skip) {
|
||
document.write(<span class="literal">'<link href="'</span> + ar[x] + <span class="literal">'" rel="stylesheet" type="text/css" />'</span>);
|
||
<span class="reserved">this</span>.loadedFiles[<span class="reserved">this</span>.loadedFiles.length] = ar[x];
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Imports a CSS file into a allready loaded document. This will add a link element
|
||
* to the head element of the document.
|
||
*
|
||
* <span class="attrib">@param</span> {DOMDocument} doc DOM Document to load CSS into.
|
||
* <span class="attrib">@param</span> {string} css CSS File URL to load or comma separated list of files.
|
||
*/</span>
|
||
importCSS : <span class="reserved">function</span>(doc, css) {
|
||
var css_ary = css.replace(/\s+/, <span class="literal">''</span>).split(<span class="literal">','</span>);
|
||
var csslen, elm, headArr, x, css_file;
|
||
|
||
<span class="reserved">for</span> (x = 0, csslen = css_ary.length; x<csslen; x++) {
|
||
css_file = css_ary[x];
|
||
|
||
<span class="reserved">if</span> (css_file != null && css_file != <span class="literal">'null'</span> && css_file.length > 0) {
|
||
<span class="comment">// Is relative, make absolute</span>
|
||
<span class="reserved">if</span> (css_file.indexOf(<span class="literal">'://'</span>) == -1 && css_file.charAt(0) != <span class="literal">'/'</span>)
|
||
css_file = <span class="reserved">this</span>.documentBasePath + <span class="literal">"/"</span> + css_file;
|
||
|
||
<span class="reserved">if</span> (typeof(doc.createStyleSheet) == <span class="literal">"undefined"</span>) {
|
||
elm = doc.createElement(<span class="literal">"link"</span>);
|
||
|
||
elm.rel = <span class="literal">"stylesheet"</span>;
|
||
elm.href = css_file;
|
||
|
||
<span class="reserved">if</span> ((headArr = doc.getElementsByTagName(<span class="literal">"head"</span>)) != null && headArr.length > 0)
|
||
headArr[0].appendChild(elm);
|
||
} <span class="reserved">else</span>
|
||
doc.createStyleSheet(css_file);
|
||
}
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Displays a confirm dialog when a user clicks/focus a textarea that is to be converted into
|
||
* a TinyMCE instance.
|
||
*
|
||
* <span class="attrib">@param</span> {DOMEvent} e DOM event instance.
|
||
* <span class="attrib">@param</span> {Array} settings Name/Value array of initialization settings.
|
||
*/</span>
|
||
confirmAdd : <span class="reserved">function</span>(e, settings) {
|
||
var elm = tinyMCE.isMSIE ? event.srcElement : e.target;
|
||
var elementId = elm.name ? elm.name : elm.id;
|
||
|
||
tinyMCE.settings = settings;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'convert_on_click'</span>] || (!elm.getAttribute(<span class="literal">'mce_noask'</span>) && confirm(tinyMCELang[<span class="literal">'lang_edit_confirm'</span>])))
|
||
tinyMCE.addMCEControl(elm, elementId);
|
||
|
||
elm.setAttribute(<span class="literal">'mce_noask'</span>, <span class="literal">'true'</span>);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Moves the contents from the hidden textarea to the editor that gets inserted.
|
||
*
|
||
* <span class="attrib">@param</span> {string} form_element_name Form element name to move contents from.
|
||
* <span class="attrib">@deprecated</span>
|
||
*/</span>
|
||
updateContent : <span class="reserved">function</span>(form_element_name) {
|
||
<span class="comment">// Find MCE instance linked to given form element and copy it's value</span>
|
||
var formElement = document.getElementById(form_element_name);
|
||
<span class="reserved">for</span> (var n in tinyMCE.instances) {
|
||
var inst = tinyMCE.instances[n];
|
||
<span class="reserved">if</span> (!tinyMCE.isInstance(inst))
|
||
continue;
|
||
|
||
inst.switchSettings();
|
||
|
||
<span class="reserved">if</span> (inst.formElement == formElement) {
|
||
var doc = inst.getDoc();
|
||
|
||
tinyMCE._setHTML(doc, inst.formElement.value);
|
||
|
||
<span class="reserved">if</span> (!tinyMCE.isMSIE)
|
||
doc.body.innerHTML = tinyMCE._cleanupHTML(inst, doc, <span class="reserved">this</span>.settings, doc.body, inst.visualAid);
|
||
}
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Adds a TinyMCE editor control instance to a specific form element.
|
||
*
|
||
* <span class="attrib">@param</span> {HTMLElement} replace_element HTML element object to replace.
|
||
* <span class="attrib">@param</span> {string} form_element_name HTML form element name,
|
||
* <span class="attrib">@param</span> {DOMDocument} target_document Target document that holds the element.
|
||
*/</span>
|
||
addMCEControl : <span class="reserved">function</span>(replace_element, form_element_name, target_document) {
|
||
var id = <span class="literal">"mce_editor_"</span> + tinyMCE.idCounter++;
|
||
var inst = new TinyMCE_Control(tinyMCE.settings);
|
||
|
||
inst.editorId = id;
|
||
<span class="reserved">this</span>.instances[id] = inst;
|
||
|
||
inst._onAdd(replace_element, form_element_name, target_document);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Removes a TinyMCE editor control instance by id.
|
||
*
|
||
* <span class="attrib">@param</span> {string} editor_id Id of editor instance to remove.
|
||
*/</span>
|
||
removeMCEControl : <span class="reserved">function</span>(editor_id) {
|
||
var inst = tinyMCE.getInstanceById(editor_id);
|
||
|
||
<span class="reserved">if</span> (inst) {
|
||
inst.switchSettings();
|
||
|
||
editor_id = inst.editorId;
|
||
var html = tinyMCE.getContent(editor_id);
|
||
|
||
<span class="comment">// Remove editor instance from instances array</span>
|
||
var tmpInstances = new Array();
|
||
<span class="reserved">for</span> (var instanceName in tinyMCE.instances) {
|
||
var instance = tinyMCE.instances[instanceName];
|
||
<span class="reserved">if</span> (!tinyMCE.isInstance(instance))
|
||
continue;
|
||
|
||
<span class="reserved">if</span> (instanceName != editor_id)
|
||
tmpInstances[instanceName] = instance;
|
||
}
|
||
tinyMCE.instances = tmpInstances;
|
||
|
||
tinyMCE.selectedElement = null;
|
||
tinyMCE.selectedInstance = null;
|
||
|
||
<span class="comment">// Remove element</span>
|
||
var replaceElement = document.getElementById(editor_id + <span class="literal">"_parent"</span>);
|
||
var oldTargetElement = inst.oldTargetElement;
|
||
var targetName = oldTargetElement.nodeName.toLowerCase();
|
||
|
||
<span class="reserved">if</span> (targetName == <span class="literal">"textarea"</span> || targetName == <span class="literal">"input"</span>) {
|
||
<span class="comment">// Just show the old text area</span>
|
||
replaceElement.parentNode.removeChild(replaceElement);
|
||
oldTargetElement.style.display = <span class="literal">"inline"</span>;
|
||
oldTargetElement.value = html;
|
||
} <span class="reserved">else</span> {
|
||
oldTargetElement.innerHTML = html;
|
||
oldTargetElement.style.display = <span class="literal">'block'</span>;
|
||
|
||
replaceElement.parentNode.insertBefore(oldTargetElement, replaceElement);
|
||
replaceElement.parentNode.removeChild(replaceElement);
|
||
}
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Moves the contents from a TinyMCE editor control instance to the hidden textarea
|
||
* that got replaced with TinyMCE. This is executed automaticly on for example form submit.
|
||
*
|
||
* <span class="attrib">@param</span> {boolean} skip_cleanup Optional Skip cleanup, simply move the contents as fast as possible.
|
||
* <span class="attrib">@param</span> {boolean} skip_callback Optional Skip callback, don't call the save_callback function.
|
||
*/</span>
|
||
triggerSave : <span class="reserved">function</span>(skip_cleanup, skip_callback) {
|
||
var inst, n;
|
||
|
||
<span class="comment">// Default to false</span>
|
||
<span class="reserved">if</span> (typeof(skip_cleanup) == <span class="literal">"undefined"</span>)
|
||
skip_cleanup = false;
|
||
|
||
<span class="comment">// Default to false</span>
|
||
<span class="reserved">if</span> (typeof(skip_callback) == <span class="literal">"undefined"</span>)
|
||
skip_callback = false;
|
||
|
||
<span class="comment">// Cleanup and set all form fields</span>
|
||
<span class="reserved">for</span> (n in tinyMCE.instances) {
|
||
inst = tinyMCE.instances[n];
|
||
|
||
<span class="reserved">if</span> (!tinyMCE.isInstance(inst))
|
||
continue;
|
||
|
||
inst.triggerSave(skip_cleanup, skip_callback);
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Resets a forms TinyMCE instances based on form index.
|
||
*
|
||
* <span class="attrib">@param</span> {int} form_index Form index to reset.
|
||
*/</span>
|
||
resetForm : <span class="reserved">function</span>(form_index) {
|
||
var i, inst, n, formObj = document.forms[form_index];
|
||
|
||
<span class="reserved">for</span> (n in tinyMCE.instances) {
|
||
inst = tinyMCE.instances[n];
|
||
|
||
<span class="reserved">if</span> (!tinyMCE.isInstance(inst))
|
||
continue;
|
||
|
||
inst.switchSettings();
|
||
|
||
<span class="reserved">for</span> (i=0; i<formObj.elements.length; i++) {
|
||
<span class="reserved">if</span> (inst.formTargetElementId == formObj.elements[i].name)
|
||
inst.getBody().innerHTML = inst.startContent;
|
||
}
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Executes a command on a specific editor instance by id.
|
||
*
|
||
* <span class="attrib">@param</span> {string} editor_id TinyMCE editor control instance id to perform comman on.
|
||
* <span class="attrib">@param</span> {string} command Command name to execute, for example mceLink or Bold.
|
||
* <span class="attrib">@param</span> {boolean} user_interface True/false state if a UI (dialog) should be presented or not.
|
||
* <span class="attrib">@param</span> {object} value Optional command value, this can be anything.
|
||
* <span class="attrib">@param</span> {boolean} focus True/false if the editor instance should be focused first.
|
||
*/</span>
|
||
execInstanceCommand : <span class="reserved">function</span>(editor_id, command, user_interface, value, focus) {
|
||
var inst = tinyMCE.getInstanceById(editor_id);
|
||
<span class="reserved">if</span> (inst) {
|
||
<span class="reserved">if</span> (typeof(focus) == <span class="literal">"undefined"</span>)
|
||
focus = true;
|
||
|
||
<span class="reserved">if</span> (focus)
|
||
inst.contentWindow.focus();
|
||
|
||
<span class="comment">// Reset design mode if lost</span>
|
||
inst.autoResetDesignMode();
|
||
|
||
<span class="reserved">this</span>.selectedElement = inst.getFocusElement();
|
||
<span class="reserved">this</span>.selectedInstance = inst;
|
||
tinyMCE.execCommand(command, user_interface, value);
|
||
|
||
<span class="comment">// Cancel event so it doesn't call onbeforeonunlaod</span>
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && window.event != null)
|
||
tinyMCE.cancelEvent(window.event);
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Executes a command on the selected or last selected TinyMCE editor control instance. This function also handles
|
||
* some non instance specific commands like mceAddControl, mceRemoveControl, mceHelp or mceFocus.
|
||
*
|
||
* <span class="attrib">@param</span> {string} command Command name to execute, for example mceLink or Bold.
|
||
* <span class="attrib">@param</span> {boolean} user_interface True/false state if a UI (dialog) should be presented or not.
|
||
* <span class="attrib">@param</span> {object} value Optional command value, this can be anything.
|
||
*/</span>
|
||
execCommand : <span class="reserved">function</span>(command, user_interface, value) {
|
||
<span class="comment">// Default input</span>
|
||
user_interface = user_interface ? user_interface : false;
|
||
value = value ? value : null;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.selectedInstance)
|
||
tinyMCE.selectedInstance.switchSettings();
|
||
|
||
switch (command) {
|
||
case <span class="literal">'mceHelp'</span>:
|
||
tinyMCE.openWindow({
|
||
file : <span class="literal">'about.htm'</span>,
|
||
width : 480,
|
||
height : 380
|
||
}, {
|
||
tinymce_version : tinyMCE.majorVersion + <span class="literal">"."</span> + tinyMCE.minorVersion,
|
||
tinymce_releasedate : tinyMCE.releaseDate,
|
||
inline : <span class="literal">"yes"</span>
|
||
});
|
||
<span class="reserved">return</span>;
|
||
|
||
case <span class="literal">'mceFocus'</span>:
|
||
var inst = tinyMCE.getInstanceById(value);
|
||
<span class="reserved">if</span> (inst)
|
||
inst.contentWindow.focus();
|
||
<span class="reserved">return</span>;
|
||
|
||
case <span class="literal">"mceAddControl"</span>:
|
||
case <span class="literal">"mceAddEditor"</span>:
|
||
tinyMCE.addMCEControl(tinyMCE._getElementById(value), value);
|
||
<span class="reserved">return</span>;
|
||
|
||
case <span class="literal">"mceAddFrameControl"</span>:
|
||
tinyMCE.addMCEControl(tinyMCE._getElementById(value[<span class="literal">'element'</span>], value[<span class="literal">'document'</span>]), value[<span class="literal">'element'</span>], value[<span class="literal">'document'</span>]);
|
||
<span class="reserved">return</span>;
|
||
|
||
case <span class="literal">"mceRemoveControl"</span>:
|
||
case <span class="literal">"mceRemoveEditor"</span>:
|
||
tinyMCE.removeMCEControl(value);
|
||
<span class="reserved">return</span>;
|
||
|
||
case <span class="literal">"mceResetDesignMode"</span>:
|
||
<span class="comment">// Resets the designmode state of the editors in Gecko</span>
|
||
<span class="reserved">if</span> (!tinyMCE.isMSIE) {
|
||
<span class="reserved">for</span> (var n in tinyMCE.instances) {
|
||
<span class="reserved">if</span> (!tinyMCE.isInstance(tinyMCE.instances[n]))
|
||
continue;
|
||
|
||
try {
|
||
tinyMCE.instances[n].getDoc().designMode = <span class="literal">"on"</span>;
|
||
} catch (e) {
|
||
<span class="comment">// Ignore any errors</span>
|
||
}
|
||
}
|
||
}
|
||
|
||
<span class="reserved">return</span>;
|
||
}
|
||
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.selectedInstance) {
|
||
<span class="reserved">this</span>.selectedInstance.execCommand(command, user_interface, value);
|
||
} <span class="reserved">else</span> <span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'focus_alert'</span>])
|
||
alert(tinyMCELang[<span class="literal">'lang_focus_alert'</span>]);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Creates a iframe editor container for the specified element.
|
||
*
|
||
* <span class="attrib">@param</span> {HTMLElement} replace_element Element to replace with iframe element.
|
||
* <span class="attrib">@param</span> {DOMDocument} doc Optional document to use with iframe replacement.
|
||
* <span class="attrib">@param</span> {DOMWindow} win Optional window to use with iframe replacement.
|
||
* <span class="attrib">@private</span>
|
||
*/</span>
|
||
_createIFrame : <span class="reserved">function</span>(replace_element, doc, win) {
|
||
var iframe, id = replace_element.getAttribute(<span class="literal">"id"</span>);
|
||
var aw, ah;
|
||
|
||
<span class="reserved">if</span> (typeof(doc) == <span class="literal">"undefined"</span>)
|
||
doc = document;
|
||
|
||
<span class="reserved">if</span> (typeof(win) == <span class="literal">"undefined"</span>)
|
||
win = window;
|
||
|
||
iframe = doc.createElement(<span class="literal">"iframe"</span>);
|
||
|
||
aw = <span class="literal">""</span> + tinyMCE.settings[<span class="literal">'area_width'</span>];
|
||
ah = <span class="literal">""</span> + tinyMCE.settings[<span class="literal">'area_height'</span>];
|
||
|
||
<span class="reserved">if</span> (aw.indexOf(<span class="literal">'%'</span>) == -1) {
|
||
aw = parseInt(aw);
|
||
aw = aw < 0 ? 300 : aw;
|
||
aw = aw + <span class="literal">"px"</span>;
|
||
}
|
||
|
||
<span class="reserved">if</span> (ah.indexOf(<span class="literal">'%'</span>) == -1) {
|
||
ah = parseInt(ah);
|
||
ah = ah < 0 ? 240 : ah;
|
||
ah = ah + <span class="literal">"px"</span>;
|
||
}
|
||
|
||
iframe.setAttribute(<span class="literal">"id"</span>, id);
|
||
iframe.setAttribute(<span class="literal">"className"</span>, <span class="literal">"mceEditorIframe"</span>);
|
||
iframe.setAttribute(<span class="literal">"border"</span>, <span class="literal">"0"</span>);
|
||
iframe.setAttribute(<span class="literal">"frameBorder"</span>, <span class="literal">"0"</span>);
|
||
iframe.setAttribute(<span class="literal">"marginWidth"</span>, <span class="literal">"0"</span>);
|
||
iframe.setAttribute(<span class="literal">"marginHeight"</span>, <span class="literal">"0"</span>);
|
||
iframe.setAttribute(<span class="literal">"leftMargin"</span>, <span class="literal">"0"</span>);
|
||
iframe.setAttribute(<span class="literal">"topMargin"</span>, <span class="literal">"0"</span>);
|
||
iframe.setAttribute(<span class="literal">"width"</span>, aw);
|
||
iframe.setAttribute(<span class="literal">"height"</span>, ah);
|
||
iframe.setAttribute(<span class="literal">"allowtransparency"</span>, <span class="literal">"true"</span>);
|
||
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">"auto_resize"</span>])
|
||
iframe.setAttribute(<span class="literal">"scrolling"</span>, <span class="literal">"no"</span>);
|
||
|
||
<span class="comment">// Must have a src element in MSIE HTTPs breaks aswell as absoute URLs</span>
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && !tinyMCE.isOpera)
|
||
iframe.setAttribute(<span class="literal">"src"</span>, <span class="reserved">this</span>.settings[<span class="literal">'default_document'</span>]);
|
||
|
||
iframe.style.width = aw;
|
||
iframe.style.height = ah;
|
||
|
||
<span class="comment">// MSIE 5.0 issue</span>
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && !tinyMCE.isOpera)
|
||
replace_element.outerHTML = iframe.outerHTML;
|
||
<span class="reserved">else</span>
|
||
replace_element.parentNode.replaceChild(iframe, replace_element);
|
||
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && !tinyMCE.isOpera)
|
||
<span class="reserved">return</span> win.frames[id];
|
||
<span class="reserved">else</span>
|
||
<span class="reserved">return</span> iframe;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Setups the contents of TinyMCE editor instance and fills it with contents.
|
||
*
|
||
* <span class="attrib">@param</span> {string} editor_id TinyMCE editor instance control id to fill.
|
||
*/</span>
|
||
setupContent : <span class="reserved">function</span>(editor_id) {
|
||
var inst = tinyMCE.instances[editor_id];
|
||
var doc = inst.getDoc();
|
||
var head = doc.getElementsByTagName(<span class="literal">'head'</span>).item(0);
|
||
var content = inst.startContent;
|
||
|
||
inst.switchSettings();
|
||
|
||
<span class="comment">// Not loaded correctly hit it again, Mozilla bug #997860</span>
|
||
<span class="reserved">if</span> (!tinyMCE.isMSIE && tinyMCE.getParam(<span class="literal">"setupcontent_reload"</span>, false) && doc.title != <span class="literal">"blank_page"</span>) {
|
||
<span class="comment">// This part will remove the designMode status</span>
|
||
<span class="comment">// Failes first time in Firefox 1.5b2 on Mac</span>
|
||
try {doc.location.href = tinyMCE.baseURL + <span class="literal">"/blank.htm"</span>;} catch (ex) {}
|
||
window.setTimeout(<span class="literal">"tinyMCE.setupContent('"</span> + editor_id + <span class="literal">"');"</span>, 1000);
|
||
<span class="reserved">return</span>;
|
||
}
|
||
|
||
<span class="reserved">if</span> (!head) {
|
||
window.setTimeout(<span class="literal">"tinyMCE.setupContent('"</span> + editor_id + <span class="literal">"');"</span>, 10);
|
||
<span class="reserved">return</span>;
|
||
}
|
||
|
||
<span class="comment">// Import theme specific content CSS the user specific</span>
|
||
tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + <span class="literal">"/themes/"</span> + inst.settings[<span class="literal">'theme'</span>] + <span class="literal">"/css/editor_content.css"</span>);
|
||
tinyMCE.importCSS(inst.getDoc(), inst.settings[<span class="literal">'content_css'</span>]);
|
||
tinyMCE.dispatchCallback(inst, <span class="literal">'init_instance_callback'</span>, <span class="literal">'initInstance'</span>, inst);
|
||
|
||
<span class="comment">// Setup keyboard shortcuts</span>
|
||
<span class="reserved">if</span> (tinyMCE.getParam(<span class="literal">'custom_undo_redo_keyboard_shortcuts'</span>)) {
|
||
inst.addShortcut(<span class="literal">'ctrl'</span>, <span class="literal">'z'</span>, <span class="literal">'lang_undo_desc'</span>, <span class="literal">'Undo'</span>);
|
||
inst.addShortcut(<span class="literal">'ctrl'</span>, <span class="literal">'y'</span>, <span class="literal">'lang_redo_desc'</span>, <span class="literal">'Redo'</span>);
|
||
}
|
||
|
||
<span class="comment">// Add default shortcuts for gecko</span>
|
||
<span class="reserved">if</span> (tinyMCE.isGecko) {
|
||
inst.addShortcut(<span class="literal">'ctrl'</span>, <span class="literal">'b'</span>, <span class="literal">'lang_bold_desc'</span>, <span class="literal">'Bold'</span>);
|
||
inst.addShortcut(<span class="literal">'ctrl'</span>, <span class="literal">'i'</span>, <span class="literal">'lang_italic_desc'</span>, <span class="literal">'Italic'</span>);
|
||
inst.addShortcut(<span class="literal">'ctrl'</span>, <span class="literal">'u'</span>, <span class="literal">'lang_underline_desc'</span>, <span class="literal">'Underline'</span>);
|
||
}
|
||
|
||
<span class="comment">// Setup span styles</span>
|
||
<span class="reserved">if</span> (tinyMCE.getParam(<span class="literal">"convert_fonts_to_spans"</span>))
|
||
inst.getDoc().body.setAttribute(<span class="literal">'id'</span>, <span class="literal">'mceSpanFonts'</span>);
|
||
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'nowrap'</span>])
|
||
doc.body.style.whiteSpace = <span class="literal">"nowrap"</span>;
|
||
|
||
doc.body.dir = <span class="reserved">this</span>.settings[<span class="literal">'directionality'</span>];
|
||
doc.editorId = editor_id;
|
||
|
||
<span class="comment">// Add on document element in Mozilla</span>
|
||
<span class="reserved">if</span> (!tinyMCE.isMSIE)
|
||
doc.documentElement.editorId = editor_id;
|
||
|
||
inst.setBaseHREF(tinyMCE.settings[<span class="literal">'base_href'</span>]);
|
||
|
||
<span class="comment">// Replace new line characters to BRs</span>
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'convert_newlines_to_brs'</span>]) {
|
||
content = tinyMCE.regexpReplace(content, <span class="literal">"\r\n"</span>, <span class="literal">"<br />"</span>, <span class="literal">"gi"</span>);
|
||
content = tinyMCE.regexpReplace(content, <span class="literal">"\r"</span>, <span class="literal">"<br />"</span>, <span class="literal">"gi"</span>);
|
||
content = tinyMCE.regexpReplace(content, <span class="literal">"\n"</span>, <span class="literal">"<br />"</span>, <span class="literal">"gi"</span>);
|
||
}
|
||
|
||
<span class="comment">// Open closed anchors</span>
|
||
<span class="comment">// content = content.replace(new RegExp('<a(.*?)/>', 'gi'), '<a$1></a>');</span>
|
||
|
||
<span class="comment">// Call custom cleanup code</span>
|
||
content = tinyMCE.storeAwayURLs(content);
|
||
content = tinyMCE._customCleanup(inst, <span class="literal">"insert_to_editor"</span>, content);
|
||
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE) {
|
||
<span class="comment">// Ugly!!!</span>
|
||
window.setInterval(<span class="literal">'try{tinyMCE.getCSSClasses(tinyMCE.instances["'</span> + editor_id + <span class="literal">'"].getDoc(), "'</span> + editor_id + <span class="literal">'");}catch(e){}'</span>, 500);
|
||
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">"force_br_newlines"</span>])
|
||
doc.styleSheets[0].addRule(<span class="literal">"p"</span>, <span class="literal">"margin: 0;"</span>);
|
||
|
||
var body = inst.getBody();
|
||
body.editorId = editor_id;
|
||
}
|
||
|
||
content = tinyMCE.cleanupHTMLCode(content);
|
||
|
||
<span class="comment">// Fix for bug #958637</span>
|
||
<span class="reserved">if</span> (!tinyMCE.isMSIE) {
|
||
var contentElement = inst.getDoc().createElement(<span class="literal">"body"</span>);
|
||
var doc = inst.getDoc();
|
||
|
||
contentElement.innerHTML = content;
|
||
|
||
<span class="comment">// Remove weridness!</span>
|
||
<span class="reserved">if</span> (tinyMCE.isGecko && tinyMCE.settings[<span class="literal">'remove_lt_gt'</span>])
|
||
content = content.replace(new RegExp(<span class="literal">'&lt;&gt;'</span>, <span class="literal">'g'</span>), <span class="literal">""</span>);
|
||
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'cleanup_on_startup'</span>])
|
||
tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, doc, <span class="reserved">this</span>.settings, contentElement));
|
||
<span class="reserved">else</span> {
|
||
<span class="comment">// Convert all strong/em to b/i</span>
|
||
content = tinyMCE.regexpReplace(content, <span class="literal">"<strong"</span>, <span class="literal">"<b"</span>, <span class="literal">"gi"</span>);
|
||
content = tinyMCE.regexpReplace(content, <span class="literal">"<em(/?)>"</span>, <span class="literal">"<i$1>"</span>, <span class="literal">"gi"</span>);
|
||
content = tinyMCE.regexpReplace(content, <span class="literal">"<em "</span>, <span class="literal">"<i "</span>, <span class="literal">"gi"</span>);
|
||
content = tinyMCE.regexpReplace(content, <span class="literal">"</strong>"</span>, <span class="literal">"</b>"</span>, <span class="literal">"gi"</span>);
|
||
content = tinyMCE.regexpReplace(content, <span class="literal">"</em>"</span>, <span class="literal">"</i>"</span>, <span class="literal">"gi"</span>);
|
||
tinyMCE.setInnerHTML(inst.getBody(), content);
|
||
}
|
||
|
||
tinyMCE.convertAllRelativeURLs(inst.getBody());
|
||
} <span class="reserved">else</span> {
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'cleanup_on_startup'</span>]) {
|
||
tinyMCE._setHTML(inst.getDoc(), content);
|
||
|
||
<span class="comment">// Produces permission denied error in MSIE 5.5</span>
|
||
eval(<span class="literal">'try {tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody()));} catch(e) {}'</span>);
|
||
} <span class="reserved">else</span>
|
||
tinyMCE._setHTML(inst.getDoc(), content);
|
||
}
|
||
|
||
<span class="comment">// Fix for bug #957681</span>
|
||
<span class="comment">//inst.getDoc().designMode = inst.getDoc().designMode;</span>
|
||
|
||
<span class="comment">// Setup element references</span>
|
||
var parentElm = inst.targetDoc.getElementById(inst.editorId + <span class="literal">'_parent'</span>);
|
||
inst.formElement = tinyMCE.isGecko ? parentElm.previousSibling : parentElm.nextSibling;
|
||
|
||
tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings[<span class="literal">'visual'</span>], inst);
|
||
tinyMCE.dispatchCallback(inst, <span class="literal">'setupcontent_callback'</span>, <span class="literal">'setupContent'</span>, editor_id, inst.getBody(), inst.getDoc());
|
||
|
||
<span class="comment">// Re-add design mode on mozilla</span>
|
||
<span class="reserved">if</span> (!tinyMCE.isMSIE)
|
||
tinyMCE.addEventHandlers(inst);
|
||
|
||
<span class="comment">// Add blur handler</span>
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE) {
|
||
tinyMCE.addEvent(inst.getBody(), <span class="literal">"blur"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>._eventPatch);
|
||
tinyMCE.addEvent(inst.getBody(), <span class="literal">"beforedeactivate"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>._eventPatch); <span class="comment">// Bug #1439953</span>
|
||
|
||
<span class="comment">// Workaround for drag drop/copy paste base href bug</span>
|
||
<span class="reserved">if</span> (!tinyMCE.isOpera) {
|
||
tinyMCE.addEvent(doc.body, <span class="literal">"mousemove"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>.onMouseMove);
|
||
tinyMCE.addEvent(doc.body, <span class="literal">"beforepaste"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>._eventPatch);
|
||
tinyMCE.addEvent(doc.body, <span class="literal">"drop"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>._eventPatch);
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Trigger node change, this call locks buttons for tables and so forth</span>
|
||
tinyMCE.selectedInstance = inst;
|
||
tinyMCE.selectedElement = inst.contentWindow.document.body;
|
||
|
||
<span class="comment">// Call custom DOM cleanup</span>
|
||
tinyMCE._customCleanup(inst, <span class="literal">"insert_to_editor_dom"</span>, inst.getBody());
|
||
tinyMCE._customCleanup(inst, <span class="literal">"setup_content_dom"</span>, inst.getBody());
|
||
tinyMCE._setEventsEnabled(inst.getBody(), false);
|
||
tinyMCE.cleanupAnchors(inst.getDoc());
|
||
|
||
<span class="reserved">if</span> (tinyMCE.getParam(<span class="literal">"convert_fonts_to_spans"</span>))
|
||
tinyMCE.convertSpansToFonts(inst.getDoc());
|
||
|
||
inst.startContent = tinyMCE.trim(inst.getBody().innerHTML);
|
||
inst.undoRedo.add({ content : inst.startContent });
|
||
|
||
<span class="comment">// Cleanup any mess left from storyAwayURLs</span>
|
||
<span class="reserved">if</span> (tinyMCE.isGecko) {
|
||
<span class="comment">// Remove mce_src from textnodes and comments</span>
|
||
tinyMCE.selectNodes(inst.getBody(), <span class="reserved">function</span>(n) {
|
||
<span class="reserved">if</span> (n.nodeType == 3 || n.nodeType == 8) {
|
||
n.nodeValue = n.nodeValue.replace(new RegExp(<span class="literal">'\\smce_src=\"[^\"]*\"'</span>, <span class="literal">'gi'</span>), <span class="literal">""</span>);
|
||
n.nodeValue = n.nodeValue.replace(new RegExp(<span class="literal">'\\smce_href=\"[^\"]*\"'</span>, <span class="literal">'gi'</span>), <span class="literal">""</span>);
|
||
}
|
||
|
||
<span class="reserved">return</span> false;
|
||
});
|
||
}
|
||
|
||
<span class="comment">// Cleanup any mess left from storyAwayURLs</span>
|
||
tinyMCE._removeInternal(inst.getBody());
|
||
|
||
tinyMCE.selectedInstance = inst;
|
||
tinyMCE.triggerNodeChange(false, true);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Stores away the src and href attribute values in separate mce_src and mce_href attributes.
|
||
* This is needed since both MSIE and Gecko messes with these attributes. The old
|
||
* src and href will be intact, this simply adds them to a separate attribute.
|
||
*
|
||
* <span class="attrib">@param</span> {string} s HTML string to replace src and href attributes in.
|
||
* <span class="attrib">@return</span> HTML string with replaced src and href attributes.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
storeAwayURLs : <span class="reserved">function</span>(s) {
|
||
<span class="comment">// Remove all mce_src, mce_href and replace them with new ones</span>
|
||
<span class="comment">// s = s.replace(new RegExp('mce_src\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');</span>
|
||
<span class="comment">// s = s.replace(new RegExp('mce_href\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');</span>
|
||
|
||
<span class="reserved">if</span> (!s.match(/(mce_src|mce_href)/gi, s)) {
|
||
s = s.replace(new RegExp(<span class="literal">'src\\s*=\\s*\"([^ >\"]*)\"'</span>, <span class="literal">'gi'</span>), <span class="literal">'src="$1" mce_src="$1"'</span>);
|
||
s = s.replace(new RegExp(<span class="literal">'href\\s*=\\s*\"([^ >\"]*)\"'</span>, <span class="literal">'gi'</span>), <span class="literal">'href="$1" mce_href="$1"'</span>);
|
||
}
|
||
|
||
<span class="reserved">return</span> s;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Removes any internal content inserted by regexps.
|
||
*
|
||
* <span class="attrib">@param</span> {DOMNode} n Node to remove internal content from.
|
||
*/</span>
|
||
_removeInternal : <span class="reserved">function</span>(n) {
|
||
<span class="reserved">if</span> (tinyMCE.isGecko) {
|
||
<span class="comment">// Remove mce_src from textnodes and comments</span>
|
||
tinyMCE.selectNodes(n, <span class="reserved">function</span>(n) {
|
||
<span class="reserved">if</span> (n.nodeType == 3 || n.nodeType == 8) {
|
||
n.nodeValue = n.nodeValue.replace(new RegExp(<span class="literal">'\\smce_src=\"[^\"]*\"'</span>, <span class="literal">'gi'</span>), <span class="literal">""</span>);
|
||
n.nodeValue = n.nodeValue.replace(new RegExp(<span class="literal">'\\smce_href=\"[^\"]*\"'</span>, <span class="literal">'gi'</span>), <span class="literal">""</span>);
|
||
}
|
||
|
||
<span class="reserved">return</span> false;
|
||
});
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Removes/disables TinyMCE built in form elements such as select boxes for font sizes etc.
|
||
* These are disabled when the user submits a form so they don't get picked up by the backend script
|
||
* that intercepts the contents.
|
||
*
|
||
* <span class="attrib">@param</span> {HTMLElement} form_obj Form object to loop through for TinyMCE specific form elements.
|
||
*/</span>
|
||
removeTinyMCEFormElements : <span class="reserved">function</span>(form_obj) {
|
||
<span class="comment">// Check if form is valid</span>
|
||
<span class="reserved">if</span> (typeof(form_obj) == <span class="literal">"undefined"</span> || form_obj == null)
|
||
<span class="reserved">return</span>;
|
||
|
||
<span class="comment">// If not a form, find the form</span>
|
||
<span class="reserved">if</span> (form_obj.nodeName != <span class="literal">"FORM"</span>) {
|
||
<span class="reserved">if</span> (form_obj.form)
|
||
form_obj = form_obj.form;
|
||
<span class="reserved">else</span>
|
||
form_obj = tinyMCE.getParentElement(form_obj, <span class="literal">"form"</span>);
|
||
}
|
||
|
||
<span class="comment">// Still nothing</span>
|
||
<span class="reserved">if</span> (form_obj == null)
|
||
<span class="reserved">return</span>;
|
||
|
||
<span class="comment">// Disable all UI form elements that TinyMCE created</span>
|
||
<span class="reserved">for</span> (var i=0; i<form_obj.elements.length; i++) {
|
||
var elementId = form_obj.elements[i].name ? form_obj.elements[i].name : form_obj.elements[i].id;
|
||
|
||
<span class="reserved">if</span> (elementId.indexOf(<span class="literal">'mce_editor_'</span>) == 0)
|
||
form_obj.elements[i].disabled = true;
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Event handler function that gets executed each time a event occurs in a TinyMCE editor control instance.
|
||
* Todo: Fix the return statements so they return true or false.
|
||
*
|
||
* <span class="attrib">@param</span> {DOMEvent} e DOM event object reference.
|
||
* <span class="attrib">@return</span> true - if the event is to be chained, false - if the event chain is to be canceled.
|
||
* <span class="attrib">@type</span> boolean
|
||
*/</span>
|
||
handleEvent : <span class="reserved">function</span>(e) {
|
||
var inst = tinyMCE.selectedInstance;
|
||
|
||
<span class="comment">// Remove odd, error</span>
|
||
<span class="reserved">if</span> (typeof(tinyMCE) == <span class="literal">"undefined"</span>)
|
||
<span class="reserved">return</span> true;
|
||
|
||
<span class="comment">//tinyMCE.debug(e.type + " " + e.target.nodeName + " " + (e.relatedTarget ? e.relatedTarget.nodeName : ""));</span>
|
||
|
||
<span class="reserved">if</span> (tinyMCE.executeCallback(tinyMCE.selectedInstance, <span class="literal">'handle_event_callback'</span>, <span class="literal">'handleEvent'</span>, e))
|
||
<span class="reserved">return</span> false;
|
||
|
||
switch (e.type) {
|
||
case <span class="literal">"beforedeactivate"</span>: <span class="comment">// Was added due to bug #1439953</span>
|
||
case <span class="literal">"blur"</span>:
|
||
<span class="reserved">if</span> (tinyMCE.selectedInstance)
|
||
tinyMCE.selectedInstance.execCommand(<span class="literal">'mceEndTyping'</span>);
|
||
|
||
tinyMCE.hideMenus();
|
||
|
||
<span class="reserved">return</span>;
|
||
|
||
<span class="comment">// Workaround for drag drop/copy paste base href bug</span>
|
||
case <span class="literal">"drop"</span>:
|
||
case <span class="literal">"beforepaste"</span>:
|
||
<span class="reserved">if</span> (tinyMCE.selectedInstance)
|
||
tinyMCE.selectedInstance.setBaseHREF(null);
|
||
|
||
window.setTimeout(<span class="literal">"tinyMCE.selectedInstance.setBaseHREF(tinyMCE.settings['base_href']);"</span>, 1);
|
||
<span class="reserved">return</span>;
|
||
|
||
case <span class="literal">"submit"</span>:
|
||
tinyMCE.removeTinyMCEFormElements(tinyMCE.isMSIE ? window.event.srcElement : e.target);
|
||
tinyMCE.triggerSave();
|
||
tinyMCE.isNotDirty = true;
|
||
<span class="reserved">return</span>;
|
||
|
||
case <span class="literal">"reset"</span>:
|
||
var formObj = tinyMCE.isMSIE ? window.event.srcElement : e.target;
|
||
|
||
<span class="reserved">for</span> (var i=0; i<document.forms.length; i++) {
|
||
<span class="reserved">if</span> (document.forms[i] == formObj)
|
||
window.setTimeout(<span class="literal">'tinyMCE.resetForm('</span> + i + <span class="literal">');'</span>, 10);
|
||
}
|
||
|
||
<span class="reserved">return</span>;
|
||
|
||
case <span class="literal">"keypress"</span>:
|
||
<span class="reserved">if</span> (inst && inst.handleShortcut(e))
|
||
<span class="reserved">return</span> false;
|
||
|
||
<span class="reserved">if</span> (e.target.editorId) {
|
||
tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];
|
||
} <span class="reserved">else</span> {
|
||
<span class="reserved">if</span> (e.target.ownerDocument.editorId)
|
||
tinyMCE.selectedInstance = tinyMCE.instances[e.target.ownerDocument.editorId];
|
||
}
|
||
|
||
<span class="reserved">if</span> (tinyMCE.selectedInstance)
|
||
tinyMCE.selectedInstance.switchSettings();
|
||
|
||
<span class="comment">// Insert P element</span>
|
||
<span class="reserved">if</span> (tinyMCE.isGecko && tinyMCE.settings[<span class="literal">'force_p_newlines'</span>] && e.keyCode == 13 && !e.shiftKey) {
|
||
<span class="comment">// Insert P element instead of BR</span>
|
||
<span class="reserved">if</span> (TinyMCE_ForceParagraphs._insertPara(tinyMCE.selectedInstance, e)) {
|
||
<span class="comment">// Cancel event</span>
|
||
tinyMCE.execCommand(<span class="literal">"mceAddUndoLevel"</span>);
|
||
tinyMCE.cancelEvent(e);
|
||
<span class="reserved">return</span> false;
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Handle backspace</span>
|
||
<span class="reserved">if</span> (tinyMCE.isGecko && tinyMCE.settings[<span class="literal">'force_p_newlines'</span>] && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {
|
||
<span class="comment">// Insert P element instead of BR</span>
|
||
<span class="reserved">if</span> (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {
|
||
<span class="comment">// Cancel event</span>
|
||
tinyMCE.execCommand(<span class="literal">"mceAddUndoLevel"</span>);
|
||
tinyMCE.cancelEvent(e);
|
||
<span class="reserved">return</span> false;
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Return key pressed</span>
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && tinyMCE.settings[<span class="literal">'force_br_newlines'</span>] && e.keyCode == 13) {
|
||
<span class="reserved">if</span> (e.target.editorId)
|
||
tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];
|
||
|
||
<span class="reserved">if</span> (tinyMCE.selectedInstance) {
|
||
var sel = tinyMCE.selectedInstance.getDoc().selection;
|
||
var rng = sel.createRange();
|
||
|
||
<span class="reserved">if</span> (tinyMCE.getParentElement(rng.parentElement(), <span class="literal">"li"</span>) != null)
|
||
<span class="reserved">return</span> false;
|
||
|
||
<span class="comment">// Cancel event</span>
|
||
e.returnValue = false;
|
||
e.cancelBubble = true;
|
||
|
||
<span class="comment">// Insert BR element</span>
|
||
rng.pasteHTML(<span class="literal">"<br />"</span>);
|
||
rng.collapse(false);
|
||
rng.select();
|
||
|
||
tinyMCE.execCommand(<span class="literal">"mceAddUndoLevel"</span>);
|
||
tinyMCE.triggerNodeChange(false);
|
||
<span class="reserved">return</span> false;
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Backspace or delete</span>
|
||
<span class="reserved">if</span> (e.keyCode == 8 || e.keyCode == 46) {
|
||
tinyMCE.selectedElement = e.target;
|
||
tinyMCE.linkElement = tinyMCE.getParentElement(e.target, <span class="literal">"a"</span>);
|
||
tinyMCE.imgElement = tinyMCE.getParentElement(e.target, <span class="literal">"img"</span>);
|
||
tinyMCE.triggerNodeChange(false);
|
||
}
|
||
|
||
<span class="reserved">return</span> false;
|
||
break;
|
||
|
||
case <span class="literal">"keyup"</span>:
|
||
case <span class="literal">"keydown"</span>:
|
||
tinyMCE.hideMenus();
|
||
tinyMCE.hasMouseMoved = false;
|
||
|
||
<span class="reserved">if</span> (inst && inst.handleShortcut(e))
|
||
<span class="reserved">return</span> false;
|
||
|
||
<span class="reserved">if</span> (e.target.editorId)
|
||
tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];
|
||
<span class="reserved">else</span>
|
||
<span class="reserved">return</span>;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.selectedInstance)
|
||
tinyMCE.selectedInstance.switchSettings();
|
||
|
||
var inst = tinyMCE.selectedInstance;
|
||
|
||
<span class="comment">// Handle backspace</span>
|
||
<span class="reserved">if</span> (tinyMCE.isGecko && tinyMCE.settings[<span class="literal">'force_p_newlines'</span>] && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {
|
||
<span class="comment">// Insert P element instead of BR</span>
|
||
<span class="reserved">if</span> (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {
|
||
<span class="comment">// Cancel event</span>
|
||
tinyMCE.execCommand(<span class="literal">"mceAddUndoLevel"</span>);
|
||
e.preventDefault();
|
||
<span class="reserved">return</span> false;
|
||
}
|
||
}
|
||
|
||
tinyMCE.selectedElement = null;
|
||
tinyMCE.selectedNode = null;
|
||
var elm = tinyMCE.selectedInstance.getFocusElement();
|
||
tinyMCE.linkElement = tinyMCE.getParentElement(elm, <span class="literal">"a"</span>);
|
||
tinyMCE.imgElement = tinyMCE.getParentElement(elm, <span class="literal">"img"</span>);
|
||
tinyMCE.selectedElement = elm;
|
||
|
||
<span class="comment">// Update visualaids on tabs</span>
|
||
<span class="reserved">if</span> (tinyMCE.isGecko && e.type == <span class="literal">"keyup"</span> && e.keyCode == 9)
|
||
tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings[<span class="literal">'visual'</span>], tinyMCE.selectedInstance);
|
||
|
||
<span class="comment">// Fix empty elements on return/enter, check where enter occured</span>
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && e.type == <span class="literal">"keydown"</span> && e.keyCode == 13)
|
||
tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement();
|
||
|
||
<span class="comment">// Fix empty elements on return/enter</span>
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && e.type == <span class="literal">"keyup"</span> && e.keyCode == 13) {
|
||
var elm = tinyMCE.enterKeyElement;
|
||
<span class="reserved">if</span> (elm) {
|
||
var re = new RegExp(<span class="literal">'^HR|IMG|BR$'</span>,<span class="literal">'g'</span>); <span class="comment">// Skip these</span>
|
||
var dre = new RegExp(<span class="literal">'^H[1-6]$'</span>,<span class="literal">'g'</span>); <span class="comment">// Add double on these</span>
|
||
|
||
<span class="reserved">if</span> (!elm.hasChildNodes() && !re.test(elm.nodeName)) {
|
||
<span class="reserved">if</span> (dre.test(elm.nodeName))
|
||
elm.innerHTML = <span class="literal">"&nbsp;&nbsp;"</span>;
|
||
<span class="reserved">else</span>
|
||
elm.innerHTML = <span class="literal">"&nbsp;"</span>;
|
||
}
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Check if it's a position key</span>
|
||
var keys = tinyMCE.posKeyCodes;
|
||
var posKey = false;
|
||
<span class="reserved">for</span> (var i=0; i<keys.length; i++) {
|
||
<span class="reserved">if</span> (keys[i] == e.keyCode) {
|
||
posKey = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
<span class="comment">// MSIE custom key handling</span>
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && tinyMCE.settings[<span class="literal">'custom_undo_redo'</span>]) {
|
||
var keys = new Array(8,46); <span class="comment">// Backspace,Delete</span>
|
||
<span class="reserved">for</span> (var i=0; i<keys.length; i++) {
|
||
<span class="reserved">if</span> (keys[i] == e.keyCode) {
|
||
<span class="reserved">if</span> (e.type == <span class="literal">"keyup"</span>)
|
||
tinyMCE.triggerNodeChange(false);
|
||
}
|
||
}
|
||
}
|
||
|
||
<span class="comment">// If Ctrl key</span>
|
||
<span class="reserved">if</span> (e.keyCode == 17)
|
||
<span class="reserved">return</span> true;
|
||
|
||
<span class="comment">// Handle Undo/Redo when typing content</span>
|
||
|
||
<span class="comment">// Start typing (non position key)</span>
|
||
<span class="reserved">if</span> (!posKey && e.type == <span class="literal">"keyup"</span>)
|
||
tinyMCE.execCommand(<span class="literal">"mceStartTyping"</span>);
|
||
|
||
<span class="comment">// Store undo bookmark</span>
|
||
<span class="reserved">if</span> (e.type == <span class="literal">"keydown"</span> && (posKey || e.ctrlKey) && inst)
|
||
inst.undoBookmark = inst.selection.getBookmark();
|
||
|
||
<span class="comment">// End typing (position key) or some Ctrl event</span>
|
||
<span class="reserved">if</span> (e.type == <span class="literal">"keyup"</span> && (posKey || e.ctrlKey))
|
||
tinyMCE.execCommand(<span class="literal">"mceEndTyping"</span>);
|
||
|
||
<span class="reserved">if</span> (posKey && e.type == <span class="literal">"keyup"</span>)
|
||
tinyMCE.triggerNodeChange(false);
|
||
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && e.ctrlKey)
|
||
window.setTimeout(<span class="literal">'tinyMCE.triggerNodeChange(false);'</span>, 1);
|
||
break;
|
||
|
||
case <span class="literal">"mousedown"</span>:
|
||
case <span class="literal">"mouseup"</span>:
|
||
case <span class="literal">"click"</span>:
|
||
case <span class="literal">"focus"</span>:
|
||
tinyMCE.hideMenus();
|
||
|
||
<span class="reserved">if</span> (tinyMCE.selectedInstance) {
|
||
tinyMCE.selectedInstance.switchSettings();
|
||
tinyMCE.selectedInstance.isFocused = true;
|
||
}
|
||
|
||
<span class="comment">// Check instance event trigged on</span>
|
||
var targetBody = tinyMCE.getParentElement(e.target, <span class="literal">"body"</span>);
|
||
<span class="reserved">for</span> (var instanceName in tinyMCE.instances) {
|
||
<span class="reserved">if</span> (!tinyMCE.isInstance(tinyMCE.instances[instanceName]))
|
||
continue;
|
||
|
||
var inst = tinyMCE.instances[instanceName];
|
||
|
||
<span class="comment">// Reset design mode if lost (on everything just in case)</span>
|
||
inst.autoResetDesignMode();
|
||
|
||
<span class="reserved">if</span> (inst.getBody() == targetBody) {
|
||
tinyMCE.selectedInstance = inst;
|
||
tinyMCE.selectedElement = e.target;
|
||
tinyMCE.linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, <span class="literal">"a"</span>);
|
||
tinyMCE.imgElement = tinyMCE.getParentElement(tinyMCE.selectedElement, <span class="literal">"img"</span>);
|
||
break;
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Add first bookmark location</span>
|
||
<span class="reserved">if</span> (!tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark)
|
||
tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark = tinyMCE.selectedInstance.selection.getBookmark();
|
||
|
||
<span class="reserved">if</span> (tinyMCE.isSafari) {
|
||
tinyMCE.selectedInstance.lastSafariSelection = tinyMCE.selectedInstance.selection.getBookmark();
|
||
tinyMCE.selectedInstance.lastSafariSelectedElement = tinyMCE.selectedElement;
|
||
|
||
var lnk = tinyMCE.getParentElement(tinyMCE.selectedElement, <span class="literal">"a"</span>);
|
||
|
||
<span class="comment">// Patch the darned link</span>
|
||
<span class="reserved">if</span> (lnk && e.type == <span class="literal">"mousedown"</span>) {
|
||
lnk.setAttribute(<span class="literal">"mce_real_href"</span>, lnk.getAttribute(<span class="literal">"href"</span>));
|
||
lnk.setAttribute(<span class="literal">"href"</span>, <span class="literal">"javascript:void(0);"</span>);
|
||
}
|
||
|
||
<span class="comment">// Patch back</span>
|
||
<span class="reserved">if</span> (lnk && e.type == <span class="literal">"click"</span>) {
|
||
window.setTimeout(<span class="reserved">function</span>() {
|
||
lnk.setAttribute(<span class="literal">"href"</span>, lnk.getAttribute(<span class="literal">"mce_real_href"</span>));
|
||
lnk.removeAttribute(<span class="literal">"mce_real_href"</span>);
|
||
}, 10);
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Reset selected node</span>
|
||
<span class="reserved">if</span> (e.type != <span class="literal">"focus"</span>)
|
||
tinyMCE.selectedNode = null;
|
||
|
||
tinyMCE.triggerNodeChange(false);
|
||
tinyMCE.execCommand(<span class="literal">"mceEndTyping"</span>);
|
||
|
||
<span class="reserved">if</span> (e.type == <span class="literal">"mouseup"</span>)
|
||
tinyMCE.execCommand(<span class="literal">"mceAddUndoLevel"</span>);
|
||
|
||
<span class="comment">// Just in case</span>
|
||
<span class="reserved">if</span> (!tinyMCE.selectedInstance && e.target.editorId)
|
||
tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];
|
||
|
||
<span class="reserved">return</span> false;
|
||
break;
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns the HTML code for a normal button control.
|
||
*
|
||
* <span class="attrib">@param</span> {string} id Button control id, this will be the suffix for the element id, the prefix is the editor id.
|
||
* <span class="attrib">@param</span> {string} lang Language variable key name to insert as the title/alt of the button image.
|
||
* <span class="attrib">@param</span> {string} img Image URL to insert, {$themeurl} and {$pluginurl} will be replaced.
|
||
* <span class="attrib">@param</span> {string} cmd Command to execute when the user clicks the button.
|
||
* <span class="attrib">@param</span> {string} ui Optional user interface boolean for command.
|
||
* <span class="attrib">@param</span> {string} val Optional value for command.
|
||
* <span class="attrib">@return</span> HTML code for a normal button based in input information.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
getButtonHTML : <span class="reserved">function</span>(id, lang, img, cmd, ui, val) {
|
||
var h = <span class="literal">''</span>, m, x;
|
||
|
||
cmd = <span class="literal">'tinyMCE.execInstanceCommand(\'</span>{$editor_id}\<span class="literal">',\'</span><span class="literal">' + cmd + '</span>\<span class="literal">''</span>;
|
||
|
||
<span class="reserved">if</span> (typeof(ui) != <span class="literal">"undefined"</span> && ui != null)
|
||
cmd += <span class="literal">','</span> + ui;
|
||
|
||
<span class="reserved">if</span> (typeof(val) != <span class="literal">"undefined"</span> && val != null)
|
||
cmd += <span class="literal">",'"</span> + val + <span class="literal">"'"</span>;
|
||
|
||
cmd += <span class="literal">');'</span>;
|
||
|
||
<span class="comment">// Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled</span>
|
||
<span class="reserved">if</span> (tinyMCE.getParam(<span class="literal">'button_tile_map'</span>) && (!tinyMCE.isMSIE || tinyMCE.isOpera) && (m = <span class="reserved">this</span>.buttonMap[id]) != null && (tinyMCE.getParam(<span class="literal">"language"</span>) == <span class="literal">"en"</span> || img.indexOf(<span class="literal">'$lang'</span>) == -1)) {
|
||
<span class="comment">// Tiled button</span>
|
||
x = 0 - (m * 20) == 0 ? <span class="literal">'0'</span> : 0 - (m * 20);
|
||
h += <span class="literal">'<a id="{$editor_id}_'</span> + id + <span class="literal">'" href="javascript:'</span> + cmd + <span class="literal">'" onclick="'</span> + cmd + <span class="literal">'return false;" onmousedown="return false;" class="mceTiledButton mceButtonNormal" target="_self">'</span>;
|
||
h += <span class="literal">'<img src="{$themeurl}/images/spacer.gif" style="background-position: '</span> + x + <span class="literal">'px 0" title="{$'</span> + lang + <span class="literal">'}" />'</span>;
|
||
h += <span class="literal">'</a>'</span>;
|
||
} <span class="reserved">else</span> {
|
||
<span class="comment">// Normal button</span>
|
||
h += <span class="literal">'<a id="{$editor_id}_'</span> + id + <span class="literal">'" href="javascript:'</span> + cmd + <span class="literal">'" onclick="'</span> + cmd + <span class="literal">'return false;" onmousedown="return false;" class="mceButtonNormal" target="_self">'</span>;
|
||
h += <span class="literal">'<img src="'</span> + img + <span class="literal">'" title="{$'</span> + lang + <span class="literal">'}" />'</span>;
|
||
h += <span class="literal">'</a>'</span>;
|
||
}
|
||
|
||
<span class="reserved">return</span> h;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Adds a list of buttons available in the tiled button image used by the button_tile_map option.
|
||
*
|
||
* <span class="attrib">@param</span> {string} m Comma separated list of buttons that are available in tiled image.
|
||
*/</span>
|
||
addButtonMap : <span class="reserved">function</span>(m) {
|
||
var i, a = m.replace(/\s+/, <span class="literal">''</span>).split(<span class="literal">','</span>);
|
||
|
||
<span class="reserved">for</span> (i=0; i<a.length; i++)
|
||
<span class="reserved">this</span>.buttonMap[a[i]] = i;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Piggyback onsubmit event handler function, this will remove/hide the TinyMCE specific form elements
|
||
* call triggerSave to fill the textarea with the correct contents then call the old piggy backed event handler.
|
||
*/</span>
|
||
submitPatch : <span class="reserved">function</span>() {
|
||
tinyMCE.removeTinyMCEFormElements(<span class="reserved">this</span>);
|
||
tinyMCE.triggerSave();
|
||
<span class="reserved">this</span>.mceOldSubmit();
|
||
tinyMCE.isNotDirty = true;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Gets executed when the page loads or get intitialized. This function will then convert all textareas/divs that
|
||
* is to be converted into TinyMCE editor controls.
|
||
*
|
||
* <span class="attrib">@return</span> true - if the event is to be chained, false - if the event chain is to be canceled.
|
||
* <span class="attrib">@type</span> boolean
|
||
*/</span>
|
||
onLoad : <span class="reserved">function</span>() {
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && !tinyMCE.isOpera && window.event.type == <span class="literal">"readystatechange"</span> && document.readyState != <span class="literal">"complete"</span>)
|
||
<span class="reserved">return</span> true;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.isLoaded)
|
||
<span class="reserved">return</span> true;
|
||
|
||
tinyMCE.isLoaded = true;
|
||
|
||
tinyMCE.dispatchCallback(null, <span class="literal">'onpageload'</span>, <span class="literal">'onPageLoad'</span>);
|
||
|
||
<span class="reserved">for</span> (var c=0; c<tinyMCE.configs.length; c++) {
|
||
tinyMCE.settings = tinyMCE.configs[c];
|
||
|
||
var selector = tinyMCE.getParam(<span class="literal">"editor_selector"</span>);
|
||
var deselector = tinyMCE.getParam(<span class="literal">"editor_deselector"</span>);
|
||
var elementRefAr = new Array();
|
||
|
||
<span class="comment">// Add submit triggers</span>
|
||
<span class="reserved">if</span> (document.forms && tinyMCE.settings[<span class="literal">'add_form_submit_trigger'</span>] && !tinyMCE.submitTriggers) {
|
||
<span class="reserved">for</span> (var i=0; i<document.forms.length; i++) {
|
||
var form = document.forms[i];
|
||
|
||
tinyMCE.addEvent(form, <span class="literal">"submit"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>.handleEvent);
|
||
tinyMCE.addEvent(form, <span class="literal">"reset"</span>, TinyMCE_Engine.<span class="reserved">prototype</span>.handleEvent);
|
||
tinyMCE.submitTriggers = true; <span class="comment">// Do it only once</span>
|
||
|
||
<span class="comment">// Patch the form.submit function</span>
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'submit_patch'</span>]) {
|
||
try {
|
||
form.mceOldSubmit = form.submit;
|
||
form.submit = TinyMCE_Engine.<span class="reserved">prototype</span>.submitPatch;
|
||
} catch (e) {
|
||
<span class="comment">// Do nothing</span>
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Add editor instances based on mode</span>
|
||
var mode = tinyMCE.settings[<span class="literal">'mode'</span>];
|
||
switch (mode) {
|
||
case <span class="literal">"exact"</span>:
|
||
var elements = tinyMCE.getParam(<span class="literal">'elements'</span>, <span class="literal">''</span>, true, <span class="literal">','</span>);
|
||
|
||
<span class="reserved">for</span> (var i=0; i<elements.length; i++) {
|
||
var element = tinyMCE._getElementById(elements[i]);
|
||
var trigger = element ? element.getAttribute(tinyMCE.settings[<span class="literal">'textarea_trigger'</span>]) : <span class="literal">""</span>;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.getAttrib(element, <span class="literal">"class"</span>).indexOf(deselector) != -1)
|
||
continue;
|
||
|
||
<span class="reserved">if</span> (trigger == <span class="literal">"false"</span>)
|
||
continue;
|
||
|
||
<span class="reserved">if</span> ((tinyMCE.settings[<span class="literal">'ask'</span>] || tinyMCE.settings[<span class="literal">'convert_on_click'</span>]) && element) {
|
||
elementRefAr[elementRefAr.length] = element;
|
||
continue;
|
||
}
|
||
|
||
<span class="reserved">if</span> (element)
|
||
tinyMCE.addMCEControl(element, elements[i]);
|
||
<span class="reserved">else</span> <span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'debug'</span>])
|
||
alert(<span class="literal">"Error: Could not find element by id or name: "</span> + elements[i]);
|
||
}
|
||
break;
|
||
|
||
case <span class="literal">"specific_textareas"</span>:
|
||
case <span class="literal">"textareas"</span>:
|
||
var nodeList = document.getElementsByTagName(<span class="literal">"textarea"</span>);
|
||
|
||
<span class="reserved">for</span> (var i=0; i<nodeList.length; i++) {
|
||
var elm = nodeList.item(i);
|
||
var trigger = elm.getAttribute(tinyMCE.settings[<span class="literal">'textarea_trigger'</span>]);
|
||
|
||
<span class="reserved">if</span> (selector != <span class="literal">''</span> && tinyMCE.getAttrib(elm, <span class="literal">"class"</span>).indexOf(selector) == -1)
|
||
continue;
|
||
|
||
<span class="reserved">if</span> (selector != <span class="literal">''</span>)
|
||
trigger = selector != <span class="literal">""</span> ? <span class="literal">"true"</span> : <span class="literal">""</span>;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.getAttrib(elm, <span class="literal">"class"</span>).indexOf(deselector) != -1)
|
||
continue;
|
||
|
||
<span class="reserved">if</span> ((mode == <span class="literal">"specific_textareas"</span> && trigger == <span class="literal">"true"</span>) || (mode == <span class="literal">"textareas"</span> && trigger != <span class="literal">"false"</span>))
|
||
elementRefAr[elementRefAr.length] = elm;
|
||
}
|
||
break;
|
||
}
|
||
|
||
<span class="reserved">for</span> (var i=0; i<elementRefAr.length; i++) {
|
||
var element = elementRefAr[i];
|
||
var elementId = element.name ? element.name : element.id;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'ask'</span>] || tinyMCE.settings[<span class="literal">'convert_on_click'</span>]) {
|
||
<span class="comment">// Focus breaks in Mozilla</span>
|
||
<span class="reserved">if</span> (tinyMCE.isGecko) {
|
||
var settings = tinyMCE.settings;
|
||
|
||
tinyMCE.addEvent(element, <span class="literal">"focus"</span>, <span class="reserved">function</span> (e) {window.setTimeout(<span class="reserved">function</span>() {TinyMCE_Engine.<span class="reserved">prototype</span>.confirmAdd(e, settings);}, 10);});
|
||
|
||
<span class="reserved">if</span> (element.nodeName != <span class="literal">"TEXTAREA"</span> && element.nodeName != <span class="literal">"INPUT"</span>)
|
||
tinyMCE.addEvent(element, <span class="literal">"click"</span>, <span class="reserved">function</span> (e) {window.setTimeout(<span class="reserved">function</span>() {TinyMCE_Engine.<span class="reserved">prototype</span>.confirmAdd(e, settings);}, 10);});
|
||
<span class="comment">// tinyMCE.addEvent(element, "mouseover", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});</span>
|
||
} <span class="reserved">else</span> {
|
||
var settings = tinyMCE.settings;
|
||
|
||
tinyMCE.addEvent(element, <span class="literal">"focus"</span>, <span class="reserved">function</span> () { TinyMCE_Engine.<span class="reserved">prototype</span>.confirmAdd(null, settings); });
|
||
tinyMCE.addEvent(element, <span class="literal">"click"</span>, <span class="reserved">function</span> () { TinyMCE_Engine.<span class="reserved">prototype</span>.confirmAdd(null, settings); });
|
||
<span class="comment">// tinyMCE.addEvent(element, "mouseenter", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });</span>
|
||
}
|
||
} <span class="reserved">else</span>
|
||
tinyMCE.addMCEControl(element, elementId);
|
||
}
|
||
|
||
<span class="comment">// Handle auto focus</span>
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'auto_focus'</span>]) {
|
||
window.setTimeout(<span class="reserved">function</span> () {
|
||
var inst = tinyMCE.getInstanceById(tinyMCE.settings[<span class="literal">'auto_focus'</span>]);
|
||
inst.selection.selectNode(inst.getBody(), true, true);
|
||
inst.contentWindow.focus();
|
||
}, 10);
|
||
}
|
||
|
||
tinyMCE.dispatchCallback(null, <span class="literal">'oninit'</span>, <span class="literal">'onInit'</span>);
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns true/false if a specific object is a TinyMCE_Control instance or not.
|
||
*
|
||
* <span class="attrib">@param</span> {object} o Object to check.
|
||
* <span class="attrib">@return</span> true/false if it's a control or not.
|
||
* <span class="attrib">@type</span> boolean
|
||
*/</span>
|
||
isInstance : <span class="reserved">function</span>(o) {
|
||
<span class="reserved">return</span> o != null && typeof(o) == <span class="literal">"object"</span> && o.isTinyMCE_Control;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns a specific configuration setting or the default value if it wasn't found.
|
||
*
|
||
* <span class="attrib">@param</span> {string} name Configuration setting to get.
|
||
* <span class="attrib">@param</span> {string} default_value Default value to return if it wasn't found.
|
||
* <span class="attrib">@param</span> {boolean} strip_whitespace Optional remove all whitespace.
|
||
* <span class="attrib">@param</span> {string} split_chr Split char/regex/string.
|
||
* <span class="attrib">@return</span> Number, string or other object based in parameter and default_value.
|
||
* <span class="attrib">@type</span> object
|
||
*/</span>
|
||
getParam : <span class="reserved">function</span>(name, default_value, strip_whitespace, split_chr) {
|
||
var value = (typeof(<span class="reserved">this</span>.settings[name]) == <span class="literal">"undefined"</span>) ? default_value : <span class="reserved">this</span>.settings[name];
|
||
|
||
<span class="comment">// Fix bool values</span>
|
||
<span class="reserved">if</span> (value == <span class="literal">"true"</span> || value == <span class="literal">"false"</span>)
|
||
<span class="reserved">return</span> (value == <span class="literal">"true"</span>);
|
||
|
||
<span class="reserved">if</span> (strip_whitespace)
|
||
value = tinyMCE.regexpReplace(value, <span class="literal">"[ \t\r\n]"</span>, <span class="literal">""</span>);
|
||
|
||
<span class="reserved">if</span> (typeof(split_chr) != <span class="literal">"undefined"</span> && split_chr != null) {
|
||
value = value.split(split_chr);
|
||
var outArray = new Array();
|
||
|
||
<span class="reserved">for</span> (var i=0; i<value.length; i++) {
|
||
<span class="reserved">if</span> (value[i] && value[i] != <span class="literal">""</span>)
|
||
outArray[outArray.length] = value[i];
|
||
}
|
||
|
||
value = outArray;
|
||
}
|
||
|
||
<span class="reserved">return</span> value;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns a language variable value from the language packs.
|
||
*
|
||
* <span class="attrib">@param</span> {string} name Name of the key to retrive.
|
||
* <span class="attrib">@param</span> {string} default_value Optional default value to return if it wasn't found.
|
||
* <span class="attrib">@param</span> {boolean} parse_entities Is HTML entities to be resolved or not.
|
||
* <span class="attrib">@param</span> {Array} va Optional name/value array of variables to replace in language string.
|
||
* <span class="attrib">@return</span> Language string value could be a number if it's a relative dimenstion.
|
||
* <span class="attrib">@type</span> object
|
||
*/</span>
|
||
getLang : <span class="reserved">function</span>(name, default_value, parse_entities, va) {
|
||
var v = (typeof(tinyMCELang[name]) == <span class="literal">"undefined"</span>) ? default_value : tinyMCELang[name], n;
|
||
|
||
<span class="reserved">if</span> (parse_entities)
|
||
v = tinyMCE.entityDecode(v);
|
||
|
||
<span class="reserved">if</span> (va) {
|
||
<span class="reserved">for</span> (n in va)
|
||
v = <span class="reserved">this</span>.replaceVar(v, n, va[n]);
|
||
}
|
||
|
||
<span class="reserved">return</span> v;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* HTML entity decode a string, replaces &lt; with <.
|
||
*
|
||
* <span class="attrib">@param</span> {string} s Entity string to decode into normal string.
|
||
* <span class="attrib">@return</span> Entity decoded string.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
entityDecode : <span class="reserved">function</span>(s) {
|
||
var e = document.createElement(<span class="literal">"div"</span>);
|
||
e.innerHTML = s;
|
||
<span class="reserved">return</span> e.innerHTML;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Adds language items to the global language array.
|
||
*
|
||
* <span class="attrib">@param</span> {string} prefix Prefix string to add infront of every array item before adding it.
|
||
* <span class="attrib">@param</span> {Array} ar Language item array to add to global language array.
|
||
*/</span>
|
||
addToLang : <span class="reserved">function</span>(prefix, ar) {
|
||
<span class="reserved">for</span> (var key in ar) {
|
||
<span class="reserved">if</span> (typeof(ar[key]) == <span class="literal">'function'</span>)
|
||
continue;
|
||
|
||
tinyMCELang[(key.indexOf(<span class="literal">'lang_'</span>) == -1 ? <span class="literal">'lang_'</span> : <span class="literal">''</span>) + (prefix != <span class="literal">''</span> ? (prefix + <span class="literal">"_"</span>) : <span class="literal">''</span>) + key] = ar[key];
|
||
}
|
||
|
||
<span class="comment">// for (var key in ar)</span>
|
||
<span class="comment">// tinyMCELang[(key.indexOf('lang_') == -1 ? 'lang_' : '') + (prefix != '' ? (prefix + "_") : '') + key] = "|" + ar[key] + "|";</span>
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Triggers a nodeChange event to every theme and plugin. This will be executed when the cursor moves or
|
||
* when a command that modifies the editor contents is executed.
|
||
*
|
||
* <span class="attrib">@param</span> {boolean} focus Optional state if the last selected editor instance is to be focused or not.
|
||
* <span class="attrib">@param</span> {boolean} setup_content Optional state if it's called from setup content function or not.
|
||
*/</span>
|
||
triggerNodeChange : <span class="reserved">function</span>(focus, setup_content) {
|
||
<span class="reserved">if</span> (tinyMCE.selectedInstance) {
|
||
var inst = tinyMCE.selectedInstance;
|
||
var editorId = inst.editorId;
|
||
var elm = (typeof(setup_content) != <span class="literal">"undefined"</span> && setup_content) ? tinyMCE.selectedElement : inst.getFocusElement();
|
||
var undoIndex = -1;
|
||
var undoLevels = -1;
|
||
var anySelection = false;
|
||
var selectedText = inst.selection.getSelectedText();
|
||
|
||
<span class="reserved">if</span> (setup_content && tinyMCE.isGecko && inst.isHidden())
|
||
elm = inst.getBody();
|
||
|
||
inst.switchSettings();
|
||
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">"auto_resize"</span>]) {
|
||
var doc = inst.getDoc();
|
||
|
||
inst.iframeElement.style.width = doc.body.offsetWidth + <span class="literal">"px"</span>;
|
||
inst.iframeElement.style.height = doc.body.offsetHeight + <span class="literal">"px"</span>;
|
||
}
|
||
|
||
<span class="reserved">if</span> (tinyMCE.selectedElement)
|
||
anySelection = (tinyMCE.selectedElement.nodeName.toLowerCase() == <span class="literal">"img"</span>) || (selectedText && selectedText.length > 0);
|
||
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'custom_undo_redo'</span>]) {
|
||
undoIndex = inst.undoRedo.undoIndex;
|
||
undoLevels = inst.undoRedo.undoLevels.length;
|
||
}
|
||
|
||
tinyMCE.dispatchCallback(inst, <span class="literal">'handle_node_change_callback'</span>, <span class="literal">'handleNodeChange'</span>, editorId, elm, undoIndex, undoLevels, inst.visualAid, anySelection, setup_content);
|
||
}
|
||
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.selectedInstance && (typeof(focus) == <span class="literal">"undefined"</span> || focus))
|
||
<span class="reserved">this</span>.selectedInstance.contentWindow.focus();
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Executes the custom cleanup functions on the specified content.
|
||
*
|
||
* <span class="attrib">@param</span> {TinyMCE_Control} inst TinyMCE editor control instance.
|
||
* <span class="attrib">@param</span> {string} type Event type to call.
|
||
* <span class="attrib">@param</span> {object} content DOM element or string to pass to handlers depending on type.
|
||
* <span class="attrib">@return</span> string or DOM element depending on type.
|
||
* <span class="attrib">@private</span>
|
||
*/</span>
|
||
_customCleanup : <span class="reserved">function</span>(inst, type, content) {
|
||
var pl, po, i;
|
||
|
||
<span class="comment">// Call custom cleanup</span>
|
||
var customCleanup = tinyMCE.settings[<span class="literal">'cleanup_callback'</span>];
|
||
<span class="reserved">if</span> (customCleanup != <span class="literal">""</span> && eval(<span class="literal">"typeof("</span> + customCleanup + <span class="literal">")"</span>) != <span class="literal">"undefined"</span>)
|
||
content = eval(customCleanup + <span class="literal">"(type, content, inst);"</span>);
|
||
|
||
<span class="comment">// Trigger plugin cleanups</span>
|
||
pl = inst.plugins;
|
||
<span class="reserved">for</span> (i=0; i<pl.length; i++) {
|
||
po = tinyMCE.plugins[pl[i]];
|
||
|
||
<span class="reserved">if</span> (po && po.cleanup)
|
||
content = po.cleanup(type, content, inst);
|
||
}
|
||
|
||
<span class="reserved">return</span> content;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Sets the HTML contents of the selected editor instance.
|
||
*
|
||
* <span class="attrib">@param</span> {string} h HTML contents to set in the selected instance.
|
||
* <span class="attrib">@deprecated</span>
|
||
*/</span>
|
||
setContent : <span class="reserved">function</span>(h) {
|
||
<span class="reserved">if</span> (tinyMCE.selectedInstance) {
|
||
tinyMCE.selectedInstance.execCommand(<span class="literal">'mceSetContent'</span>, false, h);
|
||
tinyMCE.selectedInstance.repaint();
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Loads a theme specific language pack.
|
||
*
|
||
* <span class="attrib">@param</span> {string} name Optional name of the theme to load language pack from.
|
||
*/</span>
|
||
importThemeLanguagePack : <span class="reserved">function</span>(name) {
|
||
<span class="reserved">if</span> (typeof(name) == <span class="literal">"undefined"</span>)
|
||
name = tinyMCE.settings[<span class="literal">'theme'</span>];
|
||
|
||
tinyMCE.loadScript(tinyMCE.baseURL + <span class="literal">'/themes/'</span> + name + <span class="literal">'/langs/'</span> + tinyMCE.settings[<span class="literal">'language'</span>] + <span class="literal">'.js'</span>);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Loads a plugin specific language pack.
|
||
*
|
||
* <span class="attrib">@param</span> {string} name Plugin name/id to load language pack for.
|
||
* <span class="attrib">@param</span> {string} valid_languages Comma separated list of valid languages for the plugin.
|
||
*/</span>
|
||
importPluginLanguagePack : <span class="reserved">function</span>(name, valid_languages) {
|
||
var lang = <span class="literal">"en"</span>, b = tinyMCE.baseURL + <span class="literal">'/plugins/'</span> + name;
|
||
|
||
valid_languages = valid_languages.split(<span class="literal">','</span>);
|
||
<span class="reserved">for</span> (var i=0; i<valid_languages.length; i++) {
|
||
<span class="reserved">if</span> (tinyMCE.settings[<span class="literal">'language'</span>] == valid_languages[i])
|
||
lang = tinyMCE.settings[<span class="literal">'language'</span>];
|
||
}
|
||
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.plugins[name])
|
||
b = <span class="reserved">this</span>.plugins[name].baseURL;
|
||
|
||
tinyMCE.loadScript(b + <span class="literal">'/langs/'</span> + lang + <span class="literal">'.js'</span>);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Replaces language, args and settings variables in a HTML string.
|
||
*
|
||
* <span class="attrib">@param</span> {string} h HTML string to replace language variables in.
|
||
* <span class="attrib">@param</span> {Array} as Optional arguments array to take variables from.
|
||
* <span class="attrib">@return</span> HTML string with replaced varliables.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
applyTemplate : <span class="reserved">function</span>(h, as) {
|
||
var i, s, ar = h.match(new RegExp(<span class="literal">'\\{\\$[a-z0-9_]+\\}'</span>, <span class="literal">'gi'</span>));
|
||
|
||
<span class="reserved">if</span> (ar && ar.length > 0) {
|
||
<span class="reserved">for</span> (i=ar.length-1; i>=0; i--) {
|
||
s = ar[i].substring(2, ar[i].length-1);
|
||
|
||
<span class="reserved">if</span> (s.indexOf(<span class="literal">'lang_'</span>) == 0 && tinyMCELang[s])
|
||
h = tinyMCE.replaceVar(h, s, tinyMCELang[s]);
|
||
<span class="reserved">else</span> <span class="reserved">if</span> (as && as[s])
|
||
h = tinyMCE.replaceVar(h, s, as[s]);
|
||
<span class="reserved">else</span> <span class="reserved">if</span> (tinyMCE.settings[s])
|
||
h = tinyMCE.replaceVar(h, s, tinyMCE.settings[s]);
|
||
}
|
||
}
|
||
|
||
h = tinyMCE.replaceVar(h, <span class="literal">"themeurl"</span>, tinyMCE.themeURL);
|
||
|
||
<span class="reserved">return</span> h;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Replaces a specific variable in the string with a nother string.
|
||
*
|
||
* <span class="attrib">@param</span> {string} h String to search in for the variable.
|
||
* <span class="attrib">@param</span> {string} r Variable name to search for.
|
||
* <span class="attrib">@param</span> {string} v Value to insert where a variable is found.
|
||
* <span class="attrib">@return</span> String with replaced variable.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
replaceVar : <span class="reserved">function</span>(h, r, v) {
|
||
<span class="reserved">return</span> h.replace(new RegExp(<span class="literal">'{\\\$'</span> + r + <span class="literal">'}'</span>, <span class="literal">'g'</span>), v);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Opens a popup window based in the specified input data. This function
|
||
* is used for all popup windows in TinyMCE.
|
||
*
|
||
* These are the current template keys: file, width, height, close_previous.
|
||
*
|
||
* <span class="attrib">@param</span> {Array} template Popup template data such as with, height etc.
|
||
* <span class="attrib">@param</span> {Array} args Popup arguments that is to be passed to the popup such as custom data.
|
||
*/</span>
|
||
openWindow : <span class="reserved">function</span>(template, args) {
|
||
var html, width, height, x, y, resizable, scrollbars, url;
|
||
|
||
args[<span class="literal">'mce_template_file'</span>] = template[<span class="literal">'file'</span>];
|
||
args[<span class="literal">'mce_width'</span>] = template[<span class="literal">'width'</span>];
|
||
args[<span class="literal">'mce_height'</span>] = template[<span class="literal">'height'</span>];
|
||
tinyMCE.windowArgs = args;
|
||
|
||
html = template[<span class="literal">'html'</span>];
|
||
<span class="reserved">if</span> (!(width = parseInt(template[<span class="literal">'width'</span>])))
|
||
width = 320;
|
||
|
||
<span class="reserved">if</span> (!(height = parseInt(template[<span class="literal">'height'</span>])))
|
||
height = 200;
|
||
|
||
<span class="comment">// Add to height in M$ due to SP2 WHY DON'T YOU GUYS IMPLEMENT innerWidth of windows!!</span>
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE)
|
||
height += 40;
|
||
<span class="reserved">else</span>
|
||
height += 20;
|
||
|
||
x = parseInt(screen.width / 2.0) - (width / 2.0);
|
||
y = parseInt(screen.height / 2.0) - (height / 2.0);
|
||
|
||
resizable = (args && args[<span class="literal">'resizable'</span>]) ? args[<span class="literal">'resizable'</span>] : <span class="literal">"no"</span>;
|
||
scrollbars = (args && args[<span class="literal">'scrollbars'</span>]) ? args[<span class="literal">'scrollbars'</span>] : <span class="literal">"no"</span>;
|
||
|
||
<span class="reserved">if</span> (template[<span class="literal">'file'</span>].charAt(0) != <span class="literal">'/'</span> && template[<span class="literal">'file'</span>].indexOf(<span class="literal">'://'</span>) == -1)
|
||
url = tinyMCE.baseURL + <span class="literal">"/themes/"</span> + tinyMCE.getParam(<span class="literal">"theme"</span>) + <span class="literal">"/"</span> + template[<span class="literal">'file'</span>];
|
||
<span class="reserved">else</span>
|
||
url = template[<span class="literal">'file'</span>];
|
||
|
||
<span class="comment">// Replace all args as variables in URL</span>
|
||
<span class="reserved">for</span> (var name in args) {
|
||
<span class="reserved">if</span> (typeof(args[name]) == <span class="literal">'function'</span>)
|
||
continue;
|
||
|
||
url = tinyMCE.replaceVar(url, name, escape(args[name]));
|
||
}
|
||
|
||
<span class="reserved">if</span> (html) {
|
||
html = tinyMCE.replaceVar(html, <span class="literal">"css"</span>, <span class="reserved">this</span>.settings[<span class="literal">'popups_css'</span>]);
|
||
html = tinyMCE.applyTemplate(html, args);
|
||
|
||
var win = window.open(<span class="literal">""</span>, <span class="literal">"mcePopup"</span> + new Date().getTime(), <span class="literal">"top="</span> + y + <span class="literal">",left="</span> + x + <span class="literal">",scrollbars="</span> + scrollbars + <span class="literal">",dialog=yes,minimizable="</span> + resizable + <span class="literal">",modal=yes,width="</span> + width + <span class="literal">",height="</span> + height + <span class="literal">",resizable="</span> + resizable);
|
||
<span class="reserved">if</span> (win == null) {
|
||
alert(tinyMCELang[<span class="literal">'lang_popup_blocked'</span>]);
|
||
<span class="reserved">return</span>;
|
||
}
|
||
|
||
win.document.write(html);
|
||
win.document.close();
|
||
win.resizeTo(width, height);
|
||
win.focus();
|
||
} <span class="reserved">else</span> {
|
||
<span class="reserved">if</span> ((tinyMCE.isMSIE && !tinyMCE.isOpera) && resizable != <span class="literal">'yes'</span> && tinyMCE.settings[<span class="literal">"dialog_type"</span>] == <span class="literal">"modal"</span>) {
|
||
height += 10;
|
||
|
||
var features = <span class="literal">"resizable:"</span> + resizable
|
||
+ <span class="literal">";scroll:"</span>
|
||
+ scrollbars + <span class="literal">";status:yes;center:yes;help:no;dialogWidth:"</span>
|
||
+ width + <span class="literal">"px;dialogHeight:"</span> + height + <span class="literal">"px;"</span>;
|
||
|
||
window.showModalDialog(url, window, features);
|
||
} <span class="reserved">else</span> {
|
||
var modal = (resizable == <span class="literal">"yes"</span>) ? <span class="literal">"no"</span> : <span class="literal">"yes"</span>;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.isGecko && tinyMCE.isMac)
|
||
modal = <span class="literal">"no"</span>;
|
||
|
||
<span class="reserved">if</span> (template[<span class="literal">'close_previous'</span>] != <span class="literal">"no"</span>)
|
||
try {tinyMCE.lastWindow.close();} catch (ex) {}
|
||
|
||
var win = window.open(url, <span class="literal">"mcePopup"</span> + new Date().getTime(), <span class="literal">"top="</span> + y + <span class="literal">",left="</span> + x + <span class="literal">",scrollbars="</span> + scrollbars + <span class="literal">",dialog="</span> + modal + <span class="literal">",minimizable="</span> + resizable + <span class="literal">",modal="</span> + modal + <span class="literal">",width="</span> + width + <span class="literal">",height="</span> + height + <span class="literal">",resizable="</span> + resizable);
|
||
<span class="reserved">if</span> (win == null) {
|
||
alert(tinyMCELang[<span class="literal">'lang_popup_blocked'</span>]);
|
||
<span class="reserved">return</span>;
|
||
}
|
||
|
||
<span class="reserved">if</span> (template[<span class="literal">'close_previous'</span>] != <span class="literal">"no"</span>)
|
||
tinyMCE.lastWindow = win;
|
||
|
||
eval(<span class="literal">'try { win.resizeTo(width, height); } catch(e) { }'</span>);
|
||
|
||
<span class="comment">// Make it bigger if statusbar is forced</span>
|
||
<span class="reserved">if</span> (tinyMCE.isGecko) {
|
||
<span class="reserved">if</span> (win.document.defaultView.statusbar.visible)
|
||
win.resizeBy(0, tinyMCE.isMac ? 10 : 24);
|
||
}
|
||
|
||
win.focus();
|
||
}
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Closes the specified window. This function is deprecated and should be replaced with
|
||
* tinyMCEPopup.close();.
|
||
*
|
||
* <span class="attrib">@param</span> {DOMWindow} win Window reference to close.
|
||
* <span class="attrib">@deprecated</span>
|
||
*/</span>
|
||
closeWindow : <span class="reserved">function</span>(win) {
|
||
win.close();
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns the visual aid class string, this will add/remove the visual aid class.
|
||
*
|
||
* <span class="attrib">@param</span> {string} class_name Class name value to add/remove visual aid classes from.
|
||
* <span class="attrib">@param</span> {boolean} state true/false if the classes should be added or removed.
|
||
* <span class="attrib">@return</span> New class value containing the visual aid classes or not.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
getVisualAidClass : <span class="reserved">function</span>(class_name, state) {
|
||
var aidClass = tinyMCE.settings[<span class="literal">'visual_table_class'</span>];
|
||
|
||
<span class="reserved">if</span> (typeof(state) == <span class="literal">"undefined"</span>)
|
||
state = tinyMCE.settings[<span class="literal">'visual'</span>];
|
||
|
||
<span class="comment">// Split</span>
|
||
var classNames = new Array();
|
||
var ar = class_name.split(<span class="literal">' '</span>);
|
||
<span class="reserved">for</span> (var i=0; i<ar.length; i++) {
|
||
<span class="reserved">if</span> (ar[i] == aidClass)
|
||
ar[i] = <span class="literal">""</span>;
|
||
|
||
<span class="reserved">if</span> (ar[i] != <span class="literal">""</span>)
|
||
classNames[classNames.length] = ar[i];
|
||
}
|
||
|
||
<span class="reserved">if</span> (state)
|
||
classNames[classNames.length] = aidClass;
|
||
|
||
<span class="comment">// Glue</span>
|
||
var className = <span class="literal">""</span>;
|
||
<span class="reserved">for</span> (var i=0; i<classNames.length; i++) {
|
||
<span class="reserved">if</span> (i > 0)
|
||
className += <span class="literal">" "</span>;
|
||
|
||
className += classNames[i];
|
||
}
|
||
|
||
<span class="reserved">return</span> className;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Adds visual aid classes to all elements that need them recursive in the DOM tree.
|
||
*
|
||
* <span class="attrib">@param</span> {HTMLElement} el HTML element to add visual aid classes to.
|
||
* <span class="attrib">@param</span> {boolean} deep Should they be added to all children aswell.
|
||
* <span class="attrib">@param</span> {boolean} state Should they be added or removed.
|
||
* <span class="attrib">@param</span> {TinyMCE_Control} inst TinyMCE editor control instance to add/remove them to/from.
|
||
*/</span>
|
||
handleVisualAid : <span class="reserved">function</span>(el, deep, state, inst, skip_dispatch) {
|
||
<span class="reserved">if</span> (!el)
|
||
<span class="reserved">return</span>;
|
||
|
||
<span class="reserved">if</span> (!skip_dispatch)
|
||
tinyMCE.dispatchCallback(inst, <span class="literal">'handle_visual_aid_callback'</span>, <span class="literal">'handleVisualAid'</span>, el, deep, state, inst);
|
||
|
||
var tableElement = null;
|
||
|
||
switch (el.nodeName) {
|
||
case <span class="literal">"TABLE"</span>:
|
||
var oldW = el.style.width;
|
||
var oldH = el.style.height;
|
||
var bo = tinyMCE.getAttrib(el, <span class="literal">"border"</span>);
|
||
|
||
bo = bo == <span class="literal">""</span> || bo == <span class="literal">"0"</span> ? true : false;
|
||
|
||
tinyMCE.setAttrib(el, <span class="literal">"class"</span>, tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el, <span class="literal">"class"</span>), state && bo));
|
||
|
||
el.style.width = oldW;
|
||
el.style.height = oldH;
|
||
|
||
<span class="reserved">for</span> (var y=0; y<el.rows.length; y++) {
|
||
<span class="reserved">for</span> (var x=0; x<el.rows[y].cells.length; x++) {
|
||
var cn = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el.rows[y].cells[x], <span class="literal">"class"</span>), state && bo);
|
||
tinyMCE.setAttrib(el.rows[y].cells[x], <span class="literal">"class"</span>, cn);
|
||
}
|
||
}
|
||
|
||
break;
|
||
|
||
case <span class="literal">"A"</span>:
|
||
var anchorName = tinyMCE.getAttrib(el, <span class="literal">"name"</span>);
|
||
|
||
<span class="reserved">if</span> (anchorName != <span class="literal">''</span> && state) {
|
||
el.title = anchorName;
|
||
el.className = <span class="literal">'mceItemAnchor'</span>;
|
||
} <span class="reserved">else</span> <span class="reserved">if</span> (anchorName != <span class="literal">''</span> && !state)
|
||
el.className = <span class="literal">''</span>;
|
||
|
||
break;
|
||
}
|
||
|
||
<span class="reserved">if</span> (deep && el.hasChildNodes()) {
|
||
<span class="reserved">for</span> (var i=0; i<el.childNodes.length; i++)
|
||
tinyMCE.handleVisualAid(el.childNodes[i], deep, state, inst, true);
|
||
}
|
||
},
|
||
|
||
<span class="comment">/*
|
||
applyClassesToFonts : function(doc, size) {
|
||
var f = doc.getElementsByTagName("font");
|
||
for (var i=0; i<f.length; i++) {
|
||
var s = tinyMCE.getAttrib(f[i], "size");
|
||
|
||
if (s != "")
|
||
tinyMCE.setAttrib(f[i], 'class', "mceItemFont" + s);
|
||
}
|
||
|
||
if (typeof(size) != "undefined") {
|
||
var css = "";
|
||
|
||
for (var x=0; x<doc.styleSheets.length; x++) {
|
||
for (var i=0; i<doc.styleSheets[x].rules.length; i++) {
|
||
if (doc.styleSheets[x].rules[i].selectorText == '#mceSpanFonts .mceItemFont' + size) {
|
||
css = doc.styleSheets[x].rules[i].style.cssText;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (css != "")
|
||
break;
|
||
}
|
||
|
||
if (doc.styleSheets[0].rules[0].selectorText == "FONT")
|
||
doc.styleSheets[0].removeRule(0);
|
||
|
||
doc.styleSheets[0].addRule("FONT", css, 0);
|
||
}
|
||
},
|
||
*/</span>
|
||
|
||
<span class="comment">/**
|
||
* Fixes a Gecko specific bug where href, src attribute values gets converted incorrectly
|
||
* when inserted into editor. This function will replace all src, href with mce_tsrc and mce_thref
|
||
* to keep the values from chaging when they get inserted.
|
||
*
|
||
* <span class="attrib">@param</span> {boolean} m Mode state, true is to replace the src, href attributes to mce_tsrc and mce_thref.
|
||
* <span class="attrib">@param</span> {HTMLElement} e HTML element to replace them in. (Will be used if m is 0)
|
||
* <span class="attrib">@param</span> {string} h HTML code to replace them in. (Will be used if m is 1)
|
||
* <span class="attrib">@return</span> Converted string or the specified HTML value depending on mode.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
fixGeckoBaseHREFBug : <span class="reserved">function</span>(m, e, h) {
|
||
var nl, i, a, n, xsrc, xhref, el;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.isGecko) {
|
||
<span class="reserved">if</span> (m == 1) {
|
||
h = h.replace(/\ssrc=/gi, <span class="literal">" mce_tsrc="</span>);
|
||
h = h.replace(/\shref=/gi, <span class="literal">" mce_thref="</span>);
|
||
|
||
<span class="reserved">return</span> h;
|
||
} <span class="reserved">else</span> {
|
||
el = new Array(<span class="literal">'a'</span>,<span class="literal">'img'</span>,<span class="literal">'select'</span>,<span class="literal">'area'</span>,<span class="literal">'iframe'</span>,<span class="literal">'base'</span>,<span class="literal">'input'</span>,<span class="literal">'script'</span>,<span class="literal">'embed'</span>,<span class="literal">'object'</span>,<span class="literal">'link'</span>);
|
||
|
||
<span class="reserved">for</span> (a=0; a<el.length; a++) {
|
||
n = e.getElementsByTagName(el[a]);
|
||
|
||
<span class="reserved">for</span> (i=0; i<n.length; i++) {
|
||
xsrc = tinyMCE.getAttrib(n[i], <span class="literal">"mce_tsrc"</span>);
|
||
xhref = tinyMCE.getAttrib(n[i], <span class="literal">"mce_thref"</span>);
|
||
|
||
<span class="reserved">if</span> (xsrc != <span class="literal">""</span>) {
|
||
try {
|
||
n[i].src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings[<span class="literal">'base_href'</span>], xsrc);
|
||
} catch (e) {
|
||
<span class="comment">// Ignore, Firefox cast exception if local file wasn't found</span>
|
||
}
|
||
|
||
n[i].removeAttribute(<span class="literal">"mce_tsrc"</span>);
|
||
}
|
||
|
||
<span class="reserved">if</span> (xhref != <span class="literal">""</span>) {
|
||
try {
|
||
n[i].href = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings[<span class="literal">'base_href'</span>], xhref);
|
||
} catch (e) {
|
||
<span class="comment">// Ignore, Firefox cast exception if local file wasn't found</span>
|
||
}
|
||
|
||
n[i].removeAttribute(<span class="literal">"mce_thref"</span>);
|
||
}
|
||
}
|
||
}
|
||
|
||
el = tinyMCE.selectNodes(e, <span class="reserved">function</span>(n) {
|
||
<span class="reserved">if</span> (n.nodeType == 3 || n.nodeType == 8) {
|
||
n.nodeValue = n.nodeValue.replace(/\smce_tsrc=/gi, <span class="literal">" src="</span>);
|
||
n.nodeValue = n.nodeValue.replace(/\smce_thref=/gi, <span class="literal">" href="</span>);
|
||
}
|
||
|
||
<span class="reserved">return</span> false;
|
||
});
|
||
}
|
||
}
|
||
|
||
<span class="reserved">return</span> h;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Sets the HTML code of a specific document.
|
||
* Todo: Try to merge/remove this one.
|
||
*
|
||
* <span class="attrib">@param</span> {DOMDocument} doc DOM document to set the HTML code in.
|
||
* <span class="attrib">@param</span> {string} html_content HTML contents to set in DOM document.
|
||
* <span class="attrib">@private</span>
|
||
*/</span>
|
||
_setHTML : <span class="reserved">function</span>(doc, html_content) {
|
||
<span class="comment">// Force closed anchors open</span>
|
||
<span class="comment">//html_content = html_content.replace(new RegExp('<a(.*?)/>', 'gi'), '<a$1></a>');</span>
|
||
|
||
html_content = tinyMCE.cleanupHTMLCode(html_content);
|
||
|
||
<span class="comment">// Try innerHTML if it fails use pasteHTML in MSIE</span>
|
||
try {
|
||
tinyMCE.setInnerHTML(doc.body, html_content);
|
||
} catch (e) {
|
||
<span class="reserved">if</span> (<span class="reserved">this</span>.isMSIE)
|
||
doc.body.createTextRange().pasteHTML(html_content);
|
||
}
|
||
|
||
<span class="comment">// Content duplication bug fix</span>
|
||
<span class="reserved">if</span> (tinyMCE.isMSIE && tinyMCE.settings[<span class="literal">'fix_content_duplication'</span>]) {
|
||
<span class="comment">// Remove P elements in P elements</span>
|
||
var paras = doc.getElementsByTagName(<span class="literal">"P"</span>);
|
||
<span class="reserved">for</span> (var i=0; i<paras.length; i++) {
|
||
var node = paras[i];
|
||
<span class="reserved">while</span> ((node = node.parentNode) != null) {
|
||
<span class="reserved">if</span> (node.nodeName == <span class="literal">"P"</span>)
|
||
node.outerHTML = node.innerHTML;
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Content duplication bug fix (Seems to be word crap)</span>
|
||
var html = doc.body.innerHTML;
|
||
<span class="comment">/*
|
||
if (html.indexOf('="mso') != -1) {
|
||
for (var i=0; i<doc.body.all.length; i++) {
|
||
var el = doc.body.all[i];
|
||
el.removeAttribute("className","",0);
|
||
el.removeAttribute("style","",0);
|
||
}
|
||
|
||
html = doc.body.innerHTML;
|
||
html = tinyMCE.regexpReplace(html, "<o:p><\/o:p>", "<br />");
|
||
html = tinyMCE.regexpReplace(html, "<o:p>&nbsp;<\/o:p>", "");
|
||
html = tinyMCE.regexpReplace(html, "<st1:.*?>", "");
|
||
html = tinyMCE.regexpReplace(html, "<p><\/p>", "");
|
||
html = tinyMCE.regexpReplace(html, "<p><\/p>\r\n<p><\/p>", "");
|
||
html = tinyMCE.regexpReplace(html, "<p>&nbsp;<\/p>", "<br />");
|
||
html = tinyMCE.regexpReplace(html, "<p>\s*(<p>\s*)?", "<p>");
|
||
html = tinyMCE.regexpReplace(html, "<\/p>\s*(<\/p>\s*)?", "</p>");
|
||
}*/</span>
|
||
|
||
<span class="comment">// Always set the htmlText output</span>
|
||
tinyMCE.setInnerHTML(doc.body, html);
|
||
}
|
||
|
||
tinyMCE.cleanupAnchors(doc);
|
||
|
||
<span class="reserved">if</span> (tinyMCE.getParam(<span class="literal">"convert_fonts_to_spans"</span>))
|
||
tinyMCE.convertSpansToFonts(doc);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns the editor instance id of a specific form element.
|
||
*
|
||
* <span class="attrib">@param</span> {string} form_element Form element name to get instance id for.
|
||
* <span class="attrib">@return</span> TinyMCE editor instance id or null if it wasn't found.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
getEditorId : <span class="reserved">function</span>(form_element) {
|
||
var inst = <span class="reserved">this</span>.getInstanceById(form_element);
|
||
<span class="reserved">if</span> (!inst)
|
||
<span class="reserved">return</span> null;
|
||
|
||
<span class="reserved">return</span> inst.editorId;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns a TinyMCE editor instance by the specified editor id or null if it wasn't found.
|
||
*
|
||
* <span class="attrib">@param</span> {string} editor_id Editor id to get instance for.
|
||
* <span class="attrib">@return</span> TinyMCE editor control instance or null if it wasn't found.
|
||
* <span class="attrib">@type</span> TinyMCE_Control
|
||
*/</span>
|
||
getInstanceById : <span class="reserved">function</span>(editor_id) {
|
||
var inst = <span class="reserved">this</span>.instances[editor_id];
|
||
<span class="reserved">if</span> (!inst) {
|
||
<span class="reserved">for</span> (var n in tinyMCE.instances) {
|
||
var instance = tinyMCE.instances[n];
|
||
<span class="reserved">if</span> (!tinyMCE.isInstance(instance))
|
||
continue;
|
||
|
||
<span class="reserved">if</span> (instance.formTargetElementId == editor_id) {
|
||
inst = instance;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
<span class="reserved">return</span> inst;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Queries a command value for a specific command on a specific editor instance.
|
||
*
|
||
* <span class="attrib">@param</span> {string} editor_id Editor id to query command value on.
|
||
* <span class="attrib">@param</span> {string} command Command to query for.
|
||
* <span class="attrib">@return</span> Command value passed from browser.
|
||
* <span class="attrib">@type</span> object
|
||
*/</span>
|
||
queryInstanceCommandValue : <span class="reserved">function</span>(editor_id, command) {
|
||
var inst = tinyMCE.getInstanceById(editor_id);
|
||
<span class="reserved">if</span> (inst)
|
||
<span class="reserved">return</span> inst.queryCommandValue(command);
|
||
|
||
<span class="reserved">return</span> false;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Queries a command state for a specific command on a specific editor instance.
|
||
*
|
||
* <span class="attrib">@param</span> {string} editor_id Editor id to query command state on.
|
||
* <span class="attrib">@param</span> {string} command Command to query for.
|
||
* <span class="attrib">@return</span> Command state passed from browser.
|
||
* <span class="attrib">@type</span> boolean
|
||
*/</span>
|
||
queryInstanceCommandState : <span class="reserved">function</span>(editor_id, command) {
|
||
var inst = tinyMCE.getInstanceById(editor_id);
|
||
<span class="reserved">if</span> (inst)
|
||
<span class="reserved">return</span> inst.queryCommandState(command);
|
||
|
||
<span class="reserved">return</span> null;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Sets the window argument to be passed to TinyMCE popup.
|
||
*
|
||
* <span class="attrib">@param</span> {string} n Window argument name.
|
||
* <span class="attrib">@param</span> {string} v Window argument value.
|
||
*/</span>
|
||
setWindowArg : <span class="reserved">function</span>(n, v) {
|
||
<span class="reserved">this</span>.windowArgs[n] = v;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns the window argument to be passed to TinyMCE popup.
|
||
* Use: tinyMCEPopup.getWindowArg instead.
|
||
*
|
||
* <span class="attrib">@param</span> {string} n Window argument name.
|
||
* <span class="attrib">@return</span> Argument value or default value if it wasn't found.
|
||
* <span class="attrib">@deprecated</span>
|
||
*/</span>
|
||
getWindowArg : <span class="reserved">function</span>(n, d) {
|
||
<span class="reserved">return</span> (typeof(<span class="reserved">this</span>.windowArgs[n]) == <span class="literal">"undefined"</span>) ? d : <span class="reserved">this</span>.windowArgs[n];
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns a array of CSS classes that is available in a document.
|
||
* Todo: Fix this one, it's so ugly. :)
|
||
*
|
||
* <span class="attrib">@param</span> {string} editor_id Editor id to get CSS classes from.
|
||
* <span class="attrib">@param</span> {DOMDocument} doc DOM document to get the CSS classes from.
|
||
* <span class="attrib">@return</span> Array of CSS classes that is available in a document.
|
||
* <span class="attrib">@type</span> Array
|
||
*/</span>
|
||
getCSSClasses : <span class="reserved">function</span>(editor_id, doc) {
|
||
var output = new Array();
|
||
|
||
<span class="comment">// Is cached, use that</span>
|
||
<span class="reserved">if</span> (typeof(tinyMCE.cssClasses) != <span class="literal">"undefined"</span>)
|
||
<span class="reserved">return</span> tinyMCE.cssClasses;
|
||
|
||
<span class="reserved">if</span> (typeof(editor_id) == <span class="literal">"undefined"</span> && typeof(doc) == <span class="literal">"undefined"</span>) {
|
||
var instance;
|
||
|
||
<span class="reserved">for</span> (var instanceName in tinyMCE.instances) {
|
||
instance = tinyMCE.instances[instanceName];
|
||
<span class="reserved">if</span> (!tinyMCE.isInstance(instance))
|
||
continue;
|
||
|
||
break;
|
||
}
|
||
|
||
doc = instance.getDoc();
|
||
}
|
||
|
||
<span class="reserved">if</span> (typeof(doc) == <span class="literal">"undefined"</span>) {
|
||
var instance = tinyMCE.getInstanceById(editor_id);
|
||
doc = instance.getDoc();
|
||
}
|
||
|
||
<span class="reserved">if</span> (doc) {
|
||
var styles = doc.styleSheets;
|
||
|
||
<span class="reserved">if</span> (styles && styles.length > 0) {
|
||
<span class="reserved">for</span> (var x=0; x<styles.length; x++) {
|
||
var csses = null;
|
||
|
||
<span class="comment">// Just ignore any errors</span>
|
||
eval(<span class="literal">"try {var csses = tinyMCE.isMSIE ? doc.styleSheets("</span> + x + <span class="literal">").rules : styles["</span> + x + <span class="literal">"].cssRules;} catch(e) {}"</span>);
|
||
<span class="reserved">if</span> (!csses)
|
||
<span class="reserved">return</span> new Array();
|
||
|
||
<span class="reserved">for</span> (var i=0; i<csses.length; i++) {
|
||
var selectorText = csses[i].selectorText;
|
||
|
||
<span class="comment">// Can be multiple rules per selector</span>
|
||
<span class="reserved">if</span> (selectorText) {
|
||
var rules = selectorText.split(<span class="literal">','</span>);
|
||
<span class="reserved">for</span> (var c=0; c<rules.length; c++) {
|
||
var rule = rules[c];
|
||
|
||
<span class="comment">// Strip spaces between selectors</span>
|
||
<span class="reserved">while</span> (rule.indexOf(<span class="literal">' '</span>) == 0)
|
||
rule = rule.substring(1);
|
||
|
||
<span class="comment">// Invalid rule</span>
|
||
<span class="reserved">if</span> (rule.indexOf(<span class="literal">' '</span>) != -1 || rule.indexOf(<span class="literal">':'</span>) != -1 || rule.indexOf(<span class="literal">'mceItem'</span>) != -1)
|
||
continue;
|
||
|
||
<span class="reserved">if</span> (rule.indexOf(tinyMCE.settings[<span class="literal">'visual_table_class'</span>]) != -1 || rule.indexOf(<span class="literal">'mceEditable'</span>) != -1 || rule.indexOf(<span class="literal">'mceNonEditable'</span>) != -1)
|
||
continue;
|
||
|
||
<span class="comment">// Is class rule</span>
|
||
<span class="reserved">if</span> (rule.indexOf(<span class="literal">'.'</span>) != -1) {
|
||
var cssClass = rule.substring(rule.indexOf(<span class="literal">'.'</span>) + 1);
|
||
var addClass = true;
|
||
|
||
<span class="reserved">for</span> (var p=0; p<output.length && addClass; p++) {
|
||
<span class="reserved">if</span> (output[p] == cssClass)
|
||
addClass = false;
|
||
}
|
||
|
||
<span class="reserved">if</span> (addClass)
|
||
output[output.length] = cssClass;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
<span class="comment">// Cache em</span>
|
||
<span class="reserved">if</span> (output.length > 0)
|
||
tinyMCE.cssClasses = output;
|
||
|
||
<span class="reserved">return</span> output;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Regexp replaces the contents of a string. Use normal replace instead.
|
||
*
|
||
* <span class="attrib">@param</span> {string} in_str String to replace in.
|
||
* <span class="attrib">@param</span> {string} reg_exp Regexp to replace.
|
||
* <span class="attrib">@param</span> {string} replace_str String to replace with.
|
||
* <span class="attrib">@param</span> {string} in_str Optional regexp options like "gi".
|
||
* <span class="attrib">@return</span> Replaced string value.
|
||
* <span class="attrib">@type</span> string
|
||
* <span class="attrib">@deprecated</span>
|
||
*/</span>
|
||
regexpReplace : <span class="reserved">function</span>(in_str, reg_exp, replace_str, opts) {
|
||
<span class="reserved">if</span> (in_str == null)
|
||
<span class="reserved">return</span> in_str;
|
||
|
||
<span class="reserved">if</span> (typeof(opts) == <span class="literal">"undefined"</span>)
|
||
opts = <span class="literal">'g'</span>;
|
||
|
||
var re = new RegExp(reg_exp, opts);
|
||
<span class="reserved">return</span> in_str.replace(re, replace_str);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Removes all prefix, suffix whitespace of a string.
|
||
*
|
||
* <span class="attrib">@param</span> {string} s String to replace whitespace in.
|
||
* <span class="attrib">@return</span> Replaced string value.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
trim : <span class="reserved">function</span>(s) {
|
||
<span class="reserved">return</span> s.replace(/^\s*|\s*$/g, <span class="literal">""</span>);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Removes MSIE 5.5 specific event wrapper function form a event string.
|
||
* This will also remove the event blocker if it's added in front of the event.
|
||
*
|
||
* <span class="attrib">@param</span> {string} s String to replace event data in.
|
||
* <span class="attrib">@return</span> Replaced string value.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
cleanupEventStr : <span class="reserved">function</span>(s) {
|
||
s = <span class="literal">""</span> + s;
|
||
s = s.replace(<span class="literal">'function anonymous()\n{\n'</span>, <span class="literal">''</span>);
|
||
s = s.replace(<span class="literal">'\n}'</span>, <span class="literal">''</span>);
|
||
s = s.replace(/^<span class="reserved">return</span> true;/gi, <span class="literal">''</span>); <span class="comment">// Remove event blocker</span>
|
||
|
||
<span class="reserved">return</span> s;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Returns the HTML for the specified control this will loop through
|
||
* the theme and all plugins inorder to find the control. The callback for each
|
||
* theme and plugin is called getControlHTML.
|
||
*
|
||
* <span class="attrib">@param</span> {string} c Control name/id to get HTML code for.
|
||
* <span class="attrib">@return</span> HTML code for the specified control or empty string if it wasn't found.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
getControlHTML : <span class="reserved">function</span>(c) {
|
||
var i, l, n, o, v;
|
||
|
||
l = tinyMCE.plugins;
|
||
<span class="reserved">for</span> (n in l) {
|
||
o = l[n];
|
||
|
||
<span class="reserved">if</span> (o.getControlHTML && (v = o.getControlHTML(c)) != <span class="literal">''</span>)
|
||
<span class="reserved">return</span> tinyMCE.replaceVar(v, <span class="literal">"pluginurl"</span>, o.baseURL);
|
||
}
|
||
|
||
o = tinyMCE.themes[tinyMCE.settings[<span class="literal">'theme'</span>]];
|
||
<span class="reserved">if</span> (o.getControlHTML && (v = o.getControlHTML(c)) != <span class="literal">''</span>)
|
||
<span class="reserved">return</span> v;
|
||
|
||
<span class="reserved">return</span> <span class="literal">''</span>;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Evaluates the specified function and uses the array of arguments.
|
||
*
|
||
* <span class="attrib">@param</span> {string} f Function reference to execute.
|
||
* <span class="attrib">@param</span> {int} idx Index in array to start grabbing arguments from.
|
||
* <span class="attrib">@param</span> {Array} a Array of function arguments.
|
||
* <span class="attrib">@return</span> Value returned from the evaluated function.
|
||
* <span class="attrib">@type</span> object
|
||
*/</span>
|
||
evalFunc : <span class="reserved">function</span>(f, idx, a) {
|
||
var s = <span class="literal">'('</span>, i;
|
||
|
||
<span class="reserved">for</span> (i=idx; i<a.length; i++) {
|
||
s += <span class="literal">'a['</span> + i + <span class="literal">']'</span>;
|
||
|
||
<span class="reserved">if</span> (i < a.length-1)
|
||
s += <span class="literal">','</span>;
|
||
}
|
||
|
||
s += <span class="literal">');'</span>;
|
||
|
||
<span class="reserved">return</span> eval(<span class="literal">"f"</span> + s);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Dispatches the specified callback on all options, plugins and themes. This will not
|
||
* chain them, so all functions callbacks will be executed regardless if the return true/false.
|
||
*
|
||
* <span class="attrib">@param</span> {TinyMCE_Control} i TinyMCE editor control instance to execute callback on.
|
||
* <span class="attrib">@param</span> {string} p TinyMCE callback parameter to execute.
|
||
* <span class="attrib">@param</span> {string} n Function name to execute.
|
||
* <span class="attrib">@return</span> true/false if they where dispatched.
|
||
*/</span>
|
||
dispatchCallback : <span class="reserved">function</span>(i, p, n) {
|
||
<span class="reserved">return</span> <span class="reserved">this</span>.callFunc(i, p, n, 0, <span class="reserved">this</span>.dispatchCallback.arguments);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Executes the specified callback on all options, plugins and themes. This will
|
||
* chain them, so callback chain will be broken if one function returns false.
|
||
*
|
||
* <span class="attrib">@param</span> {TinyMCE_Control} i TinyMCE editor control instance to execute callback on.
|
||
* <span class="attrib">@param</span> {string} p TinyMCE callback parameter to execute.
|
||
* <span class="attrib">@param</span> {string} n Function name to execute.
|
||
* <span class="attrib">@return</span> true/false if a callback was executed.
|
||
*/</span>
|
||
executeCallback : <span class="reserved">function</span>(i, p, n) {
|
||
<span class="reserved">return</span> <span class="reserved">this</span>.callFunc(i, p, n, 1, <span class="reserved">this</span>.executeCallback.arguments);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Executes the specified execcommand callback on all options, plugins and themes. This will
|
||
* chain them, so callback chain will be broken if one function returns true.
|
||
*
|
||
* <span class="attrib">@param</span> {TinyMCE_Control} i TinyMCE editor control instance to execute callback on.
|
||
* <span class="attrib">@param</span> {string} p TinyMCE callback parameter to execute.
|
||
* <span class="attrib">@param</span> {string} n Function name to execute.
|
||
* <span class="attrib">@return</span> true/false if a callback was executed.
|
||
*/</span>
|
||
execCommandCallback : <span class="reserved">function</span>(i, p, n) {
|
||
<span class="reserved">return</span> <span class="reserved">this</span>.callFunc(i, p, n, 2, <span class="reserved">this</span>.execCommandCallback.arguments);
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Executes callback chain. Callback order: Option, Plugins, Themes.
|
||
*
|
||
* <span class="attrib">@param</span> {TinyMCE_Control} ins TinyMCE editor control instance to execute callback on.
|
||
* <span class="attrib">@param</span> {string} p TinyMCE callback parameter name.
|
||
* <span class="attrib">@param</span> {string} n Function name to execute.
|
||
* <span class="attrib">@param</span> {int} m Execution mode value, 0 = no chain, 1 = event chain, 2 = execcommand chain.
|
||
* <span class="attrib">@param</span> {Array} a Array with function arguments.
|
||
* <span class="attrib">@return</span> true - if the callback was executed, false if it wasn't.
|
||
* <span class="attrib">@type</span> boolean
|
||
*/</span>
|
||
callFunc : <span class="reserved">function</span>(ins, p, n, m, a) {
|
||
var l, i, on, o, s, v;
|
||
|
||
s = m == 2;
|
||
|
||
l = tinyMCE.getParam(p, <span class="literal">''</span>);
|
||
|
||
<span class="reserved">if</span> (l != <span class="literal">''</span> && (v = tinyMCE.evalFunc(typeof(l) == <span class="literal">"function"</span> ? l : eval(l), 3, a)) == s && m > 0)
|
||
<span class="reserved">return</span> true;
|
||
|
||
<span class="reserved">if</span> (ins != null) {
|
||
<span class="reserved">for</span> (i=0, l = ins.plugins; i<l.length; i++) {
|
||
o = tinyMCE.plugins[l[i]];
|
||
|
||
<span class="reserved">if</span> (o[n] && (v = tinyMCE.evalFunc(o[n], 3, a)) == s && m > 0)
|
||
<span class="reserved">return</span> true;
|
||
}
|
||
}
|
||
|
||
l = tinyMCE.themes;
|
||
<span class="reserved">for</span> (on in l) {
|
||
o = l[on];
|
||
|
||
<span class="reserved">if</span> (o[n] && (v = tinyMCE.evalFunc(o[n], 3, a)) == s && m > 0)
|
||
<span class="reserved">return</span> true;
|
||
}
|
||
|
||
<span class="reserved">return</span> false;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Encodes the string to raw XML entities. This will only convert the most common ones.
|
||
* For real entity encoding use the xmlEncode method of the Cleanup class.
|
||
*
|
||
* <span class="attrib">@param</span> {string} s String to encode.
|
||
* <span class="attrib">@return</span> XML Encoded string.
|
||
* <span class="attrib">@type</span> string
|
||
*/</span>
|
||
xmlEncode : <span class="reserved">function</span>(s) {
|
||
s = <span class="literal">""</span> + s;
|
||
s = s.replace(/&/g, <span class="literal">'&amp;'</span>);
|
||
s = s.replace(new RegExp(<span class="literal">'"'</span>, <span class="literal">'g'</span>), <span class="literal">'&quot;'</span>);
|
||
s = s.replace(/\<span class="literal">'/g, '</span>&#39;<span class="literal">'); // &apos; is not working in MSIE
|
||
s = s.replace(/</g, '</span>&lt;<span class="literal">');
|
||
s = s.replace(/>/g, '</span>&gt;');
|
||
|
||
<span class="reserved">return</span> s;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Extends the specified prototype with new methods.
|
||
*
|
||
* <span class="attrib">@param</span> {Object} p Prototype to extend with new methods.
|
||
* <span class="attrib">@param</span> {Object} np New prototype to extend the other one with.
|
||
* <span class="attrib">@return</span> Extended prototype array.
|
||
* <span class="attrib">@type</span> Object
|
||
*/</span>
|
||
extend : <span class="reserved">function</span>(p, np) {
|
||
var o = {};
|
||
|
||
o.parent = p;
|
||
|
||
<span class="reserved">for</span> (n in p)
|
||
o[n] = p[n];
|
||
|
||
<span class="reserved">for</span> (n in np)
|
||
o[n] = np[n];
|
||
|
||
<span class="reserved">return</span> o;
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Hides any visible menu layers.
|
||
*
|
||
* <span class="attrib">@private</span>
|
||
*/</span>
|
||
hideMenus : <span class="reserved">function</span>() {
|
||
var e = tinyMCE.lastSelectedMenuBtn;
|
||
|
||
<span class="reserved">if</span> (tinyMCE.lastMenu) {
|
||
tinyMCE.lastMenu.hide();
|
||
tinyMCE.lastMenu = null;
|
||
}
|
||
|
||
<span class="reserved">if</span> (e) {
|
||
tinyMCE.switchClass(e, tinyMCE.lastMenuBtnClass);
|
||
tinyMCE.lastSelectedMenuBtn = null;
|
||
}
|
||
},
|
||
|
||
<span class="comment">/**
|
||
* Splits a string by the specified delimiter and skips any empty items.
|
||
*
|
||
* <span class="attrib">@param</span> {string} d Delimiter to split by.
|
||
* <span class="attrib">@param</span> {string} s String to split.
|
||
* <span class="attrib">@return</span> Array with chunks from string.
|
||
* <span class="attrib">@type</span> Array
|
||
*/</span>
|
||
explode : <span class="reserved">function</span>(d, s) {
|
||
var ar = s.split(d), oar = new Array(), i;
|
||
|
||
<span class="reserved">for</span> (i = 0; i<ar.length; i++) {
|
||
<span class="reserved">if</span> (ar[i] != <span class="literal">""</span>)
|
||
oar[oar.length] = ar[i];
|
||
}
|
||
|
||
<span class="reserved">return</span> oar;
|
||
}
|
||
};
|
||
|
||
<span class="comment">// Global instances</span>
|
||
var TinyMCE = TinyMCE_Engine; <span class="comment">// Compatiblity with gzip compressors</span>
|
||
var tinyMCE = new TinyMCE_Engine();
|
||
var tinyMCELang = {};
|
||
</pre>
|
||
<hr>
|
||
|
||
|
||
|
||
<!-- ========== START OF NAVBAR ========== -->
|
||
<a name="navbar_top"><!-- --></a>
|
||
<table border="0" width="100%" cellpadding="1" cellspacing="0">
|
||
<tr>
|
||
<td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1">
|
||
<a name="navbar_top_firstrow"><!-- --></a>
|
||
<table border="0" cellpadding="0" cellspacing="3">
|
||
<tr align="center" valign="top">
|
||
|
||
|
||
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a> </td>
|
||
<td bgcolor="#FFFFFF" class="NavBarCell1Rev"> <font class="NavBarFont1Rev"><b>File</b></font> </td>
|
||
|
||
|
||
<td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font> </td>
|
||
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a> </td>
|
||
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a> </td>
|
||
<td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a> </td>
|
||
</tr>
|
||
</table>
|
||
</td>
|
||
<td bgcolor="#EEEEFF" align="right" valign="top"><em>
|
||
<b></b></em>
|
||
</td>
|
||
</tr>
|
||
|
||
<tr>
|
||
<td bgcolor="white" class="NavBarCell2"><font size="-2">
|
||
PREV
|
||
NEXT</font></td>
|
||
<td bgcolor="white" class="NavBarCell2"><font size="-2">
|
||
<a href="index.html" target="_top"><b>FRAMES</b></a>
|
||
<a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a>
|
||
|
||
<script>
|
||
<!--
|
||
if(window==top) {
|
||
document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>');
|
||
}
|
||
//-->
|
||
</script>
|
||
<noscript>
|
||
<a href="allclasses-noframe.html" target=""><b>All Classes</b></a>
|
||
</noscript>
|
||
</font></td>
|
||
</tr>
|
||
</table>
|
||
<!-- =========== END OF NAVBAR =========== -->
|
||
|
||
<hr>
|
||
<font size="-1">
|
||
|
||
</font>
|
||
<div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Fri Apr 14 21:59:23 2006</div>
|
||
</body>
|
||
</html>
|