Index: branches/5.2.x/core/editor/fckeditor.js =================================================================== diff -u -N --- branches/5.2.x/core/editor/fckeditor.js (revision 14244) +++ branches/5.2.x/core/editor/fckeditor.js (revision 0) @@ -1,328 +0,0 @@ -/* - * FCKeditor - The text editor for Internet - http://www.fckeditor.net - * Copyright (C) 2003-2008 Frederico Caldeira Knabben - * - * == BEGIN LICENSE == - * - * Licensed under the terms of any of the following licenses at your - * choice: - * - * - GNU General Public License Version 2 or later (the "GPL") - * http://www.gnu.org/licenses/gpl.html - * - * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") - * http://www.gnu.org/licenses/lgpl.html - * - * - Mozilla Public License Version 1.1 or later (the "MPL") - * http://www.mozilla.org/MPL/MPL-1.1.html - * - * == END LICENSE == - * - * This is the integration file for JavaScript. - * - * It defines the FCKeditor class that can be used to create editor - * instances in a HTML page in the client side. For server side - * operations, use the specific integration system. - */ - -// FCKeditor Class -var FCKeditor = function( instanceName, width, height, toolbarSet, value ) -{ - // Properties - this.InstanceName = instanceName ; - this.Width = width || '100%' ; - this.Height = height || '200' ; - this.ToolbarSet = toolbarSet || 'Default' ; - this.Value = value || '' ; - this.BasePath = FCKeditor.BasePath ; - this.CheckBrowser = true ; - this.DisplayErrors = true ; - - this.Config = new Object() ; - - // Events - this.OnError = null ; // function( source, errorNumber, errorDescription ) -} - -/** - * This is the default BasePath used by all editor instances. - */ -FCKeditor.BasePath = '/fckeditor/' ; - -/** - * The minimum height used when replacing textareas. - */ -FCKeditor.MinHeight = 200 ; - -/** - * The minimum width used when replacing textareas. - */ -FCKeditor.MinWidth = 750 ; - -FCKeditor.prototype.Version = '2.6.3' ; -FCKeditor.prototype.VersionBuild = '19836' ; - -FCKeditor.prototype.Create = function() -{ - document.write( this.CreateHtml() ) ; -} - -FCKeditor.prototype.CreateHtml = function() -{ - // Check for errors - if ( !this.InstanceName || this.InstanceName.length == 0 ) - { - this._ThrowError( 701, 'You must specify an instance name.' ) ; - return '' ; - } - - var sHtml = '' ; - - if ( !this.CheckBrowser || this._IsCompatibleBrowser() ) - { - sHtml += '' ; - sHtml += this._GetConfigHtml() ; - sHtml += this._GetIFrameHtml() ; - } - else - { - var sWidth = this.Width.toString().indexOf('%') > 0 ? this.Width : this.Width + 'px' ; - var sHeight = this.Height.toString().indexOf('%') > 0 ? this.Height : this.Height + 'px' ; - - sHtml += '' + - this._HTMLEncode( this.Value ) + - '<\/textarea>' ; - } - - return sHtml ; -} - -FCKeditor.prototype.ReplaceTextarea = function() -{ - if ( !this.CheckBrowser || this._IsCompatibleBrowser() ) - { - // We must check the elements firstly using the Id and then the name. - var oTextarea = document.getElementById( this.InstanceName ) ; - var colElementsByName = document.getElementsByName( this.InstanceName ) ; - var i = 0; - while ( oTextarea || i == 0 ) - { - if ( oTextarea && oTextarea.tagName.toLowerCase() == 'textarea' ) - break ; - oTextarea = colElementsByName[i++] ; - } - - if ( !oTextarea ) - { - alert( 'Error: The TEXTAREA with id or name set to "' + this.InstanceName + '" was not found' ) ; - return ; - } - - oTextarea.style.display = 'none' ; - - if ( oTextarea.tabIndex ) - this.TabIndex = oTextarea.tabIndex ; - - this._InsertHtmlBefore( this._GetConfigHtml(), oTextarea ) ; - this._InsertHtmlBefore( this._GetIFrameHtml(), oTextarea ) ; - } -} - -FCKeditor.prototype._InsertHtmlBefore = function( html, element ) -{ - if ( element.insertAdjacentHTML ) // IE - element.insertAdjacentHTML( 'beforeBegin', html ) ; - else // Gecko - { - var oRange = document.createRange() ; - oRange.setStartBefore( element ) ; - var oFragment = oRange.createContextualFragment( html ); - element.parentNode.insertBefore( oFragment, element ) ; - } -} - -FCKeditor.prototype._GetConfigHtml = function() -{ - var sConfig = '' ; - for ( var o in this.Config ) - { - if ( sConfig.length > 0 ) sConfig += '&' ; - sConfig += encodeURIComponent( o ) + '=' + encodeURIComponent( this.Config[o] ) ; - } - - return '' ; -} - -FCKeditor.prototype._GetIFrameHtml = function() -{ - var sFile = 'fckeditor.html' ; - - try - { - if ( (/fcksource=true/i).test( window.top.location.search ) ) - sFile = 'fckeditor.original.html' ; - } - catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ } - - var sLink = this.BasePath + 'editor/' + sFile + '?InstanceName=' + encodeURIComponent( this.InstanceName ) ; - if (this.ToolbarSet) - sLink += '&Toolbar=' + this.ToolbarSet ; - - html = '' ; - - return html ; -} - -FCKeditor.prototype._IsCompatibleBrowser = function() -{ - return FCKeditor_IsCompatibleBrowser() ; -} - -FCKeditor.prototype._ThrowError = function( errorNumber, errorDescription ) -{ - this.ErrorNumber = errorNumber ; - this.ErrorDescription = errorDescription ; - - if ( this.DisplayErrors ) - { - document.write( '' ) ; - document.write( '[ FCKeditor Error ' + this.ErrorNumber + ': ' + this.ErrorDescription + ' ]' ) ; - document.write( '' ) ; - } - - if ( typeof( this.OnError ) == 'function' ) - this.OnError( this, errorNumber, errorDescription ) ; -} - -FCKeditor.prototype._HTMLEncode = function( text ) -{ - if ( typeof( text ) != "string" ) - text = text.toString() ; - - text = text.replace( - /&/g, "&").replace( - /"/g, """).replace( - //g, ">") ; - - return text ; -} - -;(function() -{ - var textareaToEditor = function( textarea ) - { - var editor = new FCKeditor( textarea.name ) ; - - editor.Width = Math.max( textarea.offsetWidth, FCKeditor.MinWidth ) ; - editor.Height = Math.max( textarea.offsetHeight, FCKeditor.MinHeight ) ; - - return editor ; - } - - /** - * Replace all elements available in the document with FCKeditor - * instances. - * - * // Replace all elements in the page. - * FCKeditor.ReplaceAllTextareas() ; - * - * // Replace all elements in the page. - * FCKeditor.ReplaceAllTextareas( 'myClassName' ) ; - * - * // Selectively replace elements, based on custom assertions. - * FCKeditor.ReplaceAllTextareas( function( textarea, editor ) - * { - * // Custom code to evaluate the replace, returning false if it - * // must not be done. - * // It also passes the "editor" parameter, so the developer can - * // customize the instance. - * } ) ; - */ - FCKeditor.ReplaceAllTextareas = function() - { - var textareas = document.getElementsByTagName( 'textarea' ) ; - - for ( var i = 0 ; i < textareas.length ; i++ ) - { - var editor = null ; - var textarea = textareas[i] ; - var name = textarea.name ; - - // The "name" attribute must exist. - if ( !name || name.length == 0 ) - continue ; - - if ( typeof arguments[0] == 'string' ) - { - // The textarea class name could be passed as the function - // parameter. - - var classRegex = new RegExp( '(?:^| )' + arguments[0] + '(?:$| )' ) ; - - if ( !classRegex.test( textarea.className ) ) - continue ; - } - else if ( typeof arguments[0] == 'function' ) - { - // An assertion function could be passed as the function parameter. - // It must explicitly return "false" to ignore a specific . - editor = textareaToEditor( textarea ) ; - if ( arguments[0]( textarea, editor ) === false ) - continue ; - } - - if ( !editor ) - editor = textareaToEditor( textarea ) ; - - editor.ReplaceTextarea() ; - } - } -})() ; - -function FCKeditor_IsCompatibleBrowser() -{ - var sAgent = navigator.userAgent.toLowerCase() ; - - // Internet Explorer 5.5+ - if ( /*@cc_on!@*/false && sAgent.indexOf("mac") == -1 ) - { - var sBrowserVersion = navigator.appVersion.match(/MSIE (.\..)/)[1] ; - return ( sBrowserVersion >= 5.5 ) ; - } - - // Gecko (Opera 9 tries to behave like Gecko at this point). - if ( navigator.product == "Gecko" && navigator.productSub >= 20030210 && !( typeof(opera) == 'object' && opera.postError ) ) - return true ; - - // Opera 9.50+ - if ( window.opera && window.opera.version && parseFloat( window.opera.version() ) >= 9.5 ) - return true ; - - // Adobe AIR - // Checked before Safari because AIR have the WebKit rich text editor - // features from Safari 3.0.4, but the version reported is 420. - if ( sAgent.indexOf( ' adobeair/' ) != -1 ) - return ( sAgent.match( / adobeair\/(\d+)/ )[1] >= 1 ) ; // Build must be at least v1 - - // Safari 3+ - if ( sAgent.indexOf( ' applewebkit/' ) != -1 ) - return ( sAgent.match( / applewebkit\/(\d+)/ )[1] >= 522 ) ; // Build must be at least 522 (v3) - - return false ; -}