New file |
0,0 → 1,236 |
/* |
* 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, '<' ) ; |
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 ; |
} |