import rt 3.8.7
[freeside.git] / rt / share / html / NoAuth / RichText / FCKeditor / editor / _source / internals / fcktoolbarset.js
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbarset.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/internals/fcktoolbarset.js
new file mode 100644 (file)
index 0000000..e849f66
--- /dev/null
@@ -0,0 +1,399 @@
+/*\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
+ * Defines the FCKToolbarSet object that is used to load and draw the\r
+ * toolbar.\r
+ */\r
+\r
+function FCKToolbarSet_Create( overhideLocation )\r
+{\r
+       var oToolbarSet ;\r
+\r
+       var sLocation = overhideLocation || FCKConfig.ToolbarLocation ;\r
+       switch ( sLocation )\r
+       {\r
+               case 'In' :\r
+                       document.getElementById( 'xToolbarRow' ).style.display = '' ;\r
+                       oToolbarSet = new FCKToolbarSet( document ) ;\r
+                       break ;\r
+               case 'None' :\r
+                       oToolbarSet = new FCKToolbarSet( document ) ;\r
+                       break ;\r
+\r
+//             case 'OutTop' :\r
+                       // Not supported.\r
+\r
+               default :\r
+                       FCK.Events.AttachEvent( 'OnBlur', FCK_OnBlur ) ;\r
+                       FCK.Events.AttachEvent( 'OnFocus', FCK_OnFocus ) ;\r
+\r
+                       var eToolbarTarget ;\r
+\r
+                       // Out:[TargetWindow]([TargetId])\r
+                       var oOutMatch = sLocation.match( /^Out:(.+)\((\w+)\)$/ ) ;\r
+                       if ( oOutMatch )\r
+                       {\r
+                               if ( FCKBrowserInfo.IsAIR )\r
+                                       FCKAdobeAIR.ToolbarSet_GetOutElement( window, oOutMatch ) ;\r
+                               else\r
+                                       eToolbarTarget = eval( 'parent.' + oOutMatch[1] ).document.getElementById( oOutMatch[2] ) ;\r
+                       }\r
+                       else\r
+                       {\r
+                               // Out:[TargetId]\r
+                               oOutMatch = sLocation.match( /^Out:(\w+)$/ ) ;\r
+                               if ( oOutMatch )\r
+                                       eToolbarTarget = parent.document.getElementById( oOutMatch[1] ) ;\r
+                       }\r
+\r
+                       if ( !eToolbarTarget )\r
+                       {\r
+                               alert( 'Invalid value for "ToolbarLocation"' ) ;\r
+                               return arguments.callee( 'In' );\r
+                       }\r
+\r
+                       // If it is a shared toolbar, it may be already available in the target element.\r
+                       oToolbarSet = eToolbarTarget.__FCKToolbarSet ;\r
+                       if ( oToolbarSet )\r
+                               break ;\r
+\r
+                       // Create the IFRAME that will hold the toolbar inside the target element.\r
+                       var eToolbarIFrame = FCKTools.GetElementDocument( eToolbarTarget ).createElement( 'iframe' ) ;\r
+                       eToolbarIFrame.src = 'javascript:void(0)' ;\r
+                       eToolbarIFrame.frameBorder = 0 ;\r
+                       eToolbarIFrame.width = '100%' ;\r
+                       eToolbarIFrame.height = '10' ;\r
+                       eToolbarTarget.appendChild( eToolbarIFrame ) ;\r
+                       eToolbarIFrame.unselectable = 'on' ;\r
+\r
+                       // Write the basic HTML for the toolbar (copy from the editor main page).\r
+                       var eTargetDocument = eToolbarIFrame.contentWindow.document ;\r
+\r
+                       // Workaround for Safari 12256. Ticket #63\r
+                       var sBase = '' ;\r
+                       if ( FCKBrowserInfo.IsSafari )\r
+                               sBase = '<base href="' + window.document.location + '">' ;\r
+\r
+                       // Initialize the IFRAME document body.\r
+                       eTargetDocument.open() ;\r
+                       eTargetDocument.write( '<html><head>' + sBase + '<script type="text/javascript"> var adjust = function() { window.frameElement.height = document.body.scrollHeight ; }; '\r
+                                       + 'window.onresize = window.onload = '\r
+                                       + 'function(){'         // poll scrollHeight until it no longer changes for 1 sec.\r
+                                       + 'var timer = null;'\r
+                                       + 'var lastHeight = -1;'\r
+                                       + 'var lastChange = 0;'\r
+                                       + 'var poller = function(){'\r
+                                       + 'var currentHeight = document.body.scrollHeight || 0;'\r
+                                       + 'var currentTime = (new Date()).getTime();'\r
+                                       + 'if (currentHeight != lastHeight){'\r
+                                       + 'lastChange = currentTime;'\r
+                                       + 'adjust();'\r
+                                       + 'lastHeight = document.body.scrollHeight;'\r
+                                       + '}'\r
+                                       + 'if (lastChange < currentTime - 1000) clearInterval(timer);'\r
+                                       + '};'\r
+                                       + 'timer = setInterval(poller, 100);'\r
+                                       + '}'\r
+                                       + '</script></head><body style="overflow: hidden">' + document.getElementById( 'xToolbarSpace' ).innerHTML + '</body></html>' ) ;\r
+                       eTargetDocument.close() ;\r
+\r
+                       if( FCKBrowserInfo.IsAIR )\r
+                               FCKAdobeAIR.ToolbarSet_InitOutFrame( eTargetDocument ) ;\r
+\r
+                       FCKTools.AddEventListener( eTargetDocument, 'contextmenu', FCKTools.CancelEvent ) ;\r
+\r
+                       // Load external resources (must be done here, otherwise Firefox will not\r
+                       // have the document DOM ready to be used right away.\r
+                       FCKTools.AppendStyleSheet( eTargetDocument, FCKConfig.SkinEditorCSS ) ;\r
+\r
+                       oToolbarSet = eToolbarTarget.__FCKToolbarSet = new FCKToolbarSet( eTargetDocument ) ;\r
+                       oToolbarSet._IFrame = eToolbarIFrame ;\r
+\r
+                       if ( FCK.IECleanup )\r
+                               FCK.IECleanup.AddItem( eToolbarTarget, FCKToolbarSet_Target_Cleanup ) ;\r
+       }\r
+\r
+       oToolbarSet.CurrentInstance = FCK ;\r
+       if ( !oToolbarSet.ToolbarItems )\r
+               oToolbarSet.ToolbarItems = FCKToolbarItems ;\r
+\r
+       FCK.AttachToOnSelectionChange( oToolbarSet.RefreshItemsState ) ;\r
+\r
+       return oToolbarSet ;\r
+}\r
+\r
+function FCK_OnBlur( editorInstance )\r
+{\r
+       var eToolbarSet = editorInstance.ToolbarSet ;\r
+\r
+       if ( eToolbarSet.CurrentInstance == editorInstance )\r
+               eToolbarSet.Disable() ;\r
+}\r
+\r
+function FCK_OnFocus( editorInstance )\r
+{\r
+       var oToolbarset = editorInstance.ToolbarSet ;\r
+       var oInstance = editorInstance || FCK ;\r
+\r
+       // Unregister the toolbar window from the current instance.\r
+       oToolbarset.CurrentInstance.FocusManager.RemoveWindow( oToolbarset._IFrame.contentWindow ) ;\r
+\r
+       // Set the new current instance.\r
+       oToolbarset.CurrentInstance = oInstance ;\r
+\r
+       // Register the toolbar window in the current instance.\r
+       oInstance.FocusManager.AddWindow( oToolbarset._IFrame.contentWindow, true ) ;\r
+\r
+       oToolbarset.Enable() ;\r
+}\r
+\r
+function FCKToolbarSet_Cleanup()\r
+{\r
+       this._TargetElement = null ;\r
+       this._IFrame = null ;\r
+}\r
+\r
+function FCKToolbarSet_Target_Cleanup()\r
+{\r
+       this.__FCKToolbarSet = null ;\r
+}\r
+\r
+var FCKToolbarSet = function( targetDocument )\r
+{\r
+       this._Document = targetDocument ;\r
+\r
+       // Get the element that will hold the elements structure.\r
+       this._TargetElement     = targetDocument.getElementById( 'xToolbar' ) ;\r
+\r
+       // Setup the expand and collapse handlers.\r
+       var eExpandHandle       = targetDocument.getElementById( 'xExpandHandle' ) ;\r
+       var eCollapseHandle     = targetDocument.getElementById( 'xCollapseHandle' ) ;\r
+\r
+       eExpandHandle.title             = FCKLang.ToolbarExpand ;\r
+       FCKTools.AddEventListener( eExpandHandle, 'click', FCKToolbarSet_Expand_OnClick ) ;\r
+\r
+       eCollapseHandle.title   = FCKLang.ToolbarCollapse ;\r
+       FCKTools.AddEventListener( eCollapseHandle, 'click', FCKToolbarSet_Collapse_OnClick ) ;\r
+\r
+       // Set the toolbar state at startup.\r
+       if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded )\r
+               this.Expand() ;\r
+       else\r
+               this.Collapse() ;\r
+\r
+       // Enable/disable the collapse handler\r
+       eCollapseHandle.style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ;\r
+\r
+       if ( FCKConfig.ToolbarCanCollapse )\r
+               eCollapseHandle.style.display = '' ;\r
+       else\r
+               targetDocument.getElementById( 'xTBLeftBorder' ).style.display = '' ;\r
+\r
+       // Set the default properties.\r
+       this.Toolbars = new Array() ;\r
+       this.IsLoaded = false ;\r
+\r
+       if ( FCK.IECleanup )\r
+               FCK.IECleanup.AddItem( this, FCKToolbarSet_Cleanup ) ;\r
+}\r
+\r
+function FCKToolbarSet_Expand_OnClick()\r
+{\r
+       FCK.ToolbarSet.Expand() ;\r
+}\r
+\r
+function FCKToolbarSet_Collapse_OnClick()\r
+{\r
+       FCK.ToolbarSet.Collapse() ;\r
+}\r
+\r
+FCKToolbarSet.prototype.Expand = function()\r
+{\r
+       this._ChangeVisibility( false ) ;\r
+}\r
+\r
+FCKToolbarSet.prototype.Collapse = function()\r
+{\r
+       this._ChangeVisibility( true ) ;\r
+}\r
+\r
+FCKToolbarSet.prototype._ChangeVisibility = function( collapse )\r
+{\r
+       this._Document.getElementById( 'xCollapsed' ).style.display = collapse ? '' : 'none' ;\r
+       this._Document.getElementById( 'xExpanded' ).style.display = collapse ? 'none' : '' ;\r
+\r
+       if ( FCKBrowserInfo.IsGecko )\r
+       {\r
+               // I had to use "setTimeout" because Gecko was not responding in a right\r
+               // way when calling window.onresize() directly.\r
+               FCKTools.RunFunction( window.onresize ) ;\r
+       }\r
+}\r
+\r
+FCKToolbarSet.prototype.Load = function( toolbarSetName )\r
+{\r
+       this.Name = toolbarSetName ;\r
+\r
+       this.Items = new Array() ;\r
+\r
+       // Reset the array of toolbar items that are active only on WYSIWYG mode.\r
+       this.ItemsWysiwygOnly = new Array() ;\r
+\r
+       // Reset the array of toolbar items that are sensitive to the cursor position.\r
+       this.ItemsContextSensitive = new Array() ;\r
+\r
+       // Cleanup the target element.\r
+       this._TargetElement.innerHTML = '' ;\r
+\r
+       var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ;\r
+\r
+       if ( !ToolbarSet )\r
+       {\r
+               alert( FCKLang.UnknownToolbarSet.replace( /%1/g, toolbarSetName ) ) ;\r
+               return ;\r
+       }\r
+\r
+       this.Toolbars = new Array() ;\r
+\r
+       for ( var x = 0 ; x < ToolbarSet.length ; x++ )\r
+       {\r
+               var oToolbarItems = ToolbarSet[x] ;\r
+\r
+               // If the configuration for the toolbar is missing some element or has any extra comma\r
+               // this item won't be valid, so skip it and keep on processing.\r
+               if ( !oToolbarItems )\r
+                       continue ;\r
+\r
+               var oToolbar ;\r
+\r
+               if ( typeof( oToolbarItems ) == 'string' )\r
+               {\r
+                       if ( oToolbarItems == '/' )\r
+                               oToolbar = new FCKToolbarBreak() ;\r
+               }\r
+               else\r
+               {\r
+                       oToolbar = new FCKToolbar() ;\r
+\r
+                       for ( var j = 0 ; j < oToolbarItems.length ; j++ )\r
+                       {\r
+                               var sItem = oToolbarItems[j] ;\r
+\r
+                               if ( sItem == '-')\r
+                                       oToolbar.AddSeparator() ;\r
+                               else\r
+                               {\r
+                                       var oItem = FCKToolbarItems.GetItem( sItem ) ;\r
+                                       if ( oItem )\r
+                                       {\r
+                                               oToolbar.AddItem( oItem ) ;\r
+\r
+                                               this.Items.push( oItem ) ;\r
+\r
+                                               if ( !oItem.SourceView )\r
+                                                       this.ItemsWysiwygOnly.push( oItem ) ;\r
+\r
+                                               if ( oItem.ContextSensitive )\r
+                                                       this.ItemsContextSensitive.push( oItem ) ;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       // oToolbar.AddTerminator() ;\r
+               }\r
+\r
+               oToolbar.Create( this._TargetElement ) ;\r
+\r
+               this.Toolbars[ this.Toolbars.length ] = oToolbar ;\r
+       }\r
+\r
+       FCKTools.DisableSelection( this._Document.getElementById( 'xCollapseHandle' ).parentNode ) ;\r
+\r
+       if ( FCK.Status != FCK_STATUS_COMPLETE )\r
+               FCK.Events.AttachEvent( 'OnStatusChange', this.RefreshModeState ) ;\r
+       else\r
+               this.RefreshModeState() ;\r
+\r
+       this.IsLoaded = true ;\r
+       this.IsEnabled = true ;\r
+\r
+       FCKTools.RunFunction( this.OnLoad ) ;\r
+}\r
+\r
+FCKToolbarSet.prototype.Enable = function()\r
+{\r
+       if ( this.IsEnabled )\r
+               return ;\r
+\r
+       this.IsEnabled = true ;\r
+\r
+       var aItems = this.Items ;\r
+       for ( var i = 0 ; i < aItems.length ; i++ )\r
+               aItems[i].RefreshState() ;\r
+}\r
+\r
+FCKToolbarSet.prototype.Disable = function()\r
+{\r
+       if ( !this.IsEnabled )\r
+               return ;\r
+\r
+       this.IsEnabled = false ;\r
+\r
+       var aItems = this.Items ;\r
+       for ( var i = 0 ; i < aItems.length ; i++ )\r
+               aItems[i].Disable() ;\r
+}\r
+\r
+FCKToolbarSet.prototype.RefreshModeState = function( editorInstance )\r
+{\r
+       if ( FCK.Status != FCK_STATUS_COMPLETE )\r
+               return ;\r
+\r
+       var oToolbarSet = editorInstance ? editorInstance.ToolbarSet : this ;\r
+       var aItems = oToolbarSet.ItemsWysiwygOnly ;\r
+\r
+       if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG )\r
+       {\r
+               // Enable all buttons that are available on WYSIWYG mode only.\r
+               for ( var i = 0 ; i < aItems.length ; i++ )\r
+                       aItems[i].Enable() ;\r
+\r
+               // Refresh the buttons state.\r
+               oToolbarSet.RefreshItemsState( editorInstance ) ;\r
+       }\r
+       else\r
+       {\r
+               // Refresh the buttons state.\r
+               oToolbarSet.RefreshItemsState( editorInstance ) ;\r
+\r
+               // Disable all buttons that are available on WYSIWYG mode only.\r
+               for ( var j = 0 ; j < aItems.length ; j++ )\r
+                       aItems[j].Disable() ;\r
+       }\r
+}\r
+\r
+FCKToolbarSet.prototype.RefreshItemsState = function( editorInstance )\r
+{\r
+\r
+       var aItems = ( editorInstance ? editorInstance.ToolbarSet : this ).ItemsContextSensitive ;\r
+\r
+       for ( var i = 0 ; i < aItems.length ; i++ )\r
+               aItems[i].RefreshState() ;\r
+}\r