+++ /dev/null
-/*\r
- * FCKeditor - The text editor for Internet - http://www.fckeditor.net\r
- * Copyright (C) 2003-2009 Frederico Caldeira Knabben\r
- *\r
- * == BEGIN LICENSE ==\r
- *\r
- * Licensed under the terms of any of the following licenses at your\r
- * choice:\r
- *\r
- * - GNU General Public License Version 2 or later (the "GPL")\r
- * http://www.gnu.org/licenses/gpl.html\r
- *\r
- * - GNU Lesser General Public License Version 2.1 or later (the "LGPL")\r
- * http://www.gnu.org/licenses/lgpl.html\r
- *\r
- * - Mozilla Public License Version 1.1 or later (the "MPL")\r
- * http://www.mozilla.org/MPL/MPL-1.1.html\r
- *\r
- * == END LICENSE ==\r
- *\r
- * Advanced document processors.\r
- */\r
-\r
-var FCKDocumentProcessor = new Object() ;\r
-FCKDocumentProcessor._Items = new Array() ;\r
-\r
-FCKDocumentProcessor.AppendNew = function()\r
-{\r
- var oNewItem = new Object() ;\r
- this._Items.push( oNewItem ) ;\r
- return oNewItem ;\r
-}\r
-\r
-FCKDocumentProcessor.Process = function( document )\r
-{\r
- var bIsDirty = FCK.IsDirty() ;\r
- var oProcessor, i = 0 ;\r
- while( ( oProcessor = this._Items[i++] ) )\r
- oProcessor.ProcessDocument( document ) ;\r
- if ( !bIsDirty )\r
- FCK.ResetIsDirty() ;\r
-}\r
-\r
-var FCKDocumentProcessor_CreateFakeImage = function( fakeClass, realElement )\r
-{\r
- var oImg = FCKTools.GetElementDocument( realElement ).createElement( 'IMG' ) ;\r
- oImg.className = fakeClass ;\r
- oImg.src = FCKConfig.BasePath + 'images/spacer.gif' ;\r
- oImg.setAttribute( '_fckfakelement', 'true', 0 ) ;\r
- oImg.setAttribute( '_fckrealelement', FCKTempBin.AddElement( realElement ), 0 ) ;\r
- return oImg ;\r
-}\r
-\r
-// Link Anchors\r
-if ( FCKBrowserInfo.IsIE || FCKBrowserInfo.IsOpera )\r
-{\r
- var FCKAnchorsProcessor = FCKDocumentProcessor.AppendNew() ;\r
- FCKAnchorsProcessor.ProcessDocument = function( document )\r
- {\r
- var aLinks = document.getElementsByTagName( 'A' ) ;\r
-\r
- var oLink ;\r
- var i = aLinks.length - 1 ;\r
- while ( i >= 0 && ( oLink = aLinks[i--] ) )\r
- {\r
- // If it is anchor. Doesn't matter if it's also a link (even better: we show that it's both a link and an anchor)\r
- if ( oLink.name.length > 0 )\r
- {\r
- //if the anchor has some content then we just add a temporary class\r
- if ( oLink.innerHTML !== '' )\r
- {\r
- if ( FCKBrowserInfo.IsIE )\r
- oLink.className += ' FCK__AnchorC' ;\r
- }\r
- else\r
- {\r
- var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oLink.cloneNode(true) ) ;\r
- oImg.setAttribute( '_fckanchor', 'true', 0 ) ;\r
-\r
- oLink.parentNode.insertBefore( oImg, oLink ) ;\r
- oLink.parentNode.removeChild( oLink ) ;\r
- }\r
- }\r
- }\r
- }\r
-}\r
-\r
-// Page Breaks\r
-var FCKPageBreaksProcessor = FCKDocumentProcessor.AppendNew() ;\r
-FCKPageBreaksProcessor.ProcessDocument = function( document )\r
-{\r
- var aDIVs = document.getElementsByTagName( 'DIV' ) ;\r
-\r
- var eDIV ;\r
- var i = aDIVs.length - 1 ;\r
- while ( i >= 0 && ( eDIV = aDIVs[i--] ) )\r
- {\r
- if ( eDIV.style.pageBreakAfter == 'always' && eDIV.childNodes.length == 1 && eDIV.childNodes[0].style && eDIV.childNodes[0].style.display == 'none' )\r
- {\r
- var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', eDIV.cloneNode(true) ) ;\r
-\r
- eDIV.parentNode.insertBefore( oFakeImage, eDIV ) ;\r
- eDIV.parentNode.removeChild( eDIV ) ;\r
- }\r
- }\r
-/*\r
- var aCenters = document.getElementsByTagName( 'CENTER' ) ;\r
-\r
- var oCenter ;\r
- var i = aCenters.length - 1 ;\r
- while ( i >= 0 && ( oCenter = aCenters[i--] ) )\r
- {\r
- if ( oCenter.style.pageBreakAfter == 'always' && oCenter.innerHTML.Trim().length == 0 )\r
- {\r
- var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', oCenter.cloneNode(true) ) ;\r
-\r
- oCenter.parentNode.insertBefore( oFakeImage, oCenter ) ;\r
- oCenter.parentNode.removeChild( oCenter ) ;\r
- }\r
- }\r
-*/\r
-}\r
-\r
-// EMBED and OBJECT tags.\r
-var FCKEmbedAndObjectProcessor = (function()\r
-{\r
- var customProcessors = [] ;\r
-\r
- var processElement = function( el )\r
- {\r
- var clone = el.cloneNode( true ) ;\r
- var replaceElement ;\r
- var fakeImg = replaceElement = FCKDocumentProcessor_CreateFakeImage( 'FCK__UnknownObject', clone ) ;\r
- FCKEmbedAndObjectProcessor.RefreshView( fakeImg, el ) ;\r
-\r
- for ( var i = 0 ; i < customProcessors.length ; i++ )\r
- replaceElement = customProcessors[i]( el, replaceElement ) || replaceElement ;\r
-\r
- if ( replaceElement != fakeImg )\r
- FCKTempBin.RemoveElement( fakeImg.getAttribute( '_fckrealelement' ) ) ;\r
-\r
- el.parentNode.replaceChild( replaceElement, el ) ;\r
- }\r
-\r
- var processElementsByName = function( elementName, doc )\r
- {\r
- var aObjects = doc.getElementsByTagName( elementName );\r
- for ( var i = aObjects.length - 1 ; i >= 0 ; i-- )\r
- processElement( aObjects[i] ) ;\r
- }\r
-\r
- var processObjectAndEmbed = function( doc )\r
- {\r
- processElementsByName( 'object', doc );\r
- processElementsByName( 'embed', doc );\r
- }\r
-\r
- return FCKTools.Merge( FCKDocumentProcessor.AppendNew(),\r
- {\r
- ProcessDocument : function( doc )\r
- {\r
- // Firefox 3 would sometimes throw an unknown exception while accessing EMBEDs and OBJECTs\r
- // without the setTimeout().\r
- if ( FCKBrowserInfo.IsGecko )\r
- FCKTools.RunFunction( processObjectAndEmbed, this, [ doc ] ) ;\r
- else\r
- processObjectAndEmbed( doc ) ;\r
- },\r
-\r
- RefreshView : function( placeHolder, original )\r
- {\r
- if ( original.getAttribute( 'width' ) > 0 )\r
- placeHolder.style.width = FCKTools.ConvertHtmlSizeToStyle( original.getAttribute( 'width' ) ) ;\r
-\r
- if ( original.getAttribute( 'height' ) > 0 )\r
- placeHolder.style.height = FCKTools.ConvertHtmlSizeToStyle( original.getAttribute( 'height' ) ) ;\r
- },\r
-\r
- AddCustomHandler : function( func )\r
- {\r
- customProcessors.push( func ) ;\r
- }\r
- } ) ;\r
-} )() ;\r
-\r
-FCK.GetRealElement = function( fakeElement )\r
-{\r
- var e = FCKTempBin.Elements[ fakeElement.getAttribute('_fckrealelement') ] ;\r
-\r
- if ( fakeElement.getAttribute('_fckflash') )\r
- {\r
- if ( fakeElement.style.width.length > 0 )\r
- e.width = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.width ) ;\r
-\r
- if ( fakeElement.style.height.length > 0 )\r
- e.height = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.height ) ;\r
- }\r
-\r
- return e ;\r
-}\r
-\r
-// HR Processor.\r
-// This is a IE only (tricky) thing. We protect all HR tags before loading them\r
-// (see FCK.ProtectTags). Here we put the HRs back.\r
-if ( FCKBrowserInfo.IsIE )\r
-{\r
- FCKDocumentProcessor.AppendNew().ProcessDocument = function( document )\r
- {\r
- var aHRs = document.getElementsByTagName( 'HR' ) ;\r
-\r
- var eHR ;\r
- var i = aHRs.length - 1 ;\r
- while ( i >= 0 && ( eHR = aHRs[i--] ) )\r
- {\r
- // Create the replacement HR.\r
- var newHR = document.createElement( 'hr' ) ;\r
- newHR.mergeAttributes( eHR, true ) ;\r
-\r
- // We must insert the new one after it. insertBefore will not work in all cases.\r
- FCKDomTools.InsertAfterNode( eHR, newHR ) ;\r
-\r
- eHR.parentNode.removeChild( eHR ) ;\r
- }\r
- }\r
-}\r
-\r
-// INPUT:hidden Processor.\r
-FCKDocumentProcessor.AppendNew().ProcessDocument = function( document )\r
-{\r
- var aInputs = document.getElementsByTagName( 'INPUT' ) ;\r
-\r
- var oInput ;\r
- var i = aInputs.length - 1 ;\r
- while ( i >= 0 && ( oInput = aInputs[i--] ) )\r
- {\r
- if ( oInput.type == 'hidden' )\r
- {\r
- var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__InputHidden', oInput.cloneNode(true) ) ;\r
- oImg.setAttribute( '_fckinputhidden', 'true', 0 ) ;\r
-\r
- oInput.parentNode.insertBefore( oImg, oInput ) ;\r
- oInput.parentNode.removeChild( oInput ) ;\r
- }\r
- }\r
-}\r
-\r
-// Flash handler.\r
-FCKEmbedAndObjectProcessor.AddCustomHandler( function( el, fakeImg )\r
- {\r
- if ( ! ( el.nodeName.IEquals( 'embed' ) && ( el.type == 'application/x-shockwave-flash' || /\.swf($|#|\?)/i.test( el.src ) ) ) )\r
- return ;\r
- fakeImg.className = 'FCK__Flash' ;\r
- fakeImg.setAttribute( '_fckflash', 'true', 0 );\r
- } ) ;\r
-\r
-// Buggy <span class="Apple-style-span"> tags added by Safari.\r
-if ( FCKBrowserInfo.IsSafari )\r
-{\r
- FCKDocumentProcessor.AppendNew().ProcessDocument = function( doc )\r
- {\r
- var spans = doc.getElementsByClassName ?\r
- doc.getElementsByClassName( 'Apple-style-span' ) :\r
- Array.prototype.filter.call(\r
- doc.getElementsByTagName( 'span' ),\r
- function( item ){ return item.className == 'Apple-style-span' ; }\r
- ) ;\r
- for ( var i = spans.length - 1 ; i >= 0 ; i-- )\r
- FCKDomTools.RemoveNode( spans[i], true ) ;\r
- }\r
-}\r