JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.1
[ckeditor.git] / _source / plugins / liststyle / dialogs / liststyle.js
index e8e2ee9..6761022 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+ * Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
  * For licensing, see LICENSE.html or http://ckeditor.com/license\r
  */\r
 \r
                catch( e ) { return null; }\r
 \r
                range.shrink( CKEDITOR.SHRINK_TEXT );\r
-               return range.getCommonAncestor().getAscendant( listTag, true );\r
+               return range.getCommonAncestor().getAscendant( listTag, 1 );\r
        }\r
 \r
+       var listItem = function( node ) { return node.type == CKEDITOR.NODE_ELEMENT && node.is( 'li' ); };\r
+\r
        var mapListStyle = {\r
                'a' : 'lower-alpha',\r
                'A' : 'upper-alpha',\r
 \r
        function listStyle( editor, startupPage )\r
        {\r
+               var lang = editor.lang.list;\r
                if ( startupPage == 'bulletedListStyle' )\r
                {\r
                        return {\r
-                               title : editor.lang.list.bulletedTitle,\r
+                               title : lang.bulletedTitle,\r
                                minWidth : 300,\r
                                minHeight : 50,\r
                                contents :\r
                                                [\r
                                                        {\r
                                                                type : 'select',\r
-                                                               label : editor.lang.list.type,\r
+                                                               label : lang.type,\r
                                                                id : 'type',\r
-                                                               style : 'width: 150px; margin: auto;',\r
+                                                               align : 'center',\r
+                                                               style : 'width:150px',\r
                                                                items :\r
                                                                [\r
-                                                                       [ editor.lang.list.notset, '' ],\r
-                                                                       [ editor.lang.list.circle, 'circle' ],\r
-                                                                       [ editor.lang.list.disc,  'disc' ],\r
-                                                                       [ editor.lang.list.square, 'square' ]\r
+                                                                       [ lang.notset, '' ],\r
+                                                                       [ lang.circle, 'circle' ],\r
+                                                                       [ lang.disc,  'disc' ],\r
+                                                                       [ lang.square, 'square' ]\r
                                                                ],\r
                                                                setup : function( element )\r
                                                                {\r
 \r
                        var listStyleOptions =\r
                        [\r
-                               [ editor.lang.list.notset, '' ],\r
-                               [ editor.lang.list.lowerRoman, 'lower-roman' ],\r
-                               [ editor.lang.list.upperRoman, 'upper-roman' ],\r
-                               [ editor.lang.list.lowerAlpha, 'lower-alpha' ],\r
-                               [ editor.lang.list.upperAlpha, 'upper-alpha' ],\r
-                               [ editor.lang.list.decimal, 'decimal' ]\r
+                               [ lang.notset, '' ],\r
+                               [ lang.lowerRoman, 'lower-roman' ],\r
+                               [ lang.upperRoman, 'upper-roman' ],\r
+                               [ lang.lowerAlpha, 'lower-alpha' ],\r
+                               [ lang.upperAlpha, 'upper-alpha' ],\r
+                               [ lang.decimal, 'decimal' ]\r
                        ];\r
 \r
                        if ( !CKEDITOR.env.ie || CKEDITOR.env.version > 7 )\r
                        {\r
                                listStyleOptions.concat( [\r
-                                       [ editor.lang.list.armenian, 'armenian' ],\r
-                                       [ editor.lang.list.decimalLeadingZero, 'decimal-leading-zero' ],\r
-                                       [ editor.lang.list.georgian, 'georgian' ],\r
-                                       [ editor.lang.list.lowerGreek, 'lower-greek' ]\r
+                                       [ lang.armenian, 'armenian' ],\r
+                                       [ lang.decimalLeadingZero, 'decimal-leading-zero' ],\r
+                                       [ lang.georgian, 'georgian' ],\r
+                                       [ lang.lowerGreek, 'lower-greek' ]\r
                                ]);\r
                        }\r
 \r
                        return {\r
-                               title : editor.lang.list.numberedTitle,\r
+                               title : lang.numberedTitle,\r
                                minWidth : 300,\r
                                minHeight : 50,\r
                                contents :\r
                                                                children :\r
                                                                [\r
                                                                        {\r
-                                                                               label : editor.lang.list.start,\r
+                                                                               label : lang.start,\r
                                                                                type : 'text',\r
                                                                                id : 'start',\r
+                                                                               validate : CKEDITOR.dialog.validate.integer( lang.validateStartNumber ),\r
                                                                                setup : function( element )\r
                                                                                {\r
-                                                                                       var value = element.getAttribute( 'start' ) || 1;\r
+                                                                                       // List item start number dominates.\r
+                                                                                       var value = element.getFirst( listItem ).getAttribute( 'value' ) || element.getAttribute( 'start' ) || 1;\r
                                                                                        value && this.setValue( value );\r
                                                                                },\r
                                                                                commit : function( element )\r
                                                                                {\r
-                                                                                       element.setAttribute( 'start', this.getValue() );\r
+                                                                                       var firstItem = element.getFirst( listItem );\r
+                                                                                       var oldStart = firstItem.getAttribute( 'value' ) || element.getAttribute( 'start' ) || 1;\r
+\r
+                                                                                       // Force start number on list root.\r
+                                                                                       element.getFirst( listItem ).removeAttribute( 'value' );\r
+                                                                                       var val = parseInt( this.getValue(), 10 );\r
+                                                                                       if ( isNaN( val ) )\r
+                                                                                               element.removeAttribute( 'start' );\r
+                                                                                       else\r
+                                                                                               element.setAttribute( 'start', val );\r
+\r
+                                                                                       // Update consequent list item numbering.\r
+                                                                                       var nextItem = firstItem, conseq = oldStart, startNumber = isNaN( val ) ? 1 : val;\r
+                                                                                       while ( ( nextItem = nextItem.getNext( listItem ) ) && conseq++ )\r
+                                                                                       {\r
+                                                                                               if ( nextItem.getAttribute( 'value' ) == conseq )\r
+                                                                                                       nextItem.setAttribute( 'value', startNumber + conseq - oldStart );\r
+                                                                                       }\r
                                                                                }\r
                                                                        },\r
                                                                        {\r
                                                                                type : 'select',\r
-                                                                               label : editor.lang.list.type,\r
+                                                                               label : lang.type,\r
                                                                                id : 'type',\r
                                                                                style : 'width: 100%;',\r
                                                                                items : listStyleOptions,\r