[freeside-commits] freeside/httemplate/elements/fckeditor/editor fckdebug.html, 1.1, 1.1.6.1 fckdialog.html, 1.1, 1.1.6.1 fckeditor.html, 1.1, 1.1.6.1 fckeditor.original.html, 1.1, 1.1.6.1
Mark Wells
mark at wavetail.420.am
Tue Mar 16 01:34:47 PDT 2010
- Previous message: [freeside-commits] freeside/httemplate/elements/fckeditor fckconfig.js, 1.1, 1.1.6.1 fckeditor.js, 1.1, 1.1.6.1 fckpackager.xml, 1.1, 1.1.6.1 fckstyles.xml, 1.1, 1.1.6.1 fcktemplates.xml, 1.1, 1.1.6.1
- Next message: [freeside-commits] freeside/httemplate/elements/fckeditor/editor/css fck_editorarea.css, 1.1, 1.1.6.1 fck_internal.css, 1.1, 1.1.6.1 fck_showtableborders_gecko.css, 1.1, 1.1.6.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /home/cvs/cvsroot/freeside/httemplate/elements/fckeditor/editor
In directory wavetail.420.am:/tmp/cvs-serv23603/editor
Modified Files:
Tag: FREESIDE_1_9_BRANCH
fckdebug.html fckdialog.html fckeditor.html
fckeditor.original.html
Log Message:
FCKeditor 2.6.6
Index: fckdialog.html
===================================================================
RCS file: /home/cvs/cvsroot/freeside/httemplate/elements/fckeditor/editor/fckdialog.html,v
retrieving revision 1.1
retrieving revision 1.1.6.1
diff -u -w -d -r1.1 -r1.1.6.1
--- fckdialog.html 1 Aug 2007 22:25:11 -0000 1.1
+++ fckdialog.html 16 Mar 2010 08:34:45 -0000 1.1.6.1
@@ -1,7 +1,7 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
@@ -23,121 +23,449 @@
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
+ <title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<script type="text/javascript">
+// <![CDATA[
-// On some Gecko browsers (probably over slow connections) the
-// "dialogArguments" are not set so we must get it from the opener window.
-if ( !window.dialogArguments )
- window.dialogArguments = window.opener.FCKLastDialogInfo ;
+// Domain relaxation logic.
+(function()
+{
+ var d = document.domain ;
+
+ while ( true )
+ {
+ // Test if we can access a parent property.
+ try
+ {
+ var parentDomain = ( Args().TopWindow || E ).document.domain ;
+
+ if ( document.domain != parentDomain )
+ document.domain = parentDomain ;
+
+ break ;
+ }
+ catch( e ) {}
+
+ // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+ d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+ if ( d.length == 0 )
+ break ; // It was not able to detect the domain.
+
+ document.domain = d ;
+ }
+})() ;
+
+var E = frameElement._DialogArguments.Editor ;
+
+// It seems referencing to frameElement._DialogArguments directly would lead to memory leaks in IE.
+// So let's use functions to access its members instead.
+function Args()
+{
+ return frameElement._DialogArguments ;
+}
+
+function ParentDialog( dialog )
+{
+ return dialog ? dialog._ParentDialog : frameElement._ParentDialog ;
+}
+
+var FCK = E.FCK ;
+var FCKTools = E.FCKTools ;
+var FCKDomTools = E.FCKDomTools ;
+var FCKDialog = E.FCKDialog ;
+var FCKBrowserInfo = E.FCKBrowserInfo ;
+var FCKConfig = E.FCKConfig ;
+
+// Steal the focus so that the caret would no longer stay in the editor iframe.
+window.focus() ;
// Sets the Skin CSS
-document.write( '<link href="' + window.dialogArguments.Editor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
+document.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
// Sets the language direction.
-window.document.dir = window.dialogArguments.Editor.FCKLang.Dir ;
+var langDir = E.FCKLang.Dir ;
-var sTitle = window.dialogArguments.Title ;
-document.write( '<title>' + sTitle + '<\/title>' ) ;
+// For IE6-, the fck_dialog_ie6.js is loaded, used to fix limitations in the browser.
+if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+ document.write( '<' + 'script type="text/javascript" src="' + FCKConfig.SkinPath + 'fck_dialog_ie6.js"><' + '\/script>' ) ;
-function LoadInnerDialog()
+FCKTools.RegisterDollarFunction( window ) ;
+
+// Resize related functions.
+var Sizer = function()
{
- if ( window.onresize )
- window.onresize() ;
+ var bAutoSize = false ;
- // First of all, translate the dialog box contents.
- window.dialogArguments.Editor.FCKLanguageManager.TranslatePage( document ) ;
+ var retval = {
+ // Sets whether the dialog should auto-resize according to its content's height.
+ SetAutoSize : function( autoSize )
+ {
+ bAutoSize = autoSize ;
+ this.RefreshSize() ;
+ },
- window.frames["frmMain"].document.location.href = window.dialogArguments.Page ;
+ // Fit the dialog container's layout to the inner iframe's external size.
+ RefreshContainerSize : function()
+ {
+ var frmMain = $( 'frmMain' ) ;
+
+ if ( frmMain )
+ {
+ // Get the container size.
+ var height = $( 'contents' ).offsetHeight ;
+
+ // Subtract the size of other elements.
+ height -= $( 'TitleArea' ).offsetHeight ;
+ height -= $( 'TabsRow' ).offsetHeight ;
+ height -= $( 'PopupButtons' ).offsetHeight ;
+
+ frmMain.style.height = Math.max( height, 0 ) + 'px' ;
}
+ },
-function InnerDialogLoaded()
+ // Resize and re-layout the dialog.
+ // Triggers the onresize event for the layout logic.
+ ResizeDialog : function( width, height )
{
- var oInnerDoc = document.getElementById('frmMain').contentWindow.document ;
+ FCKDomTools.SetElementStyles( window.frameElement,
+ {
+ 'width' : width + 'px',
+ 'height' : height + 'px'
+ } ) ;
- // Set the language direction.
- oInnerDoc.dir = window.dialogArguments.Editor.FCKLang.Dir ;
+ // If the skin have defined a function for resize fixes, call it now.
+ if ( typeof window.DoResizeFixes == 'function' )
+ window.DoResizeFixes() ;
+ },
- // Sets the Skin CSS.
- oInnerDoc.write( '<link href="' + window.dialogArguments.Editor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ;
+ // if bAutoSize is true, automatically fit the dialog size and layout to
+ // accomodate the inner iframe's internal height.
+ // if bAutoSize is false, then only the layout logic for the dialog decorations
+ // is run to accomodate the inner iframe's external height.
+ RefreshSize : function()
+ {
+ if ( bAutoSize )
+ {
+ var frmMain = $( 'frmMain' ) ;
+ var innerDoc = frmMain.contentWindow.document ;
+ var isStrict = FCKTools.IsStrictMode( innerDoc ) ;
- SetOnKeyDown( oInnerDoc ) ;
- DisableContextMenu( oInnerDoc ) ;
+ // Get the size of the frame contents.
+ var innerWidth = isStrict ? innerDoc.documentElement.scrollWidth : innerDoc.body.scrollWidth ;
+ var innerHeight = isStrict ? innerDoc.documentElement.scrollHeight : innerDoc.body.scrollHeight ;
- return window.dialogArguments.Editor ;
+ // Get the current frame size.
+ var frameSize = FCKTools.GetViewPaneSize( frmMain.contentWindow ) ;
+
+ var deltaWidth = innerWidth - frameSize.Width ;
+ var deltaHeight = innerHeight - frameSize.Height ;
+
+ // If the contents fits the current size.
+ if ( deltaWidth <= 0 && deltaHeight <= 0 )
+ return ;
+
+ var dialogWidth = frameElement.offsetWidth + Math.max( deltaWidth, 0 ) ;
+ var dialogHeight = frameElement.offsetHeight + Math.max( deltaHeight, 0 ) ;
+
+ this.ResizeDialog( dialogWidth, dialogHeight ) ;
+ }
+ this.RefreshContainerSize() ;
+ }
}
-function SetOkButton( showIt )
+ /**
+ * Safari seems to have a bug with the time when RefreshSize() is executed - it
+ * thinks frmMain's innerHeight is 0 if we query the value too soon after the
+ * page is loaded in some circumstances. (#1316)
+ * TODO : Maybe this is not needed anymore after #35.
+ */
+ if ( FCKBrowserInfo.IsSafari )
{
- document.getElementById('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ;
+ var originalRefreshSize = retval.RefreshSize ;
+
+ retval.RefreshSize = function()
+ {
+ FCKTools.SetTimeout( originalRefreshSize, 1, retval ) ;
+ }
}
-var bAutoSize = false ;
+ /**
+ * IE6 has a similar bug where it sometimes thinks $('contents') has an
+ * offsetHeight of 0 (#2114).
+ */
+ if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+ {
+ var originalRefreshContainerSize = retval.RefreshContainerSize ;
+ retval.RefreshContainerSize = function()
+ {
+ FCKTools.SetTimeout( originalRefreshContainerSize, 1, retval ) ;
+ }
+ }
-function SetAutoSize( autoSize )
+ window.onresize = function()
{
- bAutoSize = autoSize ;
- RefreshSize() ;
+ retval.RefreshContainerSize() ;
}
-function RefreshSize()
+ window.SetAutoSize = FCKTools.Bind( retval, retval.SetAutoSize ) ;
+
+ return retval ;
+}() ;
+
+// Manages the throbber image that appears if the inner part of dialog is taking too long to load.
+var Throbber = function()
{
- if ( bAutoSize )
+ var timer ;
+
+ var updateThrobber = function()
{
- var oInnerDoc = document.getElementById('frmMain').contentWindow.document ;
+ var throbberParent = $( 'throbberBlock' ) ;
+ var throbberBlocks = throbberParent.childNodes ;
+ var lastClass = throbberParent.lastChild.className ;
- var iFrameHeight ;
- if ( document.all )
- iFrameHeight = oInnerDoc.body.offsetHeight ;
- else
- iFrameHeight = document.getElementById('frmMain').contentWindow.innerHeight ;
+ // From the last to the second one, copy the class from the previous one.
+ for ( var i = throbberBlocks.length - 1 ; i > 0 ; i-- )
+ throbberBlocks[i].className = throbberBlocks[i-1].className ;
- var iInnerHeight = oInnerDoc.body.scrollHeight ;
+ // For the first one, copy the last class (rotation).
+ throbberBlocks[0].className = lastClass ;
+ }
- var iDiff = iInnerHeight - iFrameHeight ;
+ return {
+ Show : function( waitMilliseconds )
+ {
+ // Auto-setup the Show function to be called again after the
+ // requested amount of time.
+ if ( waitMilliseconds && waitMilliseconds > 0 )
+ {
+ timer = FCKTools.SetTimeout( this.Show, waitMilliseconds, this, null, window ) ;
+ return ;
+ }
- if ( iDiff > 0 )
+ var throbberParent = $( 'throbberBlock' ) ;
+
+ if (throbberParent.childNodes.length == 0)
{
- if ( document.all )
- window.dialogHeight = ( parseInt( window.dialogHeight, 10 ) + iDiff ) + 'px' ;
+ // Create the throbber blocks.
+ var classIds = [ 1,2,3,4,5,4,3,2 ] ;
+ while ( classIds.length > 0 )
+ throbberParent.appendChild( document.createElement( 'div' ) ).className = ' throbber_' + classIds.shift() ;
+ }
+
+ // Center the throbber.
+ var frm = $( 'contents' ) ;
+ var frmCoords = FCKTools.GetDocumentPosition( window, frm ) ;
+ var x = frmCoords.x + ( frm.offsetWidth - throbberParent.offsetWidth ) / 2 ;
+ var y = frmCoords.y + ( frm.offsetHeight - throbberParent.offsetHeight ) / 2 ;
+ throbberParent.style.left = parseInt( x, 10 ) + 'px' ;
+ throbberParent.style.top = parseInt( y, 10 ) + 'px' ;
+
+ // Show it.
+ throbberParent.style.visibility = '' ;
+
+ // Hide tabs and buttons:
+ $( 'Tabs' ).style.visibility = 'hidden' ;
+ $( 'PopupButtons' ).style.visibility = 'hidden' ;
+
+ // Setup the animation interval.
+ timer = setInterval( updateThrobber, 100 ) ;
+ },
+
+ Hide : function()
+ {
+ if ( timer )
+ {
+ clearInterval( timer ) ;
+ timer = null ;
+ }
+
+ $( 'throbberBlock' ).style.visibility = 'hidden' ;
+
+ // Show tabs and buttons:
+ $( 'Tabs' ).style.visibility = '' ;
+ $( 'PopupButtons' ).style.visibility = '' ;
+ }
+ } ;
+}() ;
+
+// Drag and drop handlers.
+var DragAndDrop = function()
+{
+ var registeredWindows = [] ;
+ var lastCoords ;
+ var currentPos ;
+
+ var cleanUpHandlers = function()
+ {
+ for ( var i = 0 ; i < registeredWindows.length ; i++ )
+ {
+ FCKTools.RemoveEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
+ FCKTools.RemoveEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
+ }
+ }
+
+ var dragMouseMoveHandler = function( evt )
+ {
+ if ( !lastCoords )
+ return ;
+
+ if ( !evt )
+ evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
+
+ // Updated the last coordinates.
+ var currentCoords =
+ {
+ x : evt.screenX,
+ y : evt.screenY
+ } ;
+
+ currentPos =
+ {
+ x : currentPos.x + ( currentCoords.x - lastCoords.x ),
+ y : currentPos.y + ( currentCoords.y - lastCoords.y )
+ } ;
+
+ lastCoords = currentCoords ;
+
+ frameElement.style.left = currentPos.x + 'px' ;
+ frameElement.style.top = currentPos.y + 'px' ;
+
+ if ( evt.preventDefault )
+ evt.preventDefault() ;
else
- window.resizeBy( 0, iDiff ) ;
+ evt.returnValue = false ;
}
+
+ var dragMouseUpHandler = function( evt )
+ {
+ if ( !lastCoords )
+ return ;
+ if ( !evt )
+ evt = FCKTools.GetElementDocument( this ).parentWindow.event ;
+ cleanUpHandlers() ;
+ lastCoords = null ;
}
+
+ return {
+
+ MouseDownHandler : function( evt )
+ {
+ var view = null ;
+ if ( !evt )
+ {
+ view = FCKTools.GetElementDocument( this ).parentWindow ;
+ evt = view.event ;
}
+ else
+ view = evt.view ;
-function Ok()
+ var target = evt.srcElement || evt.target ;
+ if ( target.id == 'closeButton' || target.className == 'PopupTab' || target.className == 'PopupTabSelected' )
+ return ;
+
+ lastCoords =
{
- if ( window.frames["frmMain"].Ok && window.frames["frmMain"].Ok() )
- Cancel() ;
+ x : evt.screenX,
+ y : evt.screenY
+ } ;
+
+ // Save the current IFRAME position.
+ currentPos =
+ {
+ x : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'left' ), 10 ),
+ y : parseInt( FCKDomTools.GetCurrentElementStyle( frameElement, 'top' ), 10 )
+ } ;
+
+ for ( var i = 0 ; i < registeredWindows.length ; i++ )
+ {
+ FCKTools.AddEventListener( registeredWindows[i].document, 'mousemove', dragMouseMoveHandler ) ;
+ FCKTools.AddEventListener( registeredWindows[i].document, 'mouseup', dragMouseUpHandler ) ;
}
-function Cancel( dontFireChange )
+ if ( evt.preventDefault )
+ evt.preventDefault() ;
+ else
+ evt.returnValue = false ;
+ },
+
+ RegisterHandlers : function( w )
{
- if ( !dontFireChange )
+ registeredWindows.push( w ) ;
+ }
+ }
+}() ;
+
+// Selection related functions.
+//(Became simple shortcuts after the fix for #1990)
+var Selection =
{
- // All dialog windows, by default, will fire the "OnSelectionChange"
- // event, no matter the Ok or Cancel button has been pressed.
- window.dialogArguments.Editor.FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ /**
+ * Ensures that the editing area contains an active selection. This is a
+ * requirement for IE, as it looses the selection when the focus moves to other
+ * frames.
+ */
+ EnsureSelection : function()
+ {
+ // Move the focus to the Cancel button so even if the dialog contains a
+ // contentEditable element the selection is properly restored in the editor #2496
+ window.focus() ;
+ $( 'btnCancel' ).focus() ;
+
+ FCK.Selection.Restore() ;
+ },
+
+ /**
+ * Get the FCKSelection object for the editor instance.
+ */
+ GetSelection : function()
+ {
+ return FCK.Selection ;
+ },
+
+ /**
+ * Get the selected element in the editing area (for object selections).
+ */
+ GetSelectedElement : function()
+ {
+ return FCK.Selection.GetSelectedElement() ;
}
- window.close() ;
}
-// Object that holds all available tabs.
+// Tab related functions.
+var Tabs = function()
+{
+ // Only element ids should be stored here instead of element references since setSelectedTab and TabDiv_OnClick
+ // would build circular references with the element references inside and cause memory leaks in IE6.
var oTabs = new Object() ;
+ var setSelectedTab = function( tabCode )
+ {
+ for ( var sCode in oTabs )
+ {
+ if ( sCode == tabCode )
+ $( oTabs[sCode] ).className = 'PopupTabSelected' ;
+ else
+ $( oTabs[sCode] ).className = 'PopupTab' ;
+ }
+
+ if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' )
+ window.frames["frmMain"].OnDialogTabChange( tabCode ) ;
+ }
+
function TabDiv_OnClick()
{
- SetSelectedTab( this.TabCode ) ;
+ setSelectedTab( this.TabCode ) ;
}
-function AddTab( tabCode, tabText, startHidden )
+ window.AddTab = function( tabCode, tabText, startHidden )
{
if ( typeof( oTabs[ tabCode ] ) != 'undefined' )
return ;
- var eTabsRow = document.getElementById( 'Tabs' ) ;
+ var eTabsRow = $( 'Tabs' ) ;
var oCell = eTabsRow.insertCell( eTabsRow.cells.length - 1 ) ;
oCell.noWrap = true ;
@@ -147,62 +475,70 @@
oDiv.innerHTML = tabText ;
oDiv.TabCode = tabCode ;
oDiv.onclick = TabDiv_OnClick ;
+ oDiv.id = Math.random() ;
if ( startHidden )
oDiv.style.display = 'none' ;
- eTabsRow = document.getElementById( 'TabsRow' ) ;
+ eTabsRow = $( 'TabsRow' ) ;
oCell.appendChild( oDiv ) ;
if ( eTabsRow.style.display == 'none' )
{
- var eTitleArea = document.getElementById( 'TitleArea' ) ;
+ var eTitleArea = $( 'TitleArea' ) ;
eTitleArea.className = 'PopupTitle' ;
oDiv.className = 'PopupTabSelected' ;
eTabsRow.style.display = '' ;
- if ( ! window.dialogArguments.Editor.FCKBrowserInfo.IsIE )
+ if ( window.onresize )
window.onresize() ;
}
- oTabs[ tabCode ] = oDiv ;
-}
+ oTabs[ tabCode ] = oDiv.id ;
-function SetSelectedTab( tabCode )
-{
- for ( var sCode in oTabs )
- {
- if ( sCode == tabCode )
- oTabs[sCode].className = 'PopupTabSelected' ;
- else
- oTabs[sCode].className = 'PopupTab' ;
- }
+ FCKTools.DisableSelection( oDiv ) ;
+ } ;
- if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' )
- window.frames["frmMain"].OnDialogTabChange( tabCode ) ;
-}
+ window.SetSelectedTab = setSelectedTab ;
-function SetTabVisibility( tabCode, isVisible )
+ window.SetTabVisibility = function( tabCode, isVisible )
{
- var oTab = oTabs[ tabCode ] ;
+ var oTab = $( oTabs[ tabCode ] ) ;
oTab.style.display = isVisible ? '' : 'none' ;
if ( ! isVisible && oTab.className == 'PopupTabSelected' )
{
for ( var sCode in oTabs )
{
- if ( oTabs[sCode].style.display != 'none' )
+ if ( $( oTabs[sCode] ).style.display != 'none' )
{
- SetSelectedTab( sCode ) ;
+ setSelectedTab( sCode ) ;
break ;
}
}
}
-}
+ } ;
+}() ;
-function SetOnKeyDown( targetDocument )
+// readystatechange handler for registering drag and drop handlers in cover
+// iframes, defined out here to avoid memory leak.
+// Do NOT put this function as a private function as it will induce memory leak
+// in IE and it's not detectable with Drip or sIEve and undetectable leaks are
+// really nasty (sigh).
+var onReadyRegister = function()
+{
+ if ( this.readyState != 'complete' )
+ return ;
+ DragAndDrop.RegisterHandlers( this.contentWindow ) ;
+} ;
+
+// The business logic of the dialog, dealing with operational things like
+// dialog open/dialog close/enable/disable/etc.
+(function()
+{
+ var setOnKeyDown = function( targetDocument )
{
targetDocument.onkeydown = function ( e )
{
@@ -215,110 +551,269 @@
return true ;
Ok() ;
return false ;
+
case 27 : // ESC
Cancel() ;
return false ;
- break ;
}
return true ;
}
-}
-SetOnKeyDown( document ) ;
-
-function DisableContextMenu( targetDocument )
-{
- if ( window.dialogArguments.Editor.FCKBrowserInfo.IsIE ) return ;
+ } ;
- // Disable Right-Click
- var oOnContextMenu = function( e )
+ var contextMenuBlocker = function( e )
{
var sTagName = e.target.tagName ;
if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) )
e.preventDefault() ;
- }
- targetDocument.addEventListener( 'contextmenu', oOnContextMenu, true ) ;
-}
-DisableContextMenu( document ) ;
+ } ;
-if ( ! window.dialogArguments.Editor.FCKBrowserInfo.IsIE )
+ var disableContextMenu = function( targetDocument )
{
- window.onresize = function()
+ if ( FCKBrowserInfo.IsIE )
+ return ;
+
+ targetDocument.addEventListener( 'contextmenu', contextMenuBlocker, true ) ;
+ } ;
+
+ // Program entry point.
+ window.Init = function()
{
- var oFrame = document.getElementById("frmMain") ;
+ $( 'contents' ).dir = langDir;
- if ( ! oFrame )
- return ;
+ // Start the throbber timer.
+ Throbber.Show( 1000 ) ;
- oFrame.height = 0 ;
+ Sizer.RefreshContainerSize() ;
+ LoadInnerDialog() ;
- var oCell = document.getElementById("FrameCell") ;
- var iHeight = oCell.offsetHeight ;
+ FCKTools.DisableSelection( document.body ) ;
- oFrame.height = iHeight - 2 ;
+ // Make the title area draggable.
+ var titleElement = $( 'header' ) ;
+ titleElement.onmousedown = DragAndDrop.MouseDownHandler ;
+
+ // Connect mousemove and mouseup events from dialog frame and outer window to dialog dragging logic.
+ DragAndDrop.RegisterHandlers( window ) ;
+ DragAndDrop.RegisterHandlers( Args().TopWindow ) ;
+
+ // Disable the previous dialog if it exists.
+ if ( ParentDialog() )
+ {
+ ParentDialog().contentWindow.SetEnabled( false ) ;
+ if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+ {
+ var currentParent = ParentDialog() ;
+ while ( currentParent )
+ {
+ var blockerFrame = currentParent.contentWindow.$( 'blocker' ) ;
+ if ( blockerFrame.readyState == 'complete' )
+ DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
+ else
+ blockerFrame.onreadystatechange = onReadyRegister ;
+ currentParent = ParentDialog( currentParent ) ;
}
}
-
-if ( window.dialogArguments.Editor.FCKBrowserInfo.IsIE )
+ else
{
- function Window_OnBeforeUnload()
+ var currentParent = ParentDialog() ;
+ while ( currentParent )
{
- for ( var t in oTabs )
- oTabs[t] = null ;
-
- window.dialogArguments.Editor = null ;
+ DragAndDrop.RegisterHandlers( currentParent.contentWindow ) ;
+ currentParent = ParentDialog( currentParent ) ;
+ }
}
- window.attachEvent( "onbeforeunload", Window_OnBeforeUnload ) ;
}
-function Window_OnClose()
+ // If this is the only dialog on screen, enable the background cover.
+ if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
{
- window.dialogArguments.Editor.FCKFocusManager.Unlock() ;
+ var blockerFrame = FCKDialog.GetCover().firstChild ;
+ if ( blockerFrame.readyState == 'complete' )
+ DragAndDrop.RegisterHandlers( blockerFrame.contentWindow ) ;
+ else
+ blockerFrame.onreadystatechange = onReadyRegister;
}
-if ( window.addEventListener )
- window.addEventListener( 'unload', Window_OnClose, false ) ;
+ // Add Enter/Esc hotkeys and disable context menu for the dialog.
+ setOnKeyDown( document ) ;
+ disableContextMenu( document ) ;
+ } ;
+
+ window.LoadInnerDialog = function()
+ {
+ if ( window.onresize )
+ window.onresize() ;
+
+ // First of all, translate the dialog box contents.
+ E.FCKLanguageManager.TranslatePage( document ) ;
+
+ // Create the IFRAME that holds the dialog contents.
+ $( 'innerContents' ).innerHTML = '<iframe id="frmMain" src="' + Args().Page + '" name="frmMain" frameborder="0" width="100%" height="100%" scrolling="auto" style="visibility: hidden;" allowtransparency="true"><\/iframe>' ;
+ } ;
+
+ window.InnerDialogLoaded = function()
+ {
+ // If the dialog has been closed before the iframe is loaded, do nothing.
+ if ( !frameElement.parentNode )
+ return null ;
+
+ Throbber.Hide() ;
+
+ var frmMain = $('frmMain') ;
+ var innerWindow = frmMain.contentWindow ;
+ var innerDoc = innerWindow.document ;
+
+ // Show the loaded iframe.
+ frmMain.style.visibility = '' ;
+
+ // Set the language direction.
+ innerDoc.documentElement.dir = langDir ;
+
+ // Sets the Skin CSS.
+ innerDoc.write( FCKTools.GetStyleHtml( FCKConfig.SkinDialogCSS ) ) ;
+
+ setOnKeyDown( innerDoc ) ;
+ disableContextMenu( innerDoc ) ;
+
+ Sizer.RefreshContainerSize();
+ DragAndDrop.RegisterHandlers( innerWindow ) ;
+
+ innerWindow.focus() ;
+
+ return E ;
+ } ;
+
+ window.SetOkButton = function( showIt )
+ {
+ $('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ;
+ } ;
+
+ window.Ok = function()
+ {
+ Selection.EnsureSelection() ;
+
+ var frmMain = window.frames["frmMain"] ;
+
+ if ( frmMain.Ok && frmMain.Ok() )
+ CloseDialog() ;
+ else
+ frmMain.focus() ;
+ } ;
+
+ window.Cancel = function( dontFireChange )
+ {
+ Selection.EnsureSelection() ;
+ return CloseDialog( dontFireChange ) ;
+ } ;
+
+ window.CloseDialog = function( dontFireChange )
+ {
+ Throbber.Hide() ;
+
+ // Points the src to a non-existent location to avoid loading errors later, in case the dialog
+ // haven't been completed loaded at this point.
+ if ( $( 'frmMain' ) )
+ $( 'frmMain' ).src = FCKTools.GetVoidUrl() ;
+
+ if ( !dontFireChange && !FCK.EditMode )
+ {
+ // All dialog windows, by default, will fire the "OnSelectionChange"
+ // event, no matter the Ok or Cancel button has been pressed.
+ // It seems that OnSelectionChange may enter on a concurrency state
+ // on some situations (#1965), so we should put the event firing in
+ // the execution queue instead of executing it immediately.
+ setTimeout( function()
+ {
+ FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+ }, 0 ) ;
+ }
+
+ FCKDialog.OnDialogClose( window ) ;
+ } ;
+
+ window.SetEnabled = function( isEnabled )
+ {
+ var cover = $( 'cover' ) ;
+ cover.style.display = isEnabled ? 'none' : '' ;
+
+ if ( FCKBrowserInfo.IsIE && !FCKBrowserInfo.IsIE7 )
+ {
+ if ( !isEnabled )
+ {
+ // Inser the blocker IFRAME before the cover.
+ var blocker = document.createElement( 'iframe' ) ;
+ blocker.src = FCKTools.GetVoidUrl() ;
+ blocker.hideFocus = true ;
+ blocker.frameBorder = 0 ;
+ blocker.id = blocker.className = 'blocker' ;
+ cover.appendChild( blocker ) ;
+ }
+ else
+ {
+ var blocker = $( 'blocker' ) ;
+ if ( blocker && blocker.parentNode )
+ blocker.parentNode.removeChild( blocker ) ;
+ }
+ }
+ } ;
+})() ;
+// ]]>
</script>
</head>
- <body onload="LoadInnerDialog();" class="PopupBody">
- <table height="100%" cellspacing="0" cellpadding="0" width="100%" border="0">
- <tr>
- <td id="TitleArea" class="PopupTitle PopupTitleBorder">
+ <body onload="Init();" class="PopupBody">
+ <div class="contents" id="contents">
+ <div id="header">
+ <div id="TitleArea" class="PopupTitle PopupTitleBorder">
<script type="text/javascript">
-document.write( sTitle ) ;
+// <![CDATA[
+document.write( Args().Title ) ;
+// ]]>
</script>
- </td>
- </tr>
- <tr id="TabsRow" style="DISPLAY: none">
- <td class="PopupTabArea">
+ <div id="closeButton" onclick="Cancel();"></div>
+ </div>
+ <div id="TabsRow" class="PopupTabArea" style="display: none">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
- <tr id="Tabs" onselectstart="return false;">
+ <tr id="Tabs">
<td class="PopupTabEmptyArea"> </td>
<td class="PopupTabEmptyArea" width="100%"> </td>
</tr>
</table>
- </td>
- </tr>
- <tr>
- <td id="FrameCell" height="100%" valign="top">
- <iframe id="frmMain" src="javascript:void(0)" name="frmMain" frameborder="0" height="100%" width="100%" scrolling="auto">
- </iframe>
- </td>
- </tr>
- <tr>
- <td class="PopupButtons">
+ </div>
+ </div>
+ <div id="innerContents"></div>
+ <div id="PopupButtons" class="PopupButtons">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="100%"> </td>
<td nowrap="nowrap">
- <input id="btnOk" style="VISIBILITY: hidden;" type="button" value="Ok" class="Button" onclick="Ok();" fckLang="DlgBtnOK" />
+ <input id="btnOk" style="visibility: hidden;" type="button" value="Ok" class="Button" onclick="Ok();" fckLang="DlgBtnOK" />
<input id="btnCancel" type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" />
</td>
</tr>
</table>
- </td>
- </tr>
- </table>
+ </div>
+ </div>
+ <div class="tl"></div>
+ <div class="tc"></div>
+ <div class="tr"></div>
+ <div class="ml"></div>
+ <div class="mr"></div>
+ <div class="bl"></div>
+ <div class="bc"></div>
+ <div class="br"></div>
+ <div class="cover" id="cover" style="display:none"></div>
+ <div id="throbberBlock" style="position: absolute; visibility: hidden"></div>
+ <script type="text/javascript">
+// <![CDATA[
+ // Set the class name for language direction.
+ document.body.className += ' ' + langDir ;
+
+ var cover = $( 'cover' ) ;
+ cover.style.backgroundColor = FCKConfig.BackgroundBlockerColor ;
+ FCKDomTools.SetOpacity( cover, FCKConfig.BackgroundBlockerOpacity ) ;
+// ]]>
+ </script>
</body>
</html>
\ No newline at end of file
Index: fckeditor.original.html
===================================================================
RCS file: /home/cvs/cvsroot/freeside/httemplate/elements/fckeditor/editor/fckeditor.original.html,v
retrieving revision 1.1
retrieving revision 1.1.6.1
diff -u -w -d -r1.1 -r1.1.6.1
--- fckeditor.original.html 1 Aug 2007 22:25:11 -0000 1.1
+++ fckeditor.original.html 16 Mar 2010 08:34:45 -0000 1.1.6.1
@@ -1,7 +1,7 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
@@ -21,16 +21,87 @@
*
* Main page that holds the editor.
-->
-<html xmlns="http://www.w3.org/1999/xhtml">
+<html>
<head>
<title>FCKeditor</title>
- <meta name="robots" content="noindex, nofollow" />
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="noindex, nofollow">
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- @Packager.RemoveLine
- <meta http-equiv="Cache-Control" content="public" />
+ <meta http-equiv="Cache-Control" content="public">
@Packager.RemoveLine -->
<script type="text/javascript">
+// #1645: Alert the user if opening FCKeditor in FF3 from local filesystem
+// without security.fileuri.strict_origin_policy disabled.
+if ( document.location.protocol == 'file:' )
+{
+ try
+ {
+ window.parent.document.domain ;
+ }
+ catch ( e )
+ {
+ window.addEventListener( 'load', function()
+ {
+ document.body.innerHTML = '\
+ <div style="border: 1px red solid; font-family: arial; font-size: 12px; color: red; padding:10px;">\
+ <p>\
+ <b>Your browser security settings don\'t allow FCKeditor to be opened from\
+ the local filesystem.<\/b>\
+ <\/p>\
+ <p>\
+ Please open the <b>about:config<\/b> page and disable the\
+ "security.fileuri.strict_origin_policy" option; then load this page again.\
+ <\/p>\
+ <p>\
+ Check our <a href="http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/FAQ#ff3perms">FAQ<\/a>\
+ for more information.\
+ <\/p>\
+ <\/div>' ;
+ }, false ) ;
+ }
+}
+
+// Save a reference to the default domain.
+var FCK_ORIGINAL_DOMAIN ;
+
+// Automatically detect the correct document.domain (#123).
+(function()
+{
+ var d = FCK_ORIGINAL_DOMAIN = document.domain ;
+
+ while ( true )
+ {
+ // Test if we can access a parent property.
+ try
+ {
+ var test = window.parent.document.domain ;
+ break ;
+ }
+ catch( e ) {}
+
+ // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+ d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+ if ( d.length == 0 )
+ break ; // It was not able to detect the domain.
+
+ try
+ {
+ document.domain = d ;
+ }
+ catch (e)
+ {
+ break ;
+ }
+ }
+})() ;
+
+// Save a reference to the detected runtime domain.
+var FCK_RUNTIME_DOMAIN = document.domain ;
+
+var FCK_IS_CUSTOM_DOMAIN = ( FCK_ORIGINAL_DOMAIN != FCK_RUNTIME_DOMAIN ) ;
+
// Instead of loading scripts and CSSs using inline tags, all scripts are
// loaded by code. In this way we can guarantee the correct processing order,
// otherwise external scripts and inline scripts could be executed in an
@@ -38,16 +109,11 @@
function LoadScript( url )
{
- document.write( '<scr' + 'ipt type="text/javascript" src="' + url + '" onerror="alert(\'Error loading \' + this.src);"><\/scr' + 'ipt>' ) ;
-}
-
-function LoadCss( url )
-{
- document.write( '<link href="' + url + '" type="text/css" rel="stylesheet" onerror="alert(\'Error loading \' + this.src);" />' ) ;
+ document.write( '<scr' + 'ipt type="text/javascript" src="' + url + '"><\/scr' + 'ipt>' ) ;
}
// Main editor scripts.
-var sSuffix = /msie/.test( navigator.userAgent.toLowerCase() ) ? 'ie' : 'gecko' ;
+var sSuffix = ( /*@cc_on!@*/false ) ? 'ie' : 'gecko' ;
/* @Packager.RemoveLine
LoadScript( 'js/fckeditorcode_' + sSuffix + '.js' ) ;
@@ -63,11 +129,12 @@
LoadScript( '_source/internals/fckbrowserinfo.js' ) ;
LoadScript( '_source/internals/fckurlparams.js' ) ;
LoadScript( '_source/classes/fckevents.js' ) ;
+LoadScript( '_source/classes/fckdataprocessor.js' ) ;
LoadScript( '_source/internals/fck.js' ) ;
LoadScript( '_source/internals/fck_' + sSuffix + '.js' ) ;
LoadScript( '_source/internals/fckconfig.js' ) ;
-LoadScript( '_source/internals/fckdebug.js' ) ;
+LoadScript( '_source/internals/fckdebug_empty.js' ) ;
LoadScript( '_source/internals/fckdomtools.js' ) ;
LoadScript( '_source/internals/fcktools.js' ) ;
LoadScript( '_source/internals/fcktools_' + sSuffix + '.js' ) ;
@@ -80,16 +147,21 @@
LoadScript( '_source/internals/fckxhtml.js' ) ;
LoadScript( '_source/internals/fckxhtml_' + sSuffix + '.js' ) ;
LoadScript( '_source/internals/fckcodeformatter.js' ) ;
-LoadScript( '_source/internals/fckundo_' + sSuffix + '.js' ) ;
+LoadScript( '_source/internals/fckundo.js' ) ;
LoadScript( '_source/classes/fckeditingarea.js' ) ;
LoadScript( '_source/classes/fckkeystrokehandler.js' ) ;
+LoadScript( 'dtd/fck_xhtml10transitional.js' ) ;
+LoadScript( '_source/classes/fckstyle.js' ) ;
+LoadScript( '_source/internals/fckstyles.js' ) ;
+
LoadScript( '_source/internals/fcklisthandler.js' ) ;
LoadScript( '_source/classes/fckelementpath.js' ) ;
LoadScript( '_source/classes/fckdomrange.js' ) ;
LoadScript( '_source/classes/fckdocumentfragment_' + sSuffix + '.js' ) ;
LoadScript( '_source/classes/fckw3crange.js' ) ;
LoadScript( '_source/classes/fckdomrange_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckdomrangeiterator.js' ) ;
LoadScript( '_source/classes/fckenterkey.js' ) ;
LoadScript( '_source/internals/fckdocumentprocessor.js' ) ;
@@ -98,20 +170,25 @@
LoadScript( '_source/internals/fcktablehandler.js' ) ;
LoadScript( '_source/internals/fcktablehandler_' + sSuffix + '.js' ) ;
+LoadScript( '_source/classes/fckxml.js' ) ;
LoadScript( '_source/classes/fckxml_' + sSuffix + '.js' ) ;
-LoadScript( '_source/classes/fckstyledef.js' ) ;
-LoadScript( '_source/classes/fckstyledef_' + sSuffix + '.js' ) ;
-LoadScript( '_source/classes/fckstylesloader.js' ) ;
LoadScript( '_source/commandclasses/fcknamedcommand.js' ) ;
+LoadScript( '_source/commandclasses/fckstylecommand.js' ) ;
LoadScript( '_source/commandclasses/fck_othercommands.js' ) ;
+LoadScript( '_source/commandclasses/fckshowblocks.js' ) ;
LoadScript( '_source/commandclasses/fckspellcheckcommand_' + sSuffix + '.js' ) ;
LoadScript( '_source/commandclasses/fcktextcolorcommand.js' ) ;
LoadScript( '_source/commandclasses/fckpasteplaintextcommand.js' ) ;
LoadScript( '_source/commandclasses/fckpastewordcommand.js' ) ;
LoadScript( '_source/commandclasses/fcktablecommand.js' ) ;
-LoadScript( '_source/commandclasses/fckstylecommand.js' ) ;
LoadScript( '_source/commandclasses/fckfitwindow.js' ) ;
+LoadScript( '_source/commandclasses/fcklistcommands.js' ) ;
+LoadScript( '_source/commandclasses/fckjustifycommands.js' ) ;
+LoadScript( '_source/commandclasses/fckindentcommands.js' ) ;
+LoadScript( '_source/commandclasses/fckblockquotecommand.js' ) ;
+LoadScript( '_source/commandclasses/fckcorestylecommand.js' ) ;
+LoadScript( '_source/commandclasses/fckremoveformatcommand.js' ) ;
LoadScript( '_source/internals/fckcommands.js' ) ;
LoadScript( '_source/classes/fckpanel.js' ) ;
@@ -120,22 +197,23 @@
LoadScript( '_source/classes/fcktoolbarbutton.js' ) ;
LoadScript( '_source/classes/fckspecialcombo.js' ) ;
LoadScript( '_source/classes/fcktoolbarspecialcombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarstylecombo.js' ) ;
+LoadScript( '_source/classes/fcktoolbarfontformatcombo.js' ) ;
LoadScript( '_source/classes/fcktoolbarfontscombo.js' ) ;
LoadScript( '_source/classes/fcktoolbarfontsizecombo.js' ) ;
-LoadScript( '_source/classes/fcktoolbarfontformatcombo.js' ) ;
-LoadScript( '_source/classes/fcktoolbarstylecombo.js' ) ;
LoadScript( '_source/classes/fcktoolbarpanelbutton.js' ) ;
+LoadScript( '_source/internals/fckscayt.js' ) ;
LoadScript( '_source/internals/fcktoolbaritems.js' ) ;
LoadScript( '_source/classes/fcktoolbar.js' ) ;
LoadScript( '_source/classes/fcktoolbarbreak_' + sSuffix + '.js' ) ;
LoadScript( '_source/internals/fcktoolbarset.js' ) ;
LoadScript( '_source/internals/fckdialog.js' ) ;
-LoadScript( '_source/internals/fckdialog_' + sSuffix + '.js' ) ;
LoadScript( '_source/classes/fckmenuitem.js' ) ;
LoadScript( '_source/classes/fckmenublock.js' ) ;
LoadScript( '_source/classes/fckmenublockpanel.js' ) ;
LoadScript( '_source/classes/fckcontextmenu.js' ) ;
LoadScript( '_source/internals/fck_contextmenu.js' ) ;
+LoadScript( '_source/classes/fckhtmliterator.js' ) ;
LoadScript( '_source/classes/fckplugin.js' ) ;
LoadScript( '_source/internals/fckplugins.js' ) ;
@@ -147,6 +225,10 @@
</script>
<script type="text/javascript">
+// Adobe AIR compatibility file.
+if ( FCKBrowserInfo.IsAIR )
+ LoadScript( 'js/fckadobeair.js' ) ;
+
if ( FCKBrowserInfo.IsIE )
{
// Remove IE mouse flickering.
@@ -166,6 +248,11 @@
FCK.IECleanup.AddItem( FCK, FCK_Cleanup ) ;
}
+// The first function to be called on selection change must the the styles
+// change checker, because the result of its processing may be used by another
+// functions listening to the same event.
+FCK.Events.AttachEvent( 'OnSelectionChange', function() { FCKStyles.CheckSelectionChanges() ; } ) ;
+
// The config hidden field is processed immediately, because
// CustomConfigurationsPath may be set in the page.
FCKConfig.ProcessHiddenField() ;
@@ -182,8 +269,28 @@
FCKConfig_PreProcess() ;
+// Load the full debug script.
+if ( FCKConfig.Debug )
+ LoadScript( '_source/internals/fckdebug.js' ) ;
+
+ </script>
+ <script type="text/javascript">
+
+var FCK_InternalCSS = FCKConfig.BasePath + 'css/fck_internal.css' ; // @Packager.RemoveLine
+var FCK_ShowTableBordersCSS = FCKConfig.BasePath + 'css/fck_showtableborders_gecko.css' ; // @Packager.RemoveLine
+/* @Packager.RemoveLine
+// CSS minified by http://iceyboard.no-ip.org/projects/css_compressor (see _dev/css_compression.txt).
+var FCK_InternalCSS = FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', 'html{min-height:100%}table.FCK__ShowTableBorders,table.FCK__ShowTableBorders td,table.FCK__ShowTableBorders th{border:#d3d3d3 1px solid}form{border:1px dotted #F00;padding:2px}.FCK__Flash{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_flashlogo.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__UnknownObject{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_plugin.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__Anchor{border:1px dotted #00F;background-position:center center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;width:16px;height:15px;vertical-align:middle}.FCK__AnchorC{border:1px dotted #00F;background-position:1px center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}a[name]{border:1px dotted #00F;background-position
:0 center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}.FCK__PageBreak{background-position:center center;background-image:url(images/fck_pagebreak.gif);background-repeat:no-repeat;clear:both;display:block;float:none;width:100%;border-top:#999 1px dotted;border-bottom:#999 1px dotted;border-right:0;border-left:0;height:5px}.FCK__InputHidden{width:19px;height:18px;background-image:url(images/fck_hiddenfield.gif);background-repeat:no-repeat;vertical-align:text-bottom;background-position:center center}.FCK__ShowBlocks p,.FCK__ShowBlocks div,.FCK__ShowBlocks pre,.FCK__ShowBlocks address,.FCK__ShowBlocks blockquote,.FCK__ShowBlocks h1,.FCK__ShowBlocks h2,.FCK__ShowBlocks h3,.FCK__ShowBlocks h4,.FCK__ShowBlocks h5,.FCK__ShowBlocks h6{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px;padding-left:8px}.FCK__ShowBlocks p{background-image:url(images/block_p.png)}.FCK__ShowBlocks div{background-image:url(images/block_div.png)
}.FCK__ShowBlocks pre{background-image:url(images/block_pre.png)}.FCK__ShowBlocks address{background-image:url(images/block_address.png)}.FCK__ShowBlocks blockquote{background-image:url(images/block_blockquote.png)}.FCK__ShowBlocks h1{background-image:url(images/block_h1.png)}.FCK__ShowBlocks h2{background-image:url(images/block_h2.png)}.FCK__ShowBlocks h3{background-image:url(images/block_h3.png)}.FCK__ShowBlocks h4{background-image:url(images/block_h4.png)}.FCK__ShowBlocks h5{background-image:url(images/block_h5.png)}.FCK__ShowBlocks h6{background-image:url(images/block_h6.png)}' ) ;
+var FCK_ShowTableBordersCSS = FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', 'table:not([border]),table:not([border]) > tr > td,table:not([border]) > tr > th,table:not([border]) > tbody > tr > td,table:not([border]) > tbody > tr > th,table:not([border]) > thead > tr > td,table:not([border]) > thead > tr > th,table:not([border]) > tfoot > tr > td,table:not([border]) > tfoot > tr > th,table[border=\"0\"],table[border=\"0\"] > tr > td,table[border=\"0\"] > tr > th,table[border=\"0\"] > tbody > tr > td,table[border=\"0\"] > tbody > tr > th,table[border=\"0\"] > thead > tr > td,table[border=\"0\"] > thead > tr > th,table[border=\"0\"] > tfoot > tr > td,table[border=\"0\"] > tfoot > tr > th{border:#d3d3d3 1px dotted}' ) ;
+ at Packager.RemoveLine */
+
+// Popup the debug window if debug mode is set to true. It guarantees that the
+// first debug message will not be lost.
+if ( FCKConfig.Debug )
+ FCKDebug._GetWindow() ;
+
// Load the active skin CSS.
-LoadCss( FCKConfig.SkinPath + 'fck_editor.css' ) ;
+document.write( FCKTools.GetStyleHtml( FCKConfig.SkinEditorCSS ) ) ;
// Load the language file.
FCKLanguageManager.Initialize() ;
@@ -203,10 +310,6 @@
// Set the editor interface direction.
window.document.dir = FCKLang.Dir ;
-// Activate pasting operations.
-if ( FCKConfig.ForcePasteAsPlainText || FCKConfig.AutoDetectPasteFromWord )
- FCK.Events.AttachEvent( 'OnPaste', FCK.Paste ) ;
-
</script>
<script type="text/javascript">
@@ -258,6 +361,7 @@
if ( FCKBrowserInfo.IsGecko )
FCKTools.RunFunction( window.onresize ) ;
+ if ( !FCKConfig.PreventSubmitHandler )
_AttachFormSubmitToAPI() ;
FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
@@ -269,13 +373,16 @@
}
}
-// Gecko browsers doens't calculate well that IFRAME size so we must
+// Gecko and Webkit browsers don't calculate well the IFRAME size so we must
// recalculate it every time the window size changes.
-if ( FCKBrowserInfo.IsGecko )
+if ( FCKBrowserInfo.IsGecko || ( FCKBrowserInfo.IsSafari && !FCKBrowserInfo.IsSafari3 ) )
{
- function Window_OnResize()
+ window.onresize = function( e )
{
- if ( FCKBrowserInfo.IsOpera )
+ // Running in Firefox's chrome makes the window receive the event including subframes.
+ // we care only about this window. Ticket #1642.
+ // #2002: The originalTarget from the event can be the current document, the window, or the editing area.
+ if ( e && e.originalTarget && e.originalTarget !== document && e.originalTarget !== window && (!e.originalTarget.ownerDocument || e.originalTarget.ownerDocument != document ))
return ;
var oCell = document.getElementById( 'xEditingArea' ) ;
@@ -283,11 +390,10 @@
var eInnerElement = oCell.firstChild ;
if ( eInnerElement )
{
- eInnerElement.style.height = 0 ;
- eInnerElement.style.height = oCell.scrollHeight - 2 ;
+ eInnerElement.style.height = '0px' ;
+ eInnerElement.style.height = ( oCell.scrollHeight - 2 ) + 'px' ;
}
}
- window.onresize = Window_OnResize ;
}
</script>
Index: fckeditor.html
===================================================================
RCS file: /home/cvs/cvsroot/freeside/httemplate/elements/fckeditor/editor/fckeditor.html,v
retrieving revision 1.1
retrieving revision 1.1.6.1
diff -u -w -d -r1.1 -r1.1.6.1
--- fckeditor.html 1 Aug 2007 22:25:11 -0000 1.1
+++ fckeditor.html 16 Mar 2010 08:34:45 -0000 1.1.6.1
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
@@ -21,14 +21,85 @@
*
* Main page that holds the editor.
-->
-<html xmlns="http://www.w3.org/1999/xhtml">
+<html>
<head>
<title>FCKeditor</title>
- <meta name="robots" content="noindex, nofollow" />
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="Cache-Control" content="public" />
+ <meta name="robots" content="noindex, nofollow">
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta http-equiv="Cache-Control" content="public">
<script type="text/javascript">
+// #1645: Alert the user if opening FCKeditor in FF3 from local filesystem
+// without security.fileuri.strict_origin_policy disabled.
+if ( document.location.protocol == 'file:' )
+{
+ try
+ {
+ window.parent.document.domain ;
+ }
+ catch ( e )
+ {
+ window.addEventListener( 'load', function()
+ {
+ document.body.innerHTML = '\
+ <div style="border: 1px red solid; font-family: arial; font-size: 12px; color: red; padding:10px;">\
+ <p>\
+ <b>Your browser security settings don\'t allow FCKeditor to be opened from\
+ the local filesystem.<\/b>\
+ <\/p>\
+ <p>\
+ Please open the <b>about:config<\/b> page and disable the\
+ "security.fileuri.strict_origin_policy" option; then load this page again.\
+ <\/p>\
+ <p>\
+ Check our <a href="http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/FAQ#ff3perms">FAQ<\/a>\
+ for more information.\
+ <\/p>\
+ <\/div>' ;
+ }, false ) ;
+ }
+}
+
+// Save a reference to the default domain.
+var FCK_ORIGINAL_DOMAIN ;
+
+// Automatically detect the correct document.domain (#123).
+(function()
+{
+ var d = FCK_ORIGINAL_DOMAIN = document.domain ;
+
+ while ( true )
+ {
+ // Test if we can access a parent property.
+ try
+ {
+ var test = window.parent.document.domain ;
+ break ;
+ }
+ catch( e ) {}
+
+ // Remove a domain part: www.mytest.example.com => mytest.example.com => example.com ...
+ d = d.replace( /.*?(?:\.|$)/, '' ) ;
+
+ if ( d.length == 0 )
+ break ; // It was not able to detect the domain.
+
+ try
+ {
+ document.domain = d ;
+ }
+ catch (e)
+ {
+ break ;
+ }
+ }
+})() ;
+
+// Save a reference to the detected runtime domain.
+var FCK_RUNTIME_DOMAIN = document.domain ;
+
+var FCK_IS_CUSTOM_DOMAIN = ( FCK_ORIGINAL_DOMAIN != FCK_RUNTIME_DOMAIN ) ;
+
// Instead of loading scripts and CSSs using inline tags, all scripts are
// loaded by code. In this way we can guarantee the correct processing order,
// otherwise external scripts and inline scripts could be executed in an
@@ -36,16 +107,11 @@
function LoadScript( url )
{
- document.write( '<scr' + 'ipt type="text/javascript" src="' + url + '" onerror="alert(\'Error loading \' + this.src);"><\/scr' + 'ipt>' ) ;
-}
-
-function LoadCss( url )
-{
- document.write( '<link href="' + url + '" type="text/css" rel="stylesheet" onerror="alert(\'Error loading \' + this.src);" />' ) ;
+ document.write( '<scr' + 'ipt type="text/javascript" src="' + url + '"><\/scr' + 'ipt>' ) ;
}
// Main editor scripts.
-var sSuffix = /msie/.test( navigator.userAgent.toLowerCase() ) ? 'ie' : 'gecko' ;
+var sSuffix = ( /*@cc_on!@*/false ) ? 'ie' : 'gecko' ;
LoadScript( 'js/fckeditorcode_' + sSuffix + '.js' ) ;
@@ -55,6 +121,10 @@
</script>
<script type="text/javascript">
+// Adobe AIR compatibility file.
+if ( FCKBrowserInfo.IsAIR )
+ LoadScript( 'js/fckadobeair.js' ) ;
+
if ( FCKBrowserInfo.IsIE )
{
// Remove IE mouse flickering.
@@ -74,6 +144,11 @@
FCK.IECleanup.AddItem( FCK, FCK_Cleanup ) ;
}
+// The first function to be called on selection change must the the styles
+// change checker, because the result of its processing may be used by another
+// functions listening to the same event.
+FCK.Events.AttachEvent( 'OnSelectionChange', function() { FCKStyles.CheckSelectionChanges() ; } ) ;
+
// The config hidden field is processed immediately, because
// CustomConfigurationsPath may be set in the page.
FCKConfig.ProcessHiddenField() ;
@@ -90,8 +165,24 @@
FCKConfig_PreProcess() ;
+// Load the full debug script.
+if ( FCKConfig.Debug )
+ LoadScript( '_source/internals/fckdebug.js' ) ;
+
+ </script>
+ <script type="text/javascript">
+
+// CSS minified by http://iceyboard.no-ip.org/projects/css_compressor (see _dev/css_compression.txt).
+var FCK_InternalCSS = FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', 'html{min-height:100%}table.FCK__ShowTableBorders,table.FCK__ShowTableBorders td,table.FCK__ShowTableBorders th{border:#d3d3d3 1px solid}form{border:1px dotted #F00;padding:2px}.FCK__Flash{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_flashlogo.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__UnknownObject{border:#a9a9a9 1px solid;background-position:center center;background-image:url(images/fck_plugin.gif);background-repeat:no-repeat;width:80px;height:80px}.FCK__Anchor{border:1px dotted #00F;background-position:center center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;width:16px;height:15px;vertical-align:middle}.FCK__AnchorC{border:1px dotted #00F;background-position:1px center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}a[name]{border:1px dotted #00F;background-position
:0 center;background-image:url(images/fck_anchor.gif);background-repeat:no-repeat;padding-left:18px}.FCK__PageBreak{background-position:center center;background-image:url(images/fck_pagebreak.gif);background-repeat:no-repeat;clear:both;display:block;float:none;width:100%;border-top:#999 1px dotted;border-bottom:#999 1px dotted;border-right:0;border-left:0;height:5px}.FCK__InputHidden{width:19px;height:18px;background-image:url(images/fck_hiddenfield.gif);background-repeat:no-repeat;vertical-align:text-bottom;background-position:center center}.FCK__ShowBlocks p,.FCK__ShowBlocks div,.FCK__ShowBlocks pre,.FCK__ShowBlocks address,.FCK__ShowBlocks blockquote,.FCK__ShowBlocks h1,.FCK__ShowBlocks h2,.FCK__ShowBlocks h3,.FCK__ShowBlocks h4,.FCK__ShowBlocks h5,.FCK__ShowBlocks h6{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px;padding-left:8px}.FCK__ShowBlocks p{background-image:url(images/block_p.png)}.FCK__ShowBlocks div{background-image:url(images/block_div.png)
}.FCK__ShowBlocks pre{background-image:url(images/block_pre.png)}.FCK__ShowBlocks address{background-image:url(images/block_address.png)}.FCK__ShowBlocks blockquote{background-image:url(images/block_blockquote.png)}.FCK__ShowBlocks h1{background-image:url(images/block_h1.png)}.FCK__ShowBlocks h2{background-image:url(images/block_h2.png)}.FCK__ShowBlocks h3{background-image:url(images/block_h3.png)}.FCK__ShowBlocks h4{background-image:url(images/block_h4.png)}.FCK__ShowBlocks h5{background-image:url(images/block_h5.png)}.FCK__ShowBlocks h6{background-image:url(images/block_h6.png)}' ) ;
+var FCK_ShowTableBordersCSS = FCKTools.FixCssUrls( FCKConfig.BasePath + 'css/', 'table:not([border]),table:not([border]) > tr > td,table:not([border]) > tr > th,table:not([border]) > tbody > tr > td,table:not([border]) > tbody > tr > th,table:not([border]) > thead > tr > td,table:not([border]) > thead > tr > th,table:not([border]) > tfoot > tr > td,table:not([border]) > tfoot > tr > th,table[border=\"0\"],table[border=\"0\"] > tr > td,table[border=\"0\"] > tr > th,table[border=\"0\"] > tbody > tr > td,table[border=\"0\"] > tbody > tr > th,table[border=\"0\"] > thead > tr > td,table[border=\"0\"] > thead > tr > th,table[border=\"0\"] > tfoot > tr > td,table[border=\"0\"] > tfoot > tr > th{border:#d3d3d3 1px dotted}' ) ;
+
+// Popup the debug window if debug mode is set to true. It guarantees that the
+// first debug message will not be lost.
+if ( FCKConfig.Debug )
+ FCKDebug._GetWindow() ;
+
// Load the active skin CSS.
-LoadCss( FCKConfig.SkinPath + 'fck_editor.css' ) ;
+document.write( FCKTools.GetStyleHtml( FCKConfig.SkinEditorCSS ) ) ;
// Load the language file.
FCKLanguageManager.Initialize() ;
@@ -111,10 +202,6 @@
// Set the editor interface direction.
window.document.dir = FCKLang.Dir ;
-// Activate pasting operations.
-if ( FCKConfig.ForcePasteAsPlainText || FCKConfig.AutoDetectPasteFromWord )
- FCK.Events.AttachEvent( 'OnPaste', FCK.Paste ) ;
-
</script>
<script type="text/javascript">
@@ -166,6 +253,7 @@
if ( FCKBrowserInfo.IsGecko )
FCKTools.RunFunction( window.onresize ) ;
+ if ( !FCKConfig.PreventSubmitHandler )
_AttachFormSubmitToAPI() ;
FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
@@ -177,13 +265,16 @@
}
}
-// Gecko browsers doens't calculate well that IFRAME size so we must
+// Gecko and Webkit browsers don't calculate well the IFRAME size so we must
// recalculate it every time the window size changes.
-if ( FCKBrowserInfo.IsGecko )
+if ( FCKBrowserInfo.IsGecko || ( FCKBrowserInfo.IsSafari && !FCKBrowserInfo.IsSafari3 ) )
{
- function Window_OnResize()
+ window.onresize = function( e )
{
- if ( FCKBrowserInfo.IsOpera )
+ // Running in Firefox's chrome makes the window receive the event including subframes.
+ // we care only about this window. Ticket #1642.
+ // #2002: The originalTarget from the event can be the current document, the window, or the editing area.
+ if ( e && e.originalTarget && e.originalTarget !== document && e.originalTarget !== window && (!e.originalTarget.ownerDocument || e.originalTarget.ownerDocument != document ))
return ;
var oCell = document.getElementById( 'xEditingArea' ) ;
@@ -191,11 +282,10 @@
var eInnerElement = oCell.firstChild ;
if ( eInnerElement )
{
- eInnerElement.style.height = 0 ;
- eInnerElement.style.height = oCell.scrollHeight - 2 ;
+ eInnerElement.style.height = '0px' ;
+ eInnerElement.style.height = ( oCell.scrollHeight - 2 ) + 'px' ;
}
}
- window.onresize = Window_OnResize ;
}
</script>
Index: fckdebug.html
===================================================================
RCS file: /home/cvs/cvsroot/freeside/httemplate/elements/fckeditor/editor/fckdebug.html,v
retrieving revision 1.1
retrieving revision 1.1.6.1
diff -u -w -d -r1.1 -r1.1.6.1
--- fckdebug.html 1 Aug 2007 22:25:11 -0000 1.1
+++ fckdebug.html 16 Mar 2010 08:34:45 -0000 1.1.6.1
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
* FCKeditor - The text editor for Internet - http://www.fckeditor.net
- * Copyright (C) 2003-2007 Frederico Caldeira Knabben
+ * Copyright (C) 2003-2010 Frederico Caldeira Knabben
*
* == BEGIN LICENSE ==
*
- Previous message: [freeside-commits] freeside/httemplate/elements/fckeditor fckconfig.js, 1.1, 1.1.6.1 fckeditor.js, 1.1, 1.1.6.1 fckpackager.xml, 1.1, 1.1.6.1 fckstyles.xml, 1.1, 1.1.6.1 fcktemplates.xml, 1.1, 1.1.6.1
- Next message: [freeside-commits] freeside/httemplate/elements/fckeditor/editor/css fck_editorarea.css, 1.1, 1.1.6.1 fck_internal.css, 1.1, 1.1.6.1 fck_showtableborders_gecko.css, 1.1, 1.1.6.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the freeside-commits
mailing list