update address standardization for cust_location changes
[freeside.git] / rt / share / html / NoAuth / RichText / FCKeditor / editor / _source / commandclasses / fcklistcommands.js
diff --git a/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcklistcommands.js b/rt/share/html/NoAuth/RichText/FCKeditor/editor/_source/commandclasses/fcklistcommands.js
deleted file mode 100644 (file)
index 16f71ea..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-/*\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
- * Implementation for the "Insert/Remove Ordered/Unordered List" commands.\r
- */\r
-\r
-var FCKListCommand = function( name, tagName )\r
-{\r
-       this.Name = name ;\r
-       this.TagName = tagName ;\r
-}\r
-\r
-FCKListCommand.prototype =\r
-{\r
-       GetState : function()\r
-       {\r
-               // Disabled if not WYSIWYG.\r
-               if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG || ! FCK.EditorWindow )\r
-                       return FCK_TRISTATE_DISABLED ;\r
-\r
-               // We'll use the style system's convention to determine list state here...\r
-               // If the starting block is a descendant of an <ol> or <ul> node, then we're in a list.\r
-               var startContainer = FCKSelection.GetBoundaryParentElement( true ) ;\r
-               var listNode = startContainer ;\r
-               while ( listNode )\r
-               {\r
-                       if ( listNode.nodeName.IEquals( [ 'ul', 'ol' ] ) )\r
-                               break ;\r
-                       listNode = listNode.parentNode ;\r
-               }\r
-               if ( listNode && listNode.nodeName.IEquals( this.TagName ) )\r
-                       return FCK_TRISTATE_ON ;\r
-               else\r
-                       return FCK_TRISTATE_OFF ;\r
-       },\r
-\r
-       Execute : function()\r
-       {\r
-               FCKUndo.SaveUndoStep() ;\r
-\r
-               var doc = FCK.EditorDocument ;\r
-               var range = new FCKDomRange( FCK.EditorWindow ) ;\r
-               range.MoveToSelection() ;\r
-               var state = this.GetState() ;\r
-\r
-               // Midas lists rule #1 says we can create a list even in an empty document.\r
-               // But FCKDomRangeIterator wouldn't run if the document is really empty.\r
-               // So create a paragraph if the document is empty and we're going to create a list.\r
-               if ( state == FCK_TRISTATE_OFF )\r
-               {\r
-                       FCKDomTools.TrimNode( doc.body ) ;\r
-                       if ( ! doc.body.firstChild )\r
-                       {\r
-                               var paragraph = doc.createElement( 'p' ) ;\r
-                               doc.body.appendChild( paragraph ) ;\r
-                               range.MoveToNodeContents( paragraph ) ;\r
-                       }\r
-               }\r
-\r
-               var bookmark = range.CreateBookmark() ;\r
-\r
-               // Group the blocks up because there are many cases where multiple lists have to be created,\r
-               // or multiple lists have to be cancelled.\r
-               var listGroups = [] ;\r
-               var markerObj = {} ;\r
-               var iterator = new FCKDomRangeIterator( range ) ;\r
-               var block ;\r
-\r
-               iterator.ForceBrBreak = ( state == FCK_TRISTATE_OFF ) ;\r
-               var nextRangeExists = true ;\r
-               var rangeQueue = null ;\r
-               while ( nextRangeExists )\r
-               {\r
-                       while ( ( block = iterator.GetNextParagraph() ) )\r
-                       {\r
-                               var path = new FCKElementPath( block ) ;\r
-                               var listNode = null ;\r
-                               var processedFlag = false ;\r
-                               var blockLimit = path.BlockLimit ;\r
-\r
-                               // First, try to group by a list ancestor.\r
-                               for ( var i = path.Elements.length - 1 ; i >= 0 ; i-- )\r
-                               {\r
-                                       var el = path.Elements[i] ;\r
-                                       if ( el.nodeName.IEquals( ['ol', 'ul'] ) )\r
-                                       {\r
-                                               // If we've encountered a list inside a block limit\r
-                                               // The last group object of the block limit element should\r
-                                               // no longer be valid. Since paragraphs after the list\r
-                                               // should belong to a different group of paragraphs before\r
-                                               // the list. (Bug #1309)\r
-                                               if ( blockLimit._FCK_ListGroupObject )\r
-                                                       blockLimit._FCK_ListGroupObject = null ;\r
-\r
-                                               var groupObj = el._FCK_ListGroupObject ;\r
-                                               if ( groupObj )\r
-                                                       groupObj.contents.push( block ) ;\r
-                                               else\r
-                                               {\r
-                                                       groupObj = { 'root' : el, 'contents' : [ block ] } ;\r
-                                                       listGroups.push( groupObj ) ;\r
-                                                       FCKDomTools.SetElementMarker( markerObj, el, '_FCK_ListGroupObject', groupObj ) ;\r
-                                               }\r
-                                               processedFlag = true ;\r
-                                               break ;\r
-                                       }\r
-                               }\r
-\r
-                               if ( processedFlag )\r
-                                       continue ;\r
-\r
-                               // No list ancestor? Group by block limit.\r
-                               var root = blockLimit ;\r
-                               if ( root._FCK_ListGroupObject )\r
-                                       root._FCK_ListGroupObject.contents.push( block ) ;\r
-                               else\r
-                               {\r
-                                       var groupObj = { 'root' : root, 'contents' : [ block ] } ;\r
-                                       FCKDomTools.SetElementMarker( markerObj, root, '_FCK_ListGroupObject', groupObj ) ;\r
-                                       listGroups.push( groupObj ) ;\r
-                               }\r
-                       }\r
-\r
-                       if ( FCKBrowserInfo.IsIE )\r
-                               nextRangeExists = false ;\r
-                       else\r
-                       {\r
-                               if ( rangeQueue == null )\r
-                               {\r
-                                       rangeQueue = [] ;\r
-                                       var selectionObject = FCKSelection.GetSelection() ;\r
-                                       if ( selectionObject && listGroups.length == 0 )\r
-                                               rangeQueue.push( selectionObject.getRangeAt( 0 ) ) ;\r
-                                       for ( var i = 1 ; selectionObject && i < selectionObject.rangeCount ; i++ )\r
-                                               rangeQueue.push( selectionObject.getRangeAt( i ) ) ;\r
-                               }\r
-                               if ( rangeQueue.length < 1 )\r
-                                       nextRangeExists = false ;\r
-                               else\r
-                               {\r
-                                       var internalRange = FCKW3CRange.CreateFromRange( doc, rangeQueue.shift() ) ;\r
-                                       range._Range = internalRange ;\r
-                                       range._UpdateElementInfo() ;\r
-                                       if ( range.StartNode.nodeName.IEquals( 'td' ) )\r
-                                               range.SetStart( range.StartNode, 1 ) ;\r
-                                       if ( range.EndNode.nodeName.IEquals( 'td' ) )\r
-                                               range.SetEnd( range.EndNode, 2 ) ;\r
-                                       iterator = new FCKDomRangeIterator( range ) ;\r
-                                       iterator.ForceBrBreak = ( state == FCK_TRISTATE_OFF ) ;\r
-                               }\r
-                       }\r
-               }\r
-\r
-               // Now we have two kinds of list groups, groups rooted at a list, and groups rooted at a block limit element.\r
-               // We either have to build lists or remove lists, for removing a list does not makes sense when we are looking\r
-               // at the group that's not rooted at lists. So we have three cases to handle.\r
-               var listsCreated = [] ;\r
-               while ( listGroups.length > 0 )\r
-               {\r
-                       var groupObj = listGroups.shift() ;\r
-                       if ( state == FCK_TRISTATE_OFF )\r
-                       {\r
-                               if ( groupObj.root.nodeName.IEquals( ['ul', 'ol'] ) )\r
-                                       this._ChangeListType( groupObj, markerObj, listsCreated ) ;\r
-                               else\r
-                                       this._CreateList( groupObj, listsCreated ) ;\r
-                       }\r
-                       else if ( state == FCK_TRISTATE_ON && groupObj.root.nodeName.IEquals( ['ul', 'ol'] ) )\r
-                               this._RemoveList( groupObj, markerObj ) ;\r
-               }\r
-\r
-               // For all new lists created, merge adjacent, same type lists.\r
-               for ( var i = 0 ; i < listsCreated.length ; i++ )\r
-               {\r
-                       var listNode = listsCreated[i] ;\r
-                       var stopFlag = false ;\r
-                       var currentNode = listNode ;\r
-                       while ( ! stopFlag )\r
-                       {\r
-                               currentNode = currentNode.nextSibling ;\r
-                               if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )\r
-                                       continue ;\r
-                               stopFlag = true ;\r
-                       }\r
-\r
-                       if ( currentNode && currentNode.nodeName.IEquals( this.TagName ) )\r
-                       {\r
-                               currentNode.parentNode.removeChild( currentNode ) ;\r
-                               while ( currentNode.firstChild )\r
-                                       listNode.appendChild( currentNode.removeChild( currentNode.firstChild ) ) ;\r
-                       }\r
-\r
-                       stopFlag = false ;\r
-                       currentNode = listNode ;\r
-                       while ( ! stopFlag )\r
-                       {\r
-                               currentNode = currentNode.previousSibling ;\r
-                               if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )\r
-                                       continue ;\r
-                               stopFlag = true ;\r
-                       }\r
-                       if ( currentNode && currentNode.nodeName.IEquals( this.TagName ) )\r
-                       {\r
-                               currentNode.parentNode.removeChild( currentNode ) ;\r
-                               while ( currentNode.lastChild )\r
-                                       listNode.insertBefore( currentNode.removeChild( currentNode.lastChild ),\r
-                                                      listNode.firstChild ) ;\r
-                       }\r
-               }\r
-\r
-               // Clean up, restore selection and update toolbar button states.\r
-               FCKDomTools.ClearAllMarkers( markerObj ) ;\r
-               range.MoveToBookmark( bookmark ) ;\r
-               range.Select() ;\r
-\r
-               FCK.Focus() ;\r
-               FCK.Events.FireEvent( 'OnSelectionChange' ) ;\r
-       },\r
-\r
-       _ChangeListType : function( groupObj, markerObj, listsCreated )\r
-       {\r
-               // This case is easy...\r
-               // 1. Convert the whole list into a one-dimensional array.\r
-               // 2. Change the list type by modifying the array.\r
-               // 3. Recreate the whole list by converting the array to a list.\r
-               // 4. Replace the original list with the recreated list.\r
-               var listArray = FCKDomTools.ListToArray( groupObj.root, markerObj ) ;\r
-               var selectedListItems = [] ;\r
-               for ( var i = 0 ; i < groupObj.contents.length ; i++ )\r
-               {\r
-                       var itemNode = groupObj.contents[i] ;\r
-                       itemNode = FCKTools.GetElementAscensor( itemNode, 'li' ) ;\r
-                       if ( ! itemNode || itemNode._FCK_ListItem_Processed )\r
-                               continue ;\r
-                       selectedListItems.push( itemNode ) ;\r
-                       FCKDomTools.SetElementMarker( markerObj, itemNode, '_FCK_ListItem_Processed', true ) ;\r
-               }\r
-               var fakeParent = FCKTools.GetElementDocument( groupObj.root ).createElement( this.TagName ) ;\r
-               for ( var i = 0 ; i < selectedListItems.length ; i++ )\r
-               {\r
-                       var listIndex = selectedListItems[i]._FCK_ListArray_Index ;\r
-                       listArray[listIndex].parent = fakeParent ;\r
-               }\r
-               var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;\r
-               for ( var i = 0 ; i < newList.listNode.childNodes.length ; i++ )\r
-               {\r
-                       if ( newList.listNode.childNodes[i].nodeName.IEquals( this.TagName ) )\r
-                               listsCreated.push( newList.listNode.childNodes[i] ) ;\r
-               }\r
-               groupObj.root.parentNode.replaceChild( newList.listNode, groupObj.root ) ;\r
-       },\r
-\r
-       _CreateList : function( groupObj, listsCreated )\r
-       {\r
-               var contents = groupObj.contents ;\r
-               var doc = FCKTools.GetElementDocument( groupObj.root ) ;\r
-               var listContents = [] ;\r
-\r
-               // It is possible to have the contents returned by DomRangeIterator to be the same as the root.\r
-               // e.g. when we're running into table cells.\r
-               // In such a case, enclose the childNodes of contents[0] into a <div>.\r
-               if ( contents.length == 1 && contents[0] == groupObj.root )\r
-               {\r
-                       var divBlock = doc.createElement( 'div' );\r
-                       while ( contents[0].firstChild )\r
-                               divBlock.appendChild( contents[0].removeChild( contents[0].firstChild ) ) ;\r
-                       contents[0].appendChild( divBlock ) ;\r
-                       contents[0] = divBlock ;\r
-               }\r
-\r
-               // Calculate the common parent node of all content blocks.\r
-               var commonParent = groupObj.contents[0].parentNode ;\r
-               for ( var i = 0 ; i < contents.length ; i++ )\r
-                       commonParent = FCKDomTools.GetCommonParents( commonParent, contents[i].parentNode ).pop() ;\r
-\r
-               // We want to insert things that are in the same tree level only, so calculate the contents again\r
-               // by expanding the selected blocks to the same tree level.\r
-               for ( var i = 0 ; i < contents.length ; i++ )\r
-               {\r
-                       var contentNode = contents[i] ;\r
-                       while ( contentNode.parentNode )\r
-                       {\r
-                               if ( contentNode.parentNode == commonParent )\r
-                               {\r
-                                       listContents.push( contentNode ) ;\r
-                                       break ;\r
-                               }\r
-                               contentNode = contentNode.parentNode ;\r
-                       }\r
-               }\r
-\r
-               if ( listContents.length < 1 )\r
-                       return ;\r
-\r
-               // Insert the list to the DOM tree.\r
-               var insertAnchor = listContents[listContents.length - 1].nextSibling ;\r
-               var listNode = doc.createElement( this.TagName ) ;\r
-               listsCreated.push( listNode ) ;\r
-               while ( listContents.length )\r
-               {\r
-                       var contentBlock = listContents.shift() ;\r
-                       var docFrag = doc.createDocumentFragment() ;\r
-                       while ( contentBlock.firstChild )\r
-                               docFrag.appendChild( contentBlock.removeChild( contentBlock.firstChild ) ) ;\r
-                       contentBlock.parentNode.removeChild( contentBlock ) ;\r
-                       var listItem = doc.createElement( 'li' ) ;\r
-                       listItem.appendChild( docFrag ) ;\r
-                       listNode.appendChild( listItem ) ;\r
-               }\r
-               commonParent.insertBefore( listNode, insertAnchor ) ;\r
-       },\r
-\r
-       _RemoveList : function( groupObj, markerObj )\r
-       {\r
-               // This is very much like the change list type operation.\r
-               // Except that we're changing the selected items' indent to -1 in the list array.\r
-               var listArray = FCKDomTools.ListToArray( groupObj.root, markerObj ) ;\r
-               var selectedListItems = [] ;\r
-               for ( var i = 0 ; i < groupObj.contents.length ; i++ )\r
-               {\r
-                       var itemNode = groupObj.contents[i] ;\r
-                       itemNode = FCKTools.GetElementAscensor( itemNode, 'li' ) ;\r
-                       if ( ! itemNode || itemNode._FCK_ListItem_Processed )\r
-                               continue ;\r
-                       selectedListItems.push( itemNode ) ;\r
-                       FCKDomTools.SetElementMarker( markerObj, itemNode, '_FCK_ListItem_Processed', true ) ;\r
-               }\r
-\r
-               var lastListIndex = null ;\r
-               for ( var i = 0 ; i < selectedListItems.length ; i++ )\r
-               {\r
-                       var listIndex = selectedListItems[i]._FCK_ListArray_Index ;\r
-                       listArray[listIndex].indent = -1 ;\r
-                       lastListIndex = listIndex ;\r
-               }\r
-\r
-               // After cutting parts of the list out with indent=-1, we still have to maintain the array list\r
-               // model's nextItem.indent <= currentItem.indent + 1 invariant. Otherwise the array model of the\r
-               // list cannot be converted back to a real DOM list.\r
-               for ( var i = lastListIndex + 1; i < listArray.length ; i++ )\r
-               {\r
-                       if ( listArray[i].indent > listArray[i-1].indent + 1 )\r
-                       {\r
-                               var indentOffset = listArray[i-1].indent + 1 - listArray[i].indent ;\r
-                               var oldIndent = listArray[i].indent ;\r
-                               while ( listArray[i] && listArray[i].indent >= oldIndent)\r
-                               {\r
-                                       listArray[i].indent += indentOffset ;\r
-                                       i++ ;\r
-                               }\r
-                               i-- ;\r
-                       }\r
-               }\r
-\r
-               var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;\r
-               // If groupObj.root is the last element in its parent, or its nextSibling is a <br>, then we should\r
-               // not add a <br> after the final item. So, check for the cases and trim the <br>.\r
-               if ( groupObj.root.nextSibling == null || groupObj.root.nextSibling.nodeName.IEquals( 'br' ) )\r
-               {\r
-                       if ( newList.listNode.lastChild.nodeName.IEquals( 'br' ) )\r
-                               newList.listNode.removeChild( newList.listNode.lastChild ) ;\r
-               }\r
-               groupObj.root.parentNode.replaceChild( newList.listNode, groupObj.root ) ;\r
-       }\r
-};\r