]>
Commit | Line | Data |
---|---|---|
c63493c8 IB |
1 | /**\r |
2 | * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\r | |
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license\r | |
4 | */\r | |
5 | \r | |
6 | ( function() {\r | |
7 | function getListElement( editor, listTag ) {\r | |
8 | var range;\r | |
9 | try {\r | |
10 | range = editor.getSelection().getRanges()[ 0 ];\r | |
11 | } catch ( e ) {\r | |
12 | return null;\r | |
13 | }\r | |
14 | \r | |
15 | range.shrink( CKEDITOR.SHRINK_TEXT );\r | |
16 | return editor.elementPath( range.getCommonAncestor() ).contains( listTag, 1 );\r | |
17 | }\r | |
18 | \r | |
19 | var listItem = function( node ) {\r | |
20 | return node.type == CKEDITOR.NODE_ELEMENT && node.is( 'li' );\r | |
21 | };\r | |
22 | \r | |
23 | var mapListStyle = {\r | |
24 | 'a': 'lower-alpha',\r | |
25 | 'A': 'upper-alpha',\r | |
26 | 'i': 'lower-roman',\r | |
27 | 'I': 'upper-roman',\r | |
28 | '1': 'decimal',\r | |
29 | 'disc': 'disc',\r | |
30 | 'circle': 'circle',\r | |
31 | 'square': 'square'\r | |
32 | };\r | |
33 | \r | |
34 | function listStyle( editor, startupPage ) {\r | |
35 | var lang = editor.lang.liststyle;\r | |
36 | if ( startupPage == 'bulletedListStyle' ) {\r | |
37 | return {\r | |
38 | title: lang.bulletedTitle,\r | |
39 | minWidth: 300,\r | |
40 | minHeight: 50,\r | |
41 | contents: [ {\r | |
42 | id: 'info',\r | |
43 | accessKey: 'I',\r | |
44 | elements: [ {\r | |
45 | type: 'select',\r | |
46 | label: lang.type,\r | |
47 | id: 'type',\r | |
48 | align: 'center',\r | |
49 | style: 'width:150px',\r | |
50 | items: [\r | |
51 | [ lang.notset, '' ],\r | |
52 | [ lang.circle, 'circle' ],\r | |
53 | [ lang.disc, 'disc' ],\r | |
54 | [ lang.square, 'square' ]\r | |
55 | ],\r | |
56 | setup: function( element ) {\r | |
57 | var value = element.getStyle( 'list-style-type' ) || mapListStyle[ element.getAttribute( 'type' ) ] || element.getAttribute( 'type' ) || '';\r | |
58 | \r | |
59 | this.setValue( value );\r | |
60 | },\r | |
61 | commit: function( element ) {\r | |
62 | var value = this.getValue();\r | |
63 | if ( value )\r | |
64 | element.setStyle( 'list-style-type', value );\r | |
65 | else\r | |
66 | element.removeStyle( 'list-style-type' );\r | |
67 | }\r | |
68 | } ]\r | |
69 | } ],\r | |
70 | onShow: function() {\r | |
71 | var editor = this.getParentEditor(),\r | |
72 | element = getListElement( editor, 'ul' );\r | |
73 | \r | |
74 | element && this.setupContent( element );\r | |
75 | },\r | |
76 | onOk: function() {\r | |
77 | var editor = this.getParentEditor(),\r | |
78 | element = getListElement( editor, 'ul' );\r | |
79 | \r | |
80 | element && this.commitContent( element );\r | |
81 | }\r | |
82 | };\r | |
83 | } else if ( startupPage == 'numberedListStyle' ) {\r | |
84 | \r | |
85 | var listStyleOptions = [\r | |
86 | [ lang.notset, '' ],\r | |
87 | [ lang.lowerRoman, 'lower-roman' ],\r | |
88 | [ lang.upperRoman, 'upper-roman' ],\r | |
89 | [ lang.lowerAlpha, 'lower-alpha' ],\r | |
90 | [ lang.upperAlpha, 'upper-alpha' ],\r | |
91 | [ lang.decimal, 'decimal' ]\r | |
92 | ];\r | |
93 | \r | |
94 | if ( !CKEDITOR.env.ie || CKEDITOR.env.version > 7 ) {\r | |
95 | listStyleOptions.concat( [\r | |
96 | [ lang.armenian, 'armenian' ],\r | |
97 | [ lang.decimalLeadingZero, 'decimal-leading-zero' ],\r | |
98 | [ lang.georgian, 'georgian' ],\r | |
99 | [ lang.lowerGreek, 'lower-greek' ]\r | |
100 | ] );\r | |
101 | }\r | |
102 | \r | |
103 | return {\r | |
104 | title: lang.numberedTitle,\r | |
105 | minWidth: 300,\r | |
106 | minHeight: 50,\r | |
107 | contents: [ {\r | |
108 | id: 'info',\r | |
109 | accessKey: 'I',\r | |
110 | elements: [ {\r | |
111 | type: 'hbox',\r | |
112 | widths: [ '25%', '75%' ],\r | |
113 | children: [ {\r | |
114 | label: lang.start,\r | |
115 | type: 'text',\r | |
116 | id: 'start',\r | |
117 | validate: CKEDITOR.dialog.validate.integer( lang.validateStartNumber ),\r | |
118 | setup: function( element ) {\r | |
119 | // List item start number dominates.\r | |
120 | var value = element.getFirst( listItem ).getAttribute( 'value' ) || element.getAttribute( 'start' ) || 1;\r | |
121 | value && this.setValue( value );\r | |
122 | },\r | |
123 | commit: function( element ) {\r | |
124 | var firstItem = element.getFirst( listItem );\r | |
125 | var oldStart = firstItem.getAttribute( 'value' ) || element.getAttribute( 'start' ) || 1;\r | |
126 | \r | |
127 | // Force start number on list root.\r | |
128 | element.getFirst( listItem ).removeAttribute( 'value' );\r | |
129 | var val = parseInt( this.getValue(), 10 );\r | |
130 | if ( isNaN( val ) )\r | |
131 | element.removeAttribute( 'start' );\r | |
132 | else\r | |
133 | element.setAttribute( 'start', val );\r | |
134 | \r | |
135 | // Update consequent list item numbering.\r | |
136 | var nextItem = firstItem,\r | |
137 | conseq = oldStart,\r | |
138 | startNumber = isNaN( val ) ? 1 : val;\r | |
139 | while ( ( nextItem = nextItem.getNext( listItem ) ) && conseq++ ) {\r | |
140 | if ( nextItem.getAttribute( 'value' ) == conseq )\r | |
141 | nextItem.setAttribute( 'value', startNumber + conseq - oldStart );\r | |
142 | }\r | |
143 | }\r | |
144 | },\r | |
145 | {\r | |
146 | type: 'select',\r | |
147 | label: lang.type,\r | |
148 | id: 'type',\r | |
149 | style: 'width: 100%;',\r | |
150 | items: listStyleOptions,\r | |
151 | setup: function( element ) {\r | |
152 | var value = element.getStyle( 'list-style-type' ) || mapListStyle[ element.getAttribute( 'type' ) ] || element.getAttribute( 'type' ) || '';\r | |
153 | \r | |
154 | this.setValue( value );\r | |
155 | },\r | |
156 | commit: function( element ) {\r | |
157 | var value = this.getValue();\r | |
158 | if ( value )\r | |
159 | element.setStyle( 'list-style-type', value );\r | |
160 | else\r | |
161 | element.removeStyle( 'list-style-type' );\r | |
162 | }\r | |
163 | } ]\r | |
164 | } ]\r | |
165 | } ],\r | |
166 | onShow: function() {\r | |
167 | var editor = this.getParentEditor(),\r | |
168 | element = getListElement( editor, 'ol' );\r | |
169 | \r | |
170 | element && this.setupContent( element );\r | |
171 | },\r | |
172 | onOk: function() {\r | |
173 | var editor = this.getParentEditor(),\r | |
174 | element = getListElement( editor, 'ol' );\r | |
175 | \r | |
176 | element && this.commitContent( element );\r | |
177 | }\r | |
178 | };\r | |
179 | }\r | |
180 | }\r | |
181 | \r | |
182 | CKEDITOR.dialog.add( 'numberedListStyle', function( editor ) {\r | |
183 | return listStyle( editor, 'numberedListStyle' );\r | |
184 | } );\r | |
185 | \r | |
186 | CKEDITOR.dialog.add( 'bulletedListStyle', function( editor ) {\r | |
187 | return listStyle( editor, 'bulletedListStyle' );\r | |
188 | } );\r | |
189 | } )();\r |