[freeside-commits] freeside/httemplate/elements/fckeditor/editor/dialog/common fck_dialog_common.css, 1.1, 1.1.6.1 fck_dialog_common.js, 1.1, 1.1.6.1

Mark Wells mark at wavetail.420.am
Tue Mar 16 01:34:53 PDT 2010


Update of /home/cvs/cvsroot/freeside/httemplate/elements/fckeditor/editor/dialog/common
In directory wavetail.420.am:/tmp/cvs-serv23603/editor/dialog/common

Modified Files:
      Tag: FREESIDE_1_9_BRANCH
	fck_dialog_common.css fck_dialog_common.js 
Log Message:
FCKeditor 2.6.6

Index: fck_dialog_common.js
===================================================================
RCS file: /home/cvs/cvsroot/freeside/httemplate/elements/fckeditor/editor/dialog/common/fck_dialog_common.js,v
retrieving revision 1.1
retrieving revision 1.1.6.1
diff -u -w -d -r1.1 -r1.1.6.1
--- fck_dialog_common.js	1 Aug 2007 22:25:16 -0000	1.1
+++ fck_dialog_common.js	16 Mar 2010 08:34:50 -0000	1.1.6.1
@@ -1,6 +1,6 @@
 /*
  * 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 ==
  *
@@ -19,9 +19,47 @@
  * == END LICENSE ==
  *
  * Useful functions used by almost all dialog window pages.
+ * Dialogs should link to this file as the very first script on the page.
  */
 
-var GECKO_BOGUS = '<br type="_moz">' ;
+// Automatically detect the correct document.domain (#123).
+(function()
+{
+	var d = 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 ;
+		}
+	}
+})() ;
+
+// Attention: FCKConfig must be available in the page.
+function GetCommonDialogCss( prefix )
+{
+	// CSS minified by http://iceyboard.no-ip.org/projects/css_compressor (see _dev/css_compression.txt).
+	return FCKConfig.BasePath + 'dialog/common/' + '|.ImagePreviewArea{border:#000 1px solid;overflow:auto;width:100%;height:170px;background-color:#fff}.FlashPreviewArea{border:#000 1px solid;padding:5px;overflow:auto;width:100%;height:170px;background-color:#fff}.BtnReset{float:left;background-position:center center;background-image:url(images/reset.gif);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.BtnLocked,.BtnUnlocked{float:left;background-position:center center;background-image:url(images/locked.gif);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.BtnUnlocked{background-image:url(images/unlocked.gif)}.BtnOver{border:outset 1px;cursor:pointer;cursor:hand}' ;
+}
 
 // Gets a element by its Id. Used for shorter coding.
 function GetE( elementId )
@@ -59,21 +97,47 @@
 	return ( oValue == null ? valueIfNull : oValue ) ;
 }
 
-// Functions used by text fiels to accept numbers only.
-function IsDigit( e )
+function SelectField( elementId )
+{
+	var element = GetE( elementId ) ;
+	element.focus() ;
+
+	// element.select may not be available for some fields (like <select>).
+	if ( element.select )
+		element.select() ;
+}
+
+// Functions used by text fields to accept numbers only.
+var IsDigit = ( function()
+	{
+		var KeyIdentifierMap =
+		{
+			End			: 35,
+			Home		: 36,
+			Left		: 37,
+			Right		: 39,
+			'U+00007F'	: 46		// Delete
+		} ;
+
+		return function ( e )
 {
 	if ( !e )
 		e = event ;
 
 	var iCode = ( e.keyCode || e.charCode ) ;
 
+				if ( !iCode && e.keyIdentifier && ( e.keyIdentifier in KeyIdentifierMap ) )
+						iCode = KeyIdentifierMap[ e.keyIdentifier ] ;
+
 	return (
 			( iCode >= 48 && iCode <= 57 )		// Numbers
-			|| (iCode >= 37 && iCode <= 40)		// Arrows
+						|| (iCode >= 35 && iCode <= 40)		// Arrows, Home, End
 			|| iCode == 8						// Backspace
 			|| iCode == 46						// Delete
+						|| iCode == 9						// Tab
 	) ;
 }
+	} )() ;
 
 String.prototype.Trim = function()
 {
@@ -123,32 +187,161 @@
 	sOptions += ",left=" + iLeft ;
 	sOptions += ",top=" + iTop ;
 
-	// The "PreserveSessionOnFileBrowser" because the above code could be
-	// blocked by popup blockers.
-	if ( oEditor.FCKConfig.PreserveSessionOnFileBrowser && oEditor.FCKBrowserInfo.IsIE )
+	window.open( url, 'FCKBrowseWindow', sOptions ) ;
+}
+
+/**
+ Utility function to create/update an element with a name attribute in IE, so it behaves properly when moved around
+ It also allows to change the name or other special attributes in an existing node
+	oEditor : instance of FCKeditor where the element will be created
+	oOriginal : current element being edited or null if it has to be created
+	nodeName : string with the name of the element to create
+	oAttributes : Hash object with the attributes that must be set at creation time in IE
+								Those attributes will be set also after the element has been
+								created for any other browser to avoid redudant code
+*/
+function CreateNamedElement( oEditor, oOriginal, nodeName, oAttributes )
 	{
-		// The following change has been made otherwise IE will open the file
-		// browser on a different server session (on some cases):
-		// http://support.microsoft.com/default.aspx?scid=kb;en-us;831678
-		// by Simone Chiaretta.
-		var oWindow = oEditor.window.open( url, 'FCKBrowseWindow', sOptions ) ;
+	var oNewNode ;
 
-		if ( oWindow )
+	// IE doesn't allow easily to change properties of an existing object,
+	// so remove the old and force the creation of a new one.
+	var oldNode = null ;
+	if ( oOriginal && oEditor.FCKBrowserInfo.IsIE )
 		{
-			// Detect Yahoo popup blocker.
-			try
+		// Force the creation only if some of the special attributes have changed:
+		var bChanged = false;
+		for( var attName in oAttributes )
+			bChanged |= ( oOriginal.getAttribute( attName, 2) != oAttributes[attName] ) ;
+
+		if ( bChanged )
 			{
-				var sTest = oWindow.name ; // Yahoo returns "something", but we can't access it, so detect that and avoid strange errors for the user.
-				oWindow.opener = window ;
+			oldNode = oOriginal ;
+			oOriginal = null ;
 			}
-			catch(e)
-			{
-				alert( oEditor.FCKLang.BrowseServerBlocked ) ;
 			}
+
+	// If the node existed (and it's not IE), then we just have to update its attributes
+	if ( oOriginal )
+	{
+		oNewNode = oOriginal ;
 		}
 		else
-			alert( oEditor.FCKLang.BrowseServerBlocked ) ;
+	{
+		// #676, IE doesn't play nice with the name or type attribute
+		if ( oEditor.FCKBrowserInfo.IsIE )
+		{
+			var sbHTML = [] ;
+			sbHTML.push( '<' + nodeName ) ;
+			for( var prop in oAttributes )
+			{
+				sbHTML.push( ' ' + prop + '="' + oAttributes[prop] + '"' ) ;
+			}
+			sbHTML.push( '>' ) ;
+			if ( !oEditor.FCKListsLib.EmptyElements[nodeName.toLowerCase()] )
+				sbHTML.push( '</' + nodeName + '>' ) ;
+
+			oNewNode = oEditor.FCK.EditorDocument.createElement( sbHTML.join('') ) ;
+			// Check if we are just changing the properties of an existing node: copy its properties
+			if ( oldNode )
+			{
+				CopyAttributes( oldNode, oNewNode, oAttributes ) ;
+				oEditor.FCKDomTools.MoveChildren( oldNode, oNewNode ) ;
+				oldNode.parentNode.removeChild( oldNode ) ;
+				oldNode = null ;
+
+				if ( oEditor.FCK.Selection.SelectionData )
+				{
+					// Trick to refresh the selection object and avoid error in
+					// fckdialog.html Selection.EnsureSelection
+					var oSel = oEditor.FCK.EditorDocument.selection ;
+					oEditor.FCK.Selection.SelectionData = oSel.createRange() ; // Now oSel.type will be 'None' reflecting the real situation
+				}
+			}
+			oNewNode = oEditor.FCK.InsertElement( oNewNode ) ;
+
+			// FCK.Selection.SelectionData is broken by now since we've
+			// deleted the previously selected element. So we need to reassign it.
+			if ( oEditor.FCK.Selection.SelectionData )
+			{
+				var range = oEditor.FCK.EditorDocument.body.createControlRange() ;
+				range.add( oNewNode ) ;
+				oEditor.FCK.Selection.SelectionData = range ;
+			}
     }
     else
-		window.open( url, 'FCKBrowseWindow', sOptions ) ;
+		{
+			oNewNode = oEditor.FCK.InsertElement( nodeName ) ;
+		}
+	}
+
+	// Set the basic attributes
+	for( var attName in oAttributes )
+		oNewNode.setAttribute( attName, oAttributes[attName], 0 ) ;	// 0 : Case Insensitive
+
+	return oNewNode ;
+}
+
+// Copy all the attributes from one node to the other, kinda like a clone
+// But oSkipAttributes is an object with the attributes that must NOT be copied
+function CopyAttributes( oSource, oDest, oSkipAttributes )
+{
+	var aAttributes = oSource.attributes ;
+
+	for ( var n = 0 ; n < aAttributes.length ; n++ )
+	{
+		var oAttribute = aAttributes[n] ;
+
+		if ( oAttribute.specified )
+		{
+			var sAttName = oAttribute.nodeName ;
+			// We can set the type only once, so do it with the proper value, not copying it.
+			if ( sAttName in oSkipAttributes )
+				continue ;
+
+			var sAttValue = oSource.getAttribute( sAttName, 2 ) ;
+			if ( sAttValue == null )
+				sAttValue = oAttribute.nodeValue ;
+
+			oDest.setAttribute( sAttName, sAttValue, 0 ) ;	// 0 : Case Insensitive
+		}
+	}
+	// The style:
+	if ( oSource.style.cssText !== '' )
+		oDest.style.cssText = oSource.style.cssText ;
+}
+
+/**
+* Replaces a tag with another one, keeping its contents:
+* for example TD --> TH, and TH --> TD.
+* input: the original node, and the new tag name
+* http://www.w3.org/TR/DOM-Level-3-Core/core.html#Document3-renameNode
+*/
+function RenameNode( oNode , newTag )
+{
+	// TODO: if the browser natively supports document.renameNode call it.
+	// does any browser currently support it in order to test?
+
+	// Only rename element nodes.
+	if ( oNode.nodeType != 1 )
+		return null ;
+
+	// If it's already correct exit here.
+	if ( oNode.nodeName == newTag )
+		return oNode ;
+
+	var oDoc = oNode.ownerDocument ;
+	// Create the new node
+	var newNode = oDoc.createElement( newTag ) ;
+
+	// Copy all attributes
+	CopyAttributes( oNode, newNode, {} ) ;
+
+	// Move children to the new node
+	FCKDomTools.MoveChildren( oNode, newNode ) ;
+
+	// Finally replace the node and return the new one
+	oNode.parentNode.replaceChild( newNode, oNode ) ;
+
+	return newNode ;
 }
\ No newline at end of file

Index: fck_dialog_common.css
===================================================================
RCS file: /home/cvs/cvsroot/freeside/httemplate/elements/fckeditor/editor/dialog/common/fck_dialog_common.css,v
retrieving revision 1.1
retrieving revision 1.1.6.1
diff -u -w -d -r1.1 -r1.1.6.1
--- fck_dialog_common.css	1 Aug 2007 22:25:16 -0000	1.1
+++ fck_dialog_common.css	16 Mar 2010 08:34:50 -0000	1.1.6.1
@@ -1,6 +1,6 @@
 /*
  * 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 ==
  *
@@ -22,6 +22,13 @@
  * windows.
  */
 
+/* #########
+ *  WARNING
+ * #########
+ * When changing this file, the minified version of it must be updated in the
+ * fck_dialog_common.js file (see GetCommonDialogCss).
+ */
+
 .ImagePreviewArea
 {
 	border: #000000 1px solid;
@@ -76,8 +83,3 @@
 	cursor: pointer;
 	cursor: hand;
 }
-
-.FCK__FieldNumeric
-{
-	behavior: url(common/fcknumericfield.htc) ;
-}
\ No newline at end of file



More information about the freeside-commits mailing list