/* * FCKeditor - The text editor for internet * Copyright (C) 2003-2006 Frederico Caldeira Knabben * * Licensed under the terms of the GNU Lesser General Public License: * http://www.opensource.org/licenses/lgpl-license.php * * For further information visit: * http://www.fckeditor.net/ * * "Support Open Source software. What about a donation today?" * * File Name: fcktools.js * Utility functions. * * File Authors: * Frederico Caldeira Knabben (fredck@fckeditor.net) */ var FCKTools = new Object() ; FCKTools.AppendStyleSheet = function( documentElement, cssFileUrlOrArray ) { if ( typeof( cssFileUrlOrArray ) == 'string' ) return this._AppendStyleSheet( documentElement, cssFileUrlOrArray ) ; else { for ( var i = 0 ; i < cssFileUrlOrArray.length ; i++ ) this._AppendStyleSheet( documentElement, cssFileUrlOrArray[i] ) ; } } /** * Gets the value of the hidden INPUT element that is associated to the editor. * This element has its ID set to the editor's instance name so the user refers * to the instance name when getting the posted data. */ FCKTools.GetLinkedFieldValue = function() { return FCK.LinkedField.value ; } /** * Attachs a function call to the submit event of the linked field form. This * function us generally used to update the linked field value before * submitting the form. */ FCKTools.AttachToLinkedFieldFormSubmit = function( functionPointer ) { // Gets the linked field form var oForm = FCK.LinkedField.form ; // Return now if no form is available if (!oForm) return ; // Attaches the functionPointer call to the onsubmit event if ( FCKBrowserInfo.IsIE ) oForm.attachEvent( "onsubmit", functionPointer ) ; else oForm.addEventListener( 'submit', functionPointer, false ) ; //** // Attaches the functionPointer call to the submit method // This is done because IE doesn't fire onsubmit when the submit method is called // BEGIN -- // Creates a Array in the form object that will hold all Attached function call // (in the case there are more than one editor in the same page) if (! oForm.updateFCKeditor) oForm.updateFCKeditor = new Array() ; // Adds the function pointer to the array of functions to call when "submit" is called oForm.updateFCKeditor[oForm.updateFCKeditor.length] = functionPointer ; // Switches the original submit method with a new one that first call all functions // on the above array and the call the original submit // IE sees it oForm.submit function as an 'object'. if (! oForm.originalSubmit && ( typeof( oForm.submit ) == 'function' || ( !oForm.submit.tagName && !oForm.submit.length ) ) ) { // Creates a copy of the original submit oForm.originalSubmit = oForm.submit ; // Creates our replacement for the submit oForm.submit = FCKTools_SubmitReplacer ; } // END -- } function FCKTools_SubmitReplacer() { if (this.updateFCKeditor) { // Calls all functions in the functions array for (var i = 0 ; i < this.updateFCKeditor.length ; i++) this.updateFCKeditor[i]() ; } // Calls the original "submit" this.originalSubmit() ; } // Get the window object where the element is placed in. FCKTools.GetElementWindow = function( element ) { return this.GetDocumentWindow( this.GetElementDocument( element ) ) ; } FCKTools.GetDocumentWindow = function( doc ) { // With Safari, there is not way to retrieve the window from the document, so we must fix it. if ( FCKBrowserInfo.IsSafari && !doc.parentWindow ) this.FixDocumentParentWindow( window.top ) ; return doc.parentWindow || doc.defaultView ; } /* This is a Safari specific function that fix the reference to the parent window from the document object. */ FCKTools.FixDocumentParentWindow = function( targetWindow ) { targetWindow.document.parentWindow = targetWindow ; for ( var i = 0 ; i < targetWindow.frames.length ; i++ ) FCKTools.FixDocumentParentWindow( targetWindow.frames[i] ) ; } FCKTools.GetParentWindow = function( document ) { return document.contentWindow ? document.contentWindow : document.parentWindow ; } FCKTools.HTMLEncode = function( text ) { if ( !text ) return '' ; text = text.replace( /&/g, '&' ) ; text = text.replace( //g, '>' ) ; return text ; } /** * Adds an option to a SELECT element. */ FCKTools.AddSelectOption = function( selectElement, optionText, optionValue ) { var oOption = FCKTools.GetElementDocument( selectElement ).createElement( "OPTION" ) ; oOption.text = optionText ; oOption.value = optionValue ; selectElement.options.add(oOption) ; return oOption ; } FCKTools.RunFunction = function( func, thisObject, paramsArray, timerWindow ) { if ( func ) this.SetTimeout( func, 0, thisObject, paramsArray, timerWindow ) ; } FCKTools.SetTimeout = function( func, milliseconds, thisObject, paramsArray, timerWindow ) { return ( timerWindow || window ).setTimeout( function() { if ( paramsArray ) func.apply( thisObject, [].concat( paramsArray ) ) ; else func.apply( thisObject ) ; }, milliseconds ) ; } FCKTools.SetInterval = function( func, milliseconds, thisObject, paramsArray, timerWindow ) { return ( timerWindow || window ).setInterval( function() { func.apply( thisObject, paramsArray || [] ) ; }, milliseconds ) ; } FCKTools.ConvertStyleSizeToHtml = function( size ) { return size.endsWith( '%' ) ? size : parseInt( size ) ; } FCKTools.ConvertHtmlSizeToStyle = function( size ) { return size.endsWith( '%' ) ? size : ( size + 'px' ) ; } // START iCM MODIFICATIONS // Amended to accept a list of one or more ascensor tag names // Amended to check the element itself before working back up through the parent hierarchy FCKTools.GetElementAscensor = function( element, ascensorTagNames ) { // var e = element.parentNode ; var e = element ; var lstTags = "," + ascensorTagNames.toUpperCase() + "," ; while ( e ) { if ( lstTags.indexOf( "," + e.nodeName.toUpperCase() + "," ) != -1 ) return e ; e = e.parentNode ; } return null ; } // END iCM MODIFICATIONS FCKTools.CreateEventListener = function( func, params ) { var f = function() { var aAllParams = [] ; for ( var i = 0 ; i < arguments.length ; i++ ) aAllParams.push( arguments[i] ) ; func.apply( this, aAllParams.concat( params ) ) ; } return f ; } FCKTools.GetElementDocument = function ( element ) { return element.ownerDocument || element.document ; }