[1349] | 1 | /* |
---|
| 2 | * FCKeditor - The text editor for Internet - http://www.fckeditor.net |
---|
| 3 | * Copyright (C) 2003-2007 Frederico Caldeira Knabben |
---|
| 4 | * |
---|
| 5 | * == BEGIN LICENSE == |
---|
| 6 | * |
---|
| 7 | * Licensed under the terms of any of the following licenses at your |
---|
| 8 | * choice: |
---|
| 9 | * |
---|
| 10 | * - GNU General Public License Version 2 or later (the "GPL") |
---|
| 11 | * http://www.gnu.org/licenses/gpl.html |
---|
| 12 | * |
---|
| 13 | * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") |
---|
| 14 | * http://www.gnu.org/licenses/lgpl.html |
---|
| 15 | * |
---|
| 16 | * - Mozilla Public License Version 1.1 or later (the "MPL") |
---|
| 17 | * http://www.mozilla.org/MPL/MPL-1.1.html |
---|
| 18 | * |
---|
| 19 | * == END LICENSE == |
---|
| 20 | * |
---|
| 21 | * Create the FCKeditorAPI object that is available as a global object in |
---|
| 22 | * the page where the editor is placed in. |
---|
| 23 | */ |
---|
| 24 | |
---|
| 25 | var FCKeditorAPI ; |
---|
| 26 | |
---|
| 27 | function InitializeAPI() |
---|
| 28 | { |
---|
| 29 | var oParentWindow = window.parent ; |
---|
| 30 | |
---|
| 31 | if ( !( FCKeditorAPI = oParentWindow.FCKeditorAPI ) ) |
---|
| 32 | { |
---|
| 33 | // Make the FCKeditorAPI object available in the parent window. Use |
---|
| 34 | // eval so this core runs in the parent's scope and so it will still be |
---|
| 35 | // available if the editor instance is removed ("Can't execute code |
---|
| 36 | // from a freed script" error). |
---|
| 37 | |
---|
| 38 | // Note: we check the existence of oEditor.GetParentForm because some external |
---|
| 39 | // code (like JSON) can extend the Object protype and we get then extra oEditor |
---|
| 40 | // objects that aren't really FCKeditor instances. |
---|
| 41 | var sScript = |
---|
| 42 | 'var FCKeditorAPI = {' + |
---|
| 43 | 'Version : "2.4.2",' + |
---|
| 44 | 'VersionBuild : "14978",' + |
---|
| 45 | '__Instances : new Object(),' + |
---|
| 46 | |
---|
| 47 | 'GetInstance : function( name )' + |
---|
| 48 | '{' + |
---|
| 49 | 'return this.__Instances[ name ];' + |
---|
| 50 | '},' + |
---|
| 51 | |
---|
| 52 | '_FormSubmit : function()' + |
---|
| 53 | '{' + |
---|
| 54 | 'for ( var name in FCKeditorAPI.__Instances )' + |
---|
| 55 | '{' + |
---|
| 56 | 'var oEditor = FCKeditorAPI.__Instances[ name ] ;' + |
---|
| 57 | 'if ( oEditor.GetParentForm && oEditor.GetParentForm() == this )' + |
---|
| 58 | 'oEditor.UpdateLinkedField() ;' + |
---|
| 59 | '}' + |
---|
| 60 | 'this._FCKOriginalSubmit() ;' + |
---|
| 61 | '},' + |
---|
| 62 | |
---|
| 63 | '_FunctionQueue : {' + |
---|
| 64 | 'Functions : new Array(),' + |
---|
| 65 | 'IsRunning : false,' + |
---|
| 66 | |
---|
| 67 | 'Add : function( f )' + |
---|
| 68 | '{' + |
---|
| 69 | 'this.Functions.push( f );' + |
---|
| 70 | 'if ( !this.IsRunning )' + |
---|
| 71 | 'this.StartNext();' + |
---|
| 72 | '},' + |
---|
| 73 | |
---|
| 74 | 'StartNext : function()' + |
---|
| 75 | '{' + |
---|
| 76 | 'var aQueue = this.Functions ;' + |
---|
| 77 | 'if ( aQueue.length > 0 )' + |
---|
| 78 | '{' + |
---|
| 79 | 'this.IsRunning = true;' + |
---|
| 80 | 'aQueue[0].call();' + |
---|
| 81 | '}' + |
---|
| 82 | 'else ' + |
---|
| 83 | 'this.IsRunning = false;' + |
---|
| 84 | '},' + |
---|
| 85 | |
---|
| 86 | 'Remove : function( f )' + |
---|
| 87 | '{' + |
---|
| 88 | 'var aQueue = this.Functions;' + |
---|
| 89 | 'var i = 0, fFunc;' + |
---|
| 90 | 'while( (fFunc = aQueue[ i ]) )' + |
---|
| 91 | '{' + |
---|
| 92 | 'if ( fFunc == f )' + |
---|
| 93 | 'aQueue.splice( i,1 );' + |
---|
| 94 | 'i++ ;' + |
---|
| 95 | '}' + |
---|
| 96 | 'this.StartNext();' + |
---|
| 97 | '}' + |
---|
| 98 | '}' + |
---|
| 99 | '}' ; |
---|
| 100 | |
---|
| 101 | // In IE, the "eval" function is not always available (it works with |
---|
| 102 | // the JavaScript samples, but not with the ASP ones, for example). |
---|
| 103 | // So, let's use the execScript instead. |
---|
| 104 | if ( oParentWindow.execScript ) |
---|
| 105 | oParentWindow.execScript( sScript, 'JavaScript' ) ; |
---|
| 106 | else |
---|
| 107 | { |
---|
| 108 | if ( FCKBrowserInfo.IsGecko10 ) |
---|
| 109 | { |
---|
| 110 | // FF 1.0.4 gives an error with the request bellow. The |
---|
| 111 | // following seams to work well. |
---|
| 112 | eval.call( oParentWindow, sScript ) ; |
---|
| 113 | } |
---|
| 114 | else if ( FCKBrowserInfo.IsSafari ) |
---|
| 115 | { |
---|
| 116 | // oParentWindow.eval in Safari executes in the calling window |
---|
| 117 | // environment, instead of the parent one. The following should make it work. |
---|
| 118 | var oParentDocument = oParentWindow.document ; |
---|
| 119 | var eScript = oParentDocument.createElement('script') ; |
---|
| 120 | eScript.appendChild( oParentDocument.createTextNode( sScript ) ) ; |
---|
| 121 | oParentDocument.documentElement.appendChild( eScript ) ; |
---|
| 122 | } |
---|
| 123 | else |
---|
| 124 | oParentWindow.eval( sScript ) ; |
---|
| 125 | } |
---|
| 126 | |
---|
| 127 | FCKeditorAPI = oParentWindow.FCKeditorAPI ; |
---|
| 128 | } |
---|
| 129 | |
---|
| 130 | // Add the current instance to the FCKeditorAPI's instances collection. |
---|
| 131 | FCKeditorAPI.__Instances[ FCK.Name ] = FCK ; |
---|
| 132 | } |
---|
| 133 | |
---|
| 134 | // Attach to the form onsubmit event and to the form.submit(). |
---|
| 135 | function _AttachFormSubmitToAPI() |
---|
| 136 | { |
---|
| 137 | // Get the linked field form. |
---|
| 138 | var oForm = FCK.GetParentForm() ; |
---|
| 139 | |
---|
| 140 | if ( oForm ) |
---|
| 141 | { |
---|
| 142 | // Attach to the onsubmit event. |
---|
| 143 | FCKTools.AddEventListener( oForm, 'submit', FCK.UpdateLinkedField ) ; |
---|
| 144 | |
---|
| 145 | // IE sees oForm.submit function as an 'object'. |
---|
| 146 | if ( !oForm._FCKOriginalSubmit && ( typeof( oForm.submit ) == 'function' || ( !oForm.submit.tagName && !oForm.submit.length ) ) ) |
---|
| 147 | { |
---|
| 148 | // Save the original submit. |
---|
| 149 | oForm._FCKOriginalSubmit = oForm.submit ; |
---|
| 150 | |
---|
| 151 | // Create our replacement for the submit. |
---|
| 152 | oForm.submit = FCKeditorAPI._FormSubmit ; |
---|
| 153 | } |
---|
| 154 | } |
---|
| 155 | } |
---|
| 156 | |
---|
| 157 | function FCKeditorAPI_Cleanup() |
---|
| 158 | { |
---|
| 159 | delete FCKeditorAPI.__Instances[ FCK.Name ] ; |
---|
| 160 | } |
---|
| 161 | FCKTools.AddEventListener( window, 'unload', FCKeditorAPI_Cleanup ) ; |
---|