diff options
Diffstat (limited to 'sources/plugins')
1420 files changed, 52561 insertions, 0 deletions
diff --git a/sources/plugins/a11yhelp/dialogs/a11yhelp.js b/sources/plugins/a11yhelp/dialogs/a11yhelp.js new file mode 100644 index 0000000..3936e43 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/a11yhelp.js | |||
@@ -0,0 +1,216 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.dialog.add( 'a11yHelp', function( editor ) { | ||
7 | var lang = editor.lang.a11yhelp, | ||
8 | id = CKEDITOR.tools.getNextId(); | ||
9 | |||
10 | // CharCode <-> KeyChar. | ||
11 | var keyMap = { | ||
12 | 8: lang.backspace, | ||
13 | 9: lang.tab, | ||
14 | 13: lang.enter, | ||
15 | 16: lang.shift, | ||
16 | 17: lang.ctrl, | ||
17 | 18: lang.alt, | ||
18 | 19: lang.pause, | ||
19 | 20: lang.capslock, | ||
20 | 27: lang.escape, | ||
21 | 33: lang.pageUp, | ||
22 | 34: lang.pageDown, | ||
23 | 35: lang.end, | ||
24 | 36: lang.home, | ||
25 | 37: lang.leftArrow, | ||
26 | 38: lang.upArrow, | ||
27 | 39: lang.rightArrow, | ||
28 | 40: lang.downArrow, | ||
29 | 45: lang.insert, | ||
30 | 46: lang[ 'delete' ], | ||
31 | 91: lang.leftWindowKey, | ||
32 | 92: lang.rightWindowKey, | ||
33 | 93: lang.selectKey, | ||
34 | 96: lang.numpad0, | ||
35 | 97: lang.numpad1, | ||
36 | 98: lang.numpad2, | ||
37 | 99: lang.numpad3, | ||
38 | 100: lang.numpad4, | ||
39 | 101: lang.numpad5, | ||
40 | 102: lang.numpad6, | ||
41 | 103: lang.numpad7, | ||
42 | 104: lang.numpad8, | ||
43 | 105: lang.numpad9, | ||
44 | 106: lang.multiply, | ||
45 | 107: lang.add, | ||
46 | 109: lang.subtract, | ||
47 | 110: lang.decimalPoint, | ||
48 | 111: lang.divide, | ||
49 | 112: lang.f1, | ||
50 | 113: lang.f2, | ||
51 | 114: lang.f3, | ||
52 | 115: lang.f4, | ||
53 | 116: lang.f5, | ||
54 | 117: lang.f6, | ||
55 | 118: lang.f7, | ||
56 | 119: lang.f8, | ||
57 | 120: lang.f9, | ||
58 | 121: lang.f10, | ||
59 | 122: lang.f11, | ||
60 | 123: lang.f12, | ||
61 | 144: lang.numLock, | ||
62 | 145: lang.scrollLock, | ||
63 | 186: lang.semiColon, | ||
64 | 187: lang.equalSign, | ||
65 | 188: lang.comma, | ||
66 | 189: lang.dash, | ||
67 | 190: lang.period, | ||
68 | 191: lang.forwardSlash, | ||
69 | 192: lang.graveAccent, | ||
70 | 219: lang.openBracket, | ||
71 | 220: lang.backSlash, | ||
72 | 221: lang.closeBracket, | ||
73 | 222: lang.singleQuote | ||
74 | }; | ||
75 | |||
76 | // Modifier keys override. | ||
77 | keyMap[ CKEDITOR.ALT ] = lang.alt; | ||
78 | keyMap[ CKEDITOR.SHIFT ] = lang.shift; | ||
79 | keyMap[ CKEDITOR.CTRL ] = lang.ctrl; | ||
80 | |||
81 | // Sort in desc. | ||
82 | var modifiers = [ CKEDITOR.ALT, CKEDITOR.SHIFT, CKEDITOR.CTRL ]; | ||
83 | |||
84 | function representKeyStroke( keystroke ) { | ||
85 | var quotient, modifier, | ||
86 | presentation = []; | ||
87 | |||
88 | for ( var i = 0; i < modifiers.length; i++ ) { | ||
89 | modifier = modifiers[ i ]; | ||
90 | quotient = keystroke / modifiers[ i ]; | ||
91 | if ( quotient > 1 && quotient <= 2 ) { | ||
92 | keystroke -= modifier; | ||
93 | presentation.push( keyMap[ modifier ] ); | ||
94 | } | ||
95 | } | ||
96 | |||
97 | presentation.push( keyMap[ keystroke ] || String.fromCharCode( keystroke ) ); | ||
98 | |||
99 | return presentation.join( '+' ); | ||
100 | } | ||
101 | |||
102 | var variablesPattern = /\$\{(.*?)\}/g; | ||
103 | |||
104 | var replaceVariables = ( function() { | ||
105 | // Swaps keystrokes with their commands in object literal. | ||
106 | // This makes searching keystrokes by command much easier. | ||
107 | var keystrokesByCode = editor.keystrokeHandler.keystrokes, | ||
108 | keystrokesByName = {}; | ||
109 | |||
110 | for ( var i in keystrokesByCode ) | ||
111 | keystrokesByName[ keystrokesByCode[ i ] ] = i; | ||
112 | |||
113 | return function( match, name ) { | ||
114 | // Return the keystroke representation or leave match untouched | ||
115 | // if there's no keystroke for such command. | ||
116 | return keystrokesByName[ name ] ? representKeyStroke( keystrokesByName[ name ] ) : match; | ||
117 | }; | ||
118 | } )(); | ||
119 | |||
120 | // Create the help list directly from lang file entries. | ||
121 | function buildHelpContents() { | ||
122 | var pageTpl = '<div class="cke_accessibility_legend" role="document" aria-labelledby="' + id + '_arialbl" tabIndex="-1">%1</div>' + | ||
123 | '<span id="' + id + '_arialbl" class="cke_voice_label">' + lang.contents + ' </span>', | ||
124 | sectionTpl = '<h1>%1</h1><dl>%2</dl>', | ||
125 | itemTpl = '<dt>%1</dt><dd>%2</dd>'; | ||
126 | |||
127 | var pageHtml = [], | ||
128 | sections = lang.legend, | ||
129 | sectionLength = sections.length; | ||
130 | |||
131 | for ( var i = 0; i < sectionLength; i++ ) { | ||
132 | var section = sections[ i ], | ||
133 | sectionHtml = [], | ||
134 | items = section.items, | ||
135 | itemsLength = items.length; | ||
136 | |||
137 | for ( var j = 0; j < itemsLength; j++ ) { | ||
138 | var item = items[ j ], | ||
139 | itemLegend = item.legend.replace( variablesPattern, replaceVariables ); | ||
140 | |||
141 | // (#9765) If some commands haven't been replaced in the legend, | ||
142 | // most likely their keystrokes are unavailable and we shouldn't include | ||
143 | // them in our help list. | ||
144 | if ( itemLegend.match( variablesPattern ) ) | ||
145 | continue; | ||
146 | |||
147 | sectionHtml.push( itemTpl.replace( '%1', item.name ).replace( '%2', itemLegend ) ); | ||
148 | } | ||
149 | |||
150 | pageHtml.push( sectionTpl.replace( '%1', section.name ).replace( '%2', sectionHtml.join( '' ) ) ); | ||
151 | } | ||
152 | |||
153 | return pageTpl.replace( '%1', pageHtml.join( '' ) ); | ||
154 | } | ||
155 | |||
156 | return { | ||
157 | title: lang.title, | ||
158 | minWidth: 600, | ||
159 | minHeight: 400, | ||
160 | contents: [ { | ||
161 | id: 'info', | ||
162 | label: editor.lang.common.generalTab, | ||
163 | expand: true, | ||
164 | elements: [ | ||
165 | { | ||
166 | type: 'html', | ||
167 | id: 'legends', | ||
168 | style: 'white-space:normal;', | ||
169 | focus: function() { | ||
170 | this.getElement().focus(); | ||
171 | }, | ||
172 | html: buildHelpContents() + '<style type="text/css">' + | ||
173 | '.cke_accessibility_legend' + | ||
174 | '{' + | ||
175 | 'width:600px;' + | ||
176 | 'height:400px;' + | ||
177 | 'padding-right:5px;' + | ||
178 | 'overflow-y:auto;' + | ||
179 | 'overflow-x:hidden;' + | ||
180 | '}' + | ||
181 | // Some adjustments are to be done for Quirks to work "properly" (#5757) | ||
182 | '.cke_browser_quirks .cke_accessibility_legend,' + | ||
183 | '{' + | ||
184 | 'height:390px' + | ||
185 | '}' + | ||
186 | // Override non-wrapping white-space rule in reset css. | ||
187 | '.cke_accessibility_legend *' + | ||
188 | '{' + | ||
189 | 'white-space:normal;' + | ||
190 | '}' + | ||
191 | '.cke_accessibility_legend h1' + | ||
192 | '{' + | ||
193 | 'font-size: 20px;' + | ||
194 | 'border-bottom: 1px solid #AAA;' + | ||
195 | 'margin: 5px 0px 15px;' + | ||
196 | '}' + | ||
197 | '.cke_accessibility_legend dl' + | ||
198 | '{' + | ||
199 | 'margin-left: 5px;' + | ||
200 | '}' + | ||
201 | '.cke_accessibility_legend dt' + | ||
202 | '{' + | ||
203 | 'font-size: 13px;' + | ||
204 | 'font-weight: bold;' + | ||
205 | '}' + | ||
206 | '.cke_accessibility_legend dd' + | ||
207 | '{' + | ||
208 | 'margin:10px' + | ||
209 | '}' + | ||
210 | '</style>' | ||
211 | } | ||
212 | ] | ||
213 | } ], | ||
214 | buttons: [ CKEDITOR.dialog.cancelButton ] | ||
215 | }; | ||
216 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/_translationstatus.txt b/sources/plugins/a11yhelp/dialogs/lang/_translationstatus.txt new file mode 100644 index 0000000..4c59097 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/_translationstatus.txt | |||
@@ -0,0 +1,25 @@ | |||
1 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
2 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
3 | |||
4 | cs.js Found: 30 Missing: 0 | ||
5 | cy.js Found: 30 Missing: 0 | ||
6 | da.js Found: 12 Missing: 18 | ||
7 | de.js Found: 30 Missing: 0 | ||
8 | el.js Found: 25 Missing: 5 | ||
9 | eo.js Found: 30 Missing: 0 | ||
10 | fa.js Found: 30 Missing: 0 | ||
11 | fi.js Found: 30 Missing: 0 | ||
12 | fr.js Found: 30 Missing: 0 | ||
13 | gu.js Found: 12 Missing: 18 | ||
14 | he.js Found: 30 Missing: 0 | ||
15 | it.js Found: 30 Missing: 0 | ||
16 | mk.js Found: 5 Missing: 25 | ||
17 | nb.js Found: 30 Missing: 0 | ||
18 | nl.js Found: 30 Missing: 0 | ||
19 | no.js Found: 30 Missing: 0 | ||
20 | pt-br.js Found: 30 Missing: 0 | ||
21 | ro.js Found: 6 Missing: 24 | ||
22 | tr.js Found: 30 Missing: 0 | ||
23 | ug.js Found: 27 Missing: 3 | ||
24 | vi.js Found: 6 Missing: 24 | ||
25 | zh-cn.js Found: 30 Missing: 0 | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/af.js b/sources/plugins/a11yhelp/dialogs/lang/af.js new file mode 100644 index 0000000..600dec5 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/af.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'af', { | ||
7 | title: 'Toeganglikheid instruksies', | ||
8 | contents: 'Hulp inhoud. Druk ESC om toe te maak.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Algemeen', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Bewerker balk', | ||
15 | legend: 'Druk ${toolbarFocus} om op die werkbalk te land. Beweeg na die volgende en voorige wekrbalkgroep met TAB and SHIFT+TAB. Beweeg na die volgende en voorige werkbalkknop met die regter of linker pyl. Druk SPASIE of ENTER om die knop te bevestig.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Bewerker dialoog', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Bewerkerinhoudmenu', | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', // MISSING | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pouse', | ||
93 | capslock: 'Hoofletterslot', | ||
94 | escape: 'Ontsnap', | ||
95 | pageUp: 'Blaaiop', | ||
96 | pageDown: 'Blaaiaf', | ||
97 | end: 'Einde', | ||
98 | home: 'Tuis', | ||
99 | leftArrow: 'Linkspyl', | ||
100 | upArrow: 'Oppyl', | ||
101 | rightArrow: 'Regterpyl', | ||
102 | downArrow: 'Afpyl', | ||
103 | insert: 'Toevoeg', | ||
104 | 'delete': 'Verwyder', | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Nommerblok 0', | ||
109 | numpad1: 'Nommerblok 1', | ||
110 | numpad2: 'Nommerblok 2', | ||
111 | numpad3: 'Nommerblok 3', | ||
112 | numpad4: 'Nommerblok 4', | ||
113 | numpad5: 'Nommerblok 5', | ||
114 | numpad6: 'Nommerblok 6', | ||
115 | numpad7: 'Nommerblok 7', | ||
116 | numpad8: 'Nommerblok 8', | ||
117 | numpad9: 'Nommerblok 9', | ||
118 | multiply: 'Maal', | ||
119 | add: 'Plus', | ||
120 | subtract: 'Minus', | ||
121 | decimalPoint: 'Desimaalepunt', | ||
122 | divide: 'Gedeeldeur', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Nommervergrendel', | ||
136 | scrollLock: 'Rolvergrendel', | ||
137 | semiColon: 'Kommapunt', | ||
138 | equalSign: 'Isgelykaan', | ||
139 | comma: 'Komma', | ||
140 | dash: 'Koppelteken', | ||
141 | period: 'Punt', | ||
142 | forwardSlash: 'Skuinsstreep', | ||
143 | graveAccent: 'Aksentteken', | ||
144 | openBracket: 'Oopblokhakkie', | ||
145 | backSlash: 'Trustreep', | ||
146 | closeBracket: 'Toeblokhakkie', | ||
147 | singleQuote: 'Enkelaanhaalingsteken' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/ar.js b/sources/plugins/a11yhelp/dialogs/lang/ar.js new file mode 100644 index 0000000..edb58df --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/ar.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'ar', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', // MISSING | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'عام', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', // MISSING | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', // MISSING | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'إضافة', | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'تقسيم', | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'فاصلة', | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'نقطة', | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/bg.js b/sources/plugins/a11yhelp/dialogs/lang/bg.js new file mode 100644 index 0000000..4ebdaad --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/bg.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'bg', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', // MISSING | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Общо', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', // MISSING | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', // MISSING | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/ca.js b/sources/plugins/a11yhelp/dialogs/lang/ca.js new file mode 100644 index 0000000..b739c4e --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/ca.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'ca', { | ||
7 | title: 'Instruccions d\'Accessibilitat', | ||
8 | contents: 'Continguts de l\'Ajuda. Per tancar aquest quadre de diàleg premi ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'General', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor de barra d\'eines', | ||
15 | legend: 'Premi ${toolbarFocus} per desplaçar-se per la barra d\'eines. Vagi en el següent i anterior grup de barra d\'eines amb TAB i SHIFT+TAB. Vagi en el següent i anterior botó de la barra d\'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d\'eines.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor de quadre de diàleg', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor de menú contextual', | ||
26 | legend: 'Premi ${contextMenu} o APPLICATION KEY per obrir el menú contextual. Després desplacis a la següent opció del menú amb TAB o DOWN ARROW. Desplacis a l\'anterior opció amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l\'opció del menú. Obri el submenú de l\'actual opció utilitzant SPACE o ENTER o RIGHT ARROW. Pot tornar a l\'opció del menú pare amb ESC o LEFT ARROW. Tanqui el menú contextual amb ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor de caixa de llista', | ||
31 | legend: 'Dins d\'un quadre de llista, desplacis al següent element de la llista amb TAB o DOWN ARROW. Desplacis a l\'anterior element de la llista amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l\'opció de la llista. Premi ESC per tancar el quadre de llista.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor de barra de ruta de l\'element', | ||
36 | legend: 'Premi ${elementsPathFocus} per anar als elements de la barra de ruta. Desplacis al botó de l\'element següent amb TAB o RIGHT ARROW. Desplacis a l\'anterior botó amb SHIFT+TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar l\'element a l\'editor.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Ordres', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Desfer ordre', | ||
45 | legend: 'Premi ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Refer ordre', | ||
49 | legend: 'Premi ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Ordre negreta', | ||
53 | legend: 'Premi ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Ordre cursiva', | ||
57 | legend: 'Premi ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Ordre subratllat', | ||
61 | legend: 'Premi ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Ordre enllaç', | ||
65 | legend: 'Premi ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Ordre amagar barra d\'eines', | ||
69 | legend: 'Premi ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Ordre per accedir a l\'anterior espai enfocat', | ||
73 | legend: 'Premi ${accessPreviousSpace} per accedir a l\'enfocament d\'espai més proper inabastable abans del símbol d\'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d\'espais distants.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Ordre per accedir al següent espai enfocat', | ||
77 | legend: 'Premi ${accessNextSpace} per accedir a l\'enfocament d\'espai més proper inabastable després del símbol d\'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d\'espais distants.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Ajuda d\'accessibilitat', | ||
81 | legend: 'Premi ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Retrocés', | ||
87 | tab: 'Tabulació', | ||
88 | enter: 'Intro', | ||
89 | shift: 'Majúscules', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pausa', | ||
93 | capslock: 'Bloqueig de majúscules', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Pàgina Amunt', | ||
96 | pageDown: 'Pàgina Avall', | ||
97 | end: 'Fi', | ||
98 | home: 'Inici', | ||
99 | leftArrow: 'Fletxa Esquerra', | ||
100 | upArrow: 'Fletxa Amunt', | ||
101 | rightArrow: 'Fletxa Dreta', | ||
102 | downArrow: 'Fletxa Avall', | ||
103 | insert: 'Inserir', | ||
104 | 'delete': 'Eliminar', | ||
105 | leftWindowKey: 'Tecla Windows Esquerra', | ||
106 | rightWindowKey: 'Tecla Windows Dreta', | ||
107 | selectKey: 'Tecla Seleccionar', | ||
108 | numpad0: 'Teclat Numèric 0', | ||
109 | numpad1: 'Teclat Numèric 1', | ||
110 | numpad2: 'Teclat Numèric 2', | ||
111 | numpad3: 'Teclat Numèric 3', | ||
112 | numpad4: 'Teclat Numèric 4', | ||
113 | numpad5: 'Teclat Numèric 5', | ||
114 | numpad6: 'Teclat Numèric 6', | ||
115 | numpad7: 'Teclat Numèric 7', | ||
116 | numpad8: 'Teclat Numèric 8', | ||
117 | numpad9: 'Teclat Numèric 9', | ||
118 | multiply: 'Multiplicació', | ||
119 | add: 'Suma', | ||
120 | subtract: 'Resta', | ||
121 | decimalPoint: 'Punt Decimal', | ||
122 | divide: 'Divisió', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Bloqueig Teclat Numèric', | ||
136 | scrollLock: 'Bloqueig de Desplaçament', | ||
137 | semiColon: 'Punt i Coma', | ||
138 | equalSign: 'Símbol Igual', | ||
139 | comma: 'Coma', | ||
140 | dash: 'Guió', | ||
141 | period: 'Punt', | ||
142 | forwardSlash: 'Barra Diagonal', | ||
143 | graveAccent: 'Accent Obert', | ||
144 | openBracket: 'Claudàtor Obert', | ||
145 | backSlash: 'Barra Invertida', | ||
146 | closeBracket: 'Claudàtor Tancat', | ||
147 | singleQuote: 'Cometa Simple' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/cs.js b/sources/plugins/a11yhelp/dialogs/lang/cs.js new file mode 100644 index 0000000..6386a35 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/cs.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'cs', { | ||
7 | title: 'Instrukce pro přístupnost', | ||
8 | contents: 'Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Obecné', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Panel nástrojů editoru', | ||
15 | legend: 'Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT+TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Dialogové okno editoru', | ||
20 | legend: | ||
21 | 'Uvnitř dialogového okna stiskněte TAB pro přesunutí na další prvek okna, stiskněte SHIFT+TAB pro přesun na předchozí prvek okna, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT+F10 pro zaměření seznamu karet, nebo TAB, pro posun podle pořadí karet.Při zaměření seznamu karet se můžete jimi posouvat pomocí ŠIPKY VPRAVO a VLEVO.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Kontextové menu editoru', | ||
26 | legend: 'Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Rámeček seznamu editoru', | ||
31 | legend: 'Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT+TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Lišta cesty prvku v editoru', | ||
36 | legend: 'Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí tlačítko se přesunete pomocí SHIFT+TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Příkazy', | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Příkaz Zpět', | ||
45 | legend: 'Stiskněte ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: ' Příkaz Znovu', | ||
49 | legend: 'Stiskněte ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: ' Příkaz Tučné', | ||
53 | legend: 'Stiskněte ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: ' Příkaz Kurzíva', | ||
57 | legend: 'Stiskněte ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: ' Příkaz Podtržení', | ||
61 | legend: 'Stiskněte ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: ' Příkaz Odkaz', | ||
65 | legend: 'Stiskněte ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Příkaz Skrýt panel nástrojů', | ||
69 | legend: 'Stiskněte ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Příkaz pro přístup k předchozímu prostoru zaměření', | ||
73 | legend: 'Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Příkaz pro přístup k dalšímu prostoru zaměření', | ||
77 | legend: 'Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte.' | ||
78 | }, | ||
79 | { | ||
80 | name: ' Nápověda přístupnosti', | ||
81 | legend: 'Stiskněte ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tabulátor', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pauza', | ||
93 | capslock: 'Caps lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Stránka nahoru', | ||
96 | pageDown: 'Stránka dolů', | ||
97 | end: 'Konec', | ||
98 | home: 'Domů', | ||
99 | leftArrow: 'Šipka vlevo', | ||
100 | upArrow: 'Šipka nahoru', | ||
101 | rightArrow: 'Šipka vpravo', | ||
102 | downArrow: 'Šipka dolů', | ||
103 | insert: 'Vložit', | ||
104 | 'delete': 'Smazat', | ||
105 | leftWindowKey: 'Levá klávesa Windows', | ||
106 | rightWindowKey: 'Pravá klávesa Windows', | ||
107 | selectKey: 'Vyberte klávesu', | ||
108 | numpad0: 'Numerická klávesa 0', | ||
109 | numpad1: 'Numerická klávesa 1', | ||
110 | numpad2: 'Numerická klávesa 2', | ||
111 | numpad3: 'Numerická klávesa 3', | ||
112 | numpad4: 'Numerická klávesa 4', | ||
113 | numpad5: 'Numerická klávesa 5', | ||
114 | numpad6: 'Numerická klávesa 6', | ||
115 | numpad7: 'Numerická klávesa 7', | ||
116 | numpad8: 'Numerická klávesa 8', | ||
117 | numpad9: 'Numerická klávesa 9', | ||
118 | multiply: 'Numerická klávesa násobení', | ||
119 | add: 'Přidat', | ||
120 | subtract: 'Numerická klávesa odečítání', | ||
121 | decimalPoint: 'Desetinná tečka', | ||
122 | divide: 'Numerická klávesa dělení', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num lock', | ||
136 | scrollLock: 'Scroll lock', | ||
137 | semiColon: 'Středník', | ||
138 | equalSign: 'Rovnítko', | ||
139 | comma: 'Čárka', | ||
140 | dash: 'Pomlčka', | ||
141 | period: 'Tečka', | ||
142 | forwardSlash: 'Lomítko', | ||
143 | graveAccent: 'Přízvuk', | ||
144 | openBracket: 'Otevřená hranatá závorka', | ||
145 | backSlash: 'Obrácené lomítko', | ||
146 | closeBracket: 'Uzavřená hranatá závorka', | ||
147 | singleQuote: 'Jednoduchá uvozovka' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/cy.js b/sources/plugins/a11yhelp/dialogs/lang/cy.js new file mode 100644 index 0000000..f47ff93 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/cy.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'cy', { | ||
7 | title: 'Canllawiau Hygyrchedd', | ||
8 | contents: 'Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Cyffredinol', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Bar Offer y Golygydd', | ||
15 | legend: 'Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i\'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT+TAB. Symudwch i\'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Deialog y Golygydd', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Dewislen Cyd-destun y Golygydd', | ||
26 | legend: 'Pwyswch $ {contextMenu} neu\'r ALLWEDD \'APPLICATION\' i agor y ddewislen cyd-destun. Yna symudwch i\'r opsiwn ddewislen nesaf gyda\'r TAB neu\'r SAETH I LAWR. Symudwch i\'r opsiwn blaenorol gyda SHIFT+TAB neu\'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i\'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Blwch Rhestr y Golygydd', | ||
31 | legend: 'Tu mewn y blwch rhestr, ewch i\'r eitem rhestr nesaf gyda TAB neu\'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT+TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o\'r rhestr. Pwyswch ESC i gau\'r rhestr.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Bar Llwybr Elfen y Golygydd', | ||
36 | legend: 'Pwyswch ${elementsPathFocus} i fynd i\'r bar llwybr elfennau. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT+TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Gorchmynion', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Gorchymyn dadwneud', | ||
45 | legend: 'Pwyswch ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Gorchymyn ailadrodd', | ||
49 | legend: 'Pwyswch ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Gorchymyn Bras', | ||
53 | legend: 'Pwyswch ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Gorchymyn italig', | ||
57 | legend: 'Pwyswch ${italig}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Gorchymyn tanlinellu', | ||
61 | legend: 'Pwyso ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Gorchymyn dolen', | ||
65 | legend: 'Pwyswch ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Gorchymyn Cwympo\'r Dewislen', | ||
69 | legend: 'Pwyswch ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Myned i orchymyn bwlch ffocws blaenorol', | ||
73 | legend: 'Pwyswch ${accessPreviousSpace} i fyned i\'r "blwch ffocws sydd methu ei gyrraedd" cyn y caret, er enghraifft: dwy elfen HR drws nesaf i\'w gilydd. AIladroddwch y cyfuniad allwedd i gyrraedd bylchau ffocws pell.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Ewch i\'r gorchymyn blwch ffocws nesaf', | ||
77 | legend: 'Pwyswch ${accessNextSpace} i fyned i\'r blwch ffocws agosaf nad oes modd ei gyrraedd ar ôl y caret, er enghraifft: dwy elfen HR drws nesaf i\'w gilydd. Ailadroddwch y cyfuniad allwedd i gyrraedd blychau ffocws pell.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Cymorth Hygyrchedd', | ||
81 | legend: 'Pwyswch ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/da.js b/sources/plugins/a11yhelp/dialogs/lang/da.js new file mode 100644 index 0000000..8ec3f61 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/da.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'da', { | ||
7 | title: 'Tilgængelighedsinstrukser', | ||
8 | contents: 'Onlinehjælp. For at lukke dette vindue klik ESC', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Generelt', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor værktøjslinje', | ||
15 | legend: 'Tryk ${toolbarFocus} for at navigere til værktøjslinjen. Flyt til næste eller forrige værktøjsline gruppe ved hjælp af TAB eller SHIFT+TAB. Flyt til næste eller forrige værktøjslinje knap med venstre- eller højre piltast. Tryk på SPACE eller ENTER for at aktivere værktøjslinje knappen.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor dialogboks', | ||
20 | legend: | ||
21 | 'Inde i en dialogboks kan du, trykke på TAB for at navigere til næste element, trykke på SHIFT+TAB for at navigere til forrige element, trykke på ENTER for at afsende eller trykke på ESC for at lukke dialogboksen.\r\nNår en dialogboks har flere faner, fanelisten kan tilgås med ALT+F10 eller med TAB. Hvis fanelisten er i fokus kan du skifte til næste eller forrige tab, med højre- og venstre piltast.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Kommandoer', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Fortryd kommando', | ||
45 | legend: 'Klik på ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Gentag kommando', | ||
49 | legend: 'Klik ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Fed kommando', | ||
53 | legend: 'Klik ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Kursiv kommando', | ||
57 | legend: 'Klik ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Understregnings kommando', | ||
61 | legend: 'Klik ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Link kommando', | ||
65 | legend: 'Klik ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Klik ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: 'Tilgængelighedshjælp', | ||
81 | legend: 'Kilk ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Venstre pil', | ||
100 | upArrow: 'Pil op', | ||
101 | rightArrow: 'Højre pil', | ||
102 | downArrow: 'Pil ned', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'Venstre Windows tast', | ||
106 | rightWindowKey: 'Højre Windows tast', | ||
107 | selectKey: 'Select-knap', | ||
108 | numpad0: 'Numpad 0', | ||
109 | numpad1: 'Numpad 1', | ||
110 | numpad2: 'Numpad 2', | ||
111 | numpad3: 'Numpad 3', | ||
112 | numpad4: 'Numpad 4', | ||
113 | numpad5: 'Numpad 5', | ||
114 | numpad6: 'Numpad 6', | ||
115 | numpad7: 'Numpad 7', | ||
116 | numpad8: 'Numpad 8', | ||
117 | numpad9: 'Numpad 9', | ||
118 | multiply: 'Gange', | ||
119 | add: 'Plus', | ||
120 | subtract: 'Minus', | ||
121 | decimalPoint: 'Komma', | ||
122 | divide: 'Divider', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Semikolon', | ||
138 | equalSign: 'Lighedstegn', | ||
139 | comma: 'Komma', | ||
140 | dash: 'Bindestreg', | ||
141 | period: 'Punktum', | ||
142 | forwardSlash: 'Skråstreg', | ||
143 | graveAccent: 'Accent grave', | ||
144 | openBracket: 'Start klamme', | ||
145 | backSlash: 'Omvendt skråstreg', | ||
146 | closeBracket: 'Slut klamme', | ||
147 | singleQuote: 'Enkelt citationstegn' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/de-ch.js b/sources/plugins/a11yhelp/dialogs/lang/de-ch.js new file mode 100644 index 0000000..afa4021 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/de-ch.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'de-ch', { | ||
7 | title: 'Barrierefreiheitinformationen', | ||
8 | contents: 'Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Allgemein', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editorwerkzeugleiste', | ||
15 | legend: 'Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editordialog', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor-Kontextmenü', | ||
26 | legend: 'Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor-Listenbox', | ||
31 | legend: 'Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor-Elementpfadleiste', | ||
36 | legend: 'Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Befehle', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Rückgängig-Befehl', | ||
45 | legend: 'Drücken Sie ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Wiederherstellen-Befehl', | ||
49 | legend: 'Drücken Sie ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Fettschrift-Befehl', | ||
53 | legend: 'Drücken Sie ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Kursiv-Befehl', | ||
57 | legend: 'Drücken Sie ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Unterstreichen-Befehl', | ||
61 | legend: 'Drücken Sie ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Link-Befehl', | ||
65 | legend: 'Drücken Sie ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Werkzeugleiste einklappen-Befehl', | ||
69 | legend: 'Drücken Sie ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Zugang bisheriger Fokussierung Raumbefehl ', | ||
73 | legend: 'Drücken Sie ${accessPreviousSpace} auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. ' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Zugang nächster Schwerpunkt Raumbefehl ', | ||
77 | legend: 'Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. ' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Eingabehilfen', | ||
81 | legend: 'Drücken Sie ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Rücktaste', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Eingabe', | ||
89 | shift: 'Umschalt', | ||
90 | ctrl: 'Strg', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Feststell', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Bild auf', | ||
96 | pageDown: 'Bild ab', | ||
97 | end: 'Ende', | ||
98 | home: 'Pos1', | ||
99 | leftArrow: 'Linke Pfeiltaste', | ||
100 | upArrow: 'Obere Pfeiltaste', | ||
101 | rightArrow: 'Rechte Pfeiltaste', | ||
102 | downArrow: 'Untere Pfeiltaste', | ||
103 | insert: 'Einfügen', | ||
104 | 'delete': 'Entfernen', | ||
105 | leftWindowKey: 'Linke Windowstaste', | ||
106 | rightWindowKey: 'Rechte Windowstaste', | ||
107 | selectKey: 'Taste auswählen', | ||
108 | numpad0: 'Ziffernblock 0', | ||
109 | numpad1: 'Ziffernblock 1', | ||
110 | numpad2: 'Ziffernblock 2', | ||
111 | numpad3: 'Ziffernblock 3', | ||
112 | numpad4: 'Ziffernblock 4', | ||
113 | numpad5: 'Ziffernblock 5', | ||
114 | numpad6: 'Ziffernblock 6', | ||
115 | numpad7: 'Ziffernblock 7', | ||
116 | numpad8: 'Ziffernblock 8', | ||
117 | numpad9: 'Ziffernblock 9', | ||
118 | multiply: 'Multiplizieren', | ||
119 | add: 'Addieren', | ||
120 | subtract: 'Subtrahieren', | ||
121 | decimalPoint: 'Punkt', | ||
122 | divide: 'Dividieren', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Ziffernblock feststellen', | ||
136 | scrollLock: 'Rollen', | ||
137 | semiColon: 'Semikolon', | ||
138 | equalSign: 'Gleichheitszeichen', | ||
139 | comma: 'Komma', | ||
140 | dash: 'Bindestrich', | ||
141 | period: 'Punkt', | ||
142 | forwardSlash: 'Schrägstrich', | ||
143 | graveAccent: 'Gravis', | ||
144 | openBracket: 'Öffnende eckige Klammer', | ||
145 | backSlash: 'Rückwärtsgewandter Schrägstrich', | ||
146 | closeBracket: 'Schliessende eckige Klammer', | ||
147 | singleQuote: 'Einfaches Anführungszeichen' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/de.js b/sources/plugins/a11yhelp/dialogs/lang/de.js new file mode 100644 index 0000000..5d3fd04 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/de.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'de', { | ||
7 | title: 'Barrierefreiheitinformationen', | ||
8 | contents: 'Hilfeinhalt. Um den Dialog zu schliessen die Taste ESC drücken.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Allgemein', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editorwerkzeugleiste', | ||
15 | legend: 'Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT+TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editordialog', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor-Kontextmenü', | ||
26 | legend: 'Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor-Listenbox', | ||
31 | legend: 'Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der SHIFT+TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor-Elementpfadleiste', | ||
36 | legend: 'Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT+TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Befehle', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Rückgängig-Befehl', | ||
45 | legend: 'Drücken Sie ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Wiederherstellen-Befehl', | ||
49 | legend: 'Drücken Sie ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Fettschrift-Befehl', | ||
53 | legend: 'Drücken Sie ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Kursiv-Befehl', | ||
57 | legend: 'Drücken Sie ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Unterstreichen-Befehl', | ||
61 | legend: 'Drücken Sie ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Link-Befehl', | ||
65 | legend: 'Drücken Sie ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Werkzeugleiste einklappen-Befehl', | ||
69 | legend: 'Drücken Sie ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Zugang bisheriger Fokussierung Raumbefehl ', | ||
73 | legend: 'Drücken Sie ${accessPreviousSpace} auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. ' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Zugang nächster Schwerpunkt Raumbefehl ', | ||
77 | legend: 'Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. ' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Eingabehilfen', | ||
81 | legend: 'Drücken Sie ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Rücktaste', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Eingabe', | ||
89 | shift: 'Umschalt', | ||
90 | ctrl: 'Strg', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Feststell', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Bild auf', | ||
96 | pageDown: 'Bild ab', | ||
97 | end: 'Ende', | ||
98 | home: 'Pos1', | ||
99 | leftArrow: 'Linke Pfeiltaste', | ||
100 | upArrow: 'Obere Pfeiltaste', | ||
101 | rightArrow: 'Rechte Pfeiltaste', | ||
102 | downArrow: 'Untere Pfeiltaste', | ||
103 | insert: 'Einfügen', | ||
104 | 'delete': 'Entfernen', | ||
105 | leftWindowKey: 'Linke Windowstaste', | ||
106 | rightWindowKey: 'Rechte Windowstaste', | ||
107 | selectKey: 'Taste auswählen', | ||
108 | numpad0: 'Ziffernblock 0', | ||
109 | numpad1: 'Ziffernblock 1', | ||
110 | numpad2: 'Ziffernblock 2', | ||
111 | numpad3: 'Ziffernblock 3', | ||
112 | numpad4: 'Ziffernblock 4', | ||
113 | numpad5: 'Ziffernblock 5', | ||
114 | numpad6: 'Ziffernblock 6', | ||
115 | numpad7: 'Ziffernblock 7', | ||
116 | numpad8: 'Ziffernblock 8', | ||
117 | numpad9: 'Ziffernblock 9', | ||
118 | multiply: 'Multiplizieren', | ||
119 | add: 'Addieren', | ||
120 | subtract: 'Subtrahieren', | ||
121 | decimalPoint: 'Punkt', | ||
122 | divide: 'Dividieren', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Ziffernblock feststellen', | ||
136 | scrollLock: 'Rollen', | ||
137 | semiColon: 'Semikolon', | ||
138 | equalSign: 'Gleichheitszeichen', | ||
139 | comma: 'Komma', | ||
140 | dash: 'Bindestrich', | ||
141 | period: 'Punkt', | ||
142 | forwardSlash: 'Schrägstrich', | ||
143 | graveAccent: 'Gravis', | ||
144 | openBracket: 'Öffnende eckige Klammer', | ||
145 | backSlash: 'Rückwärtsgewandter Schrägstrich', | ||
146 | closeBracket: 'Schließende eckige Klammer', | ||
147 | singleQuote: 'Einfaches Anführungszeichen' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/el.js b/sources/plugins/a11yhelp/dialogs/lang/el.js new file mode 100644 index 0000000..ec61ce5 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/el.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'el', { | ||
7 | title: 'Οδηγίες Προσβασιμότητας', | ||
8 | contents: 'Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Γενικά', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Εργαλειοθήκη Επεξεργαστή', | ||
15 | legend: 'Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και SHIFT+TAB. Μετακινηθείτε ανάμεσα στα κουμπιά εργαλείων με το ΔΕΞΙ ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Παράθυρο Διαλόγου Επεξεργαστή', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Αναδυόμενο Μενού Επεξεργαστή', | ||
26 | legend: 'Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενού. Μετά μετακινηθείτε στην επόμενη επιλογή του μενού με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην προηγούμενη επιλογή με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε το τρέχων στοιχείο. Ανοίξτε το αναδυόμενο μενού της τρέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αρχικό στοιχείο μενού με το ESC ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο μενού με ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Κουτί Λίστας Επεξεργαστών', | ||
31 | legend: 'Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο προηγούμενο στοιχείο με SHIFT+TAB ή το ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Μπάρα Διαδρομών Στοιχείων Επεξεργαστή', | ||
36 | legend: 'Πατήστε ${elementsPathFocus} για να περιηγηθείτε στην μπάρα διαδρομών στοιχείων του επεξεργαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του προηγούμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεργαστή.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Εντολές', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Εντολή αναίρεσης', | ||
45 | legend: 'Πατήστε ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Εντολή επανάληψης', | ||
49 | legend: 'Πατήστε ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Εντολή έντονης γραφής', | ||
53 | legend: 'Πατήστε ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Εντολή πλάγιας γραφής', | ||
57 | legend: 'Πατήστε ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Εντολή υπογράμμισης', | ||
61 | legend: 'Πατήστε ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Εντολή συνδέσμου', | ||
65 | legend: 'Πατήστε ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Εντολή Σύμπτηξης Εργαλειοθήκης', | ||
69 | legend: 'Πατήστε ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Πρόσβαση στην προηγούμενη εντολή του χώρου εστίασης ', | ||
73 | legend: 'Πατήστε ${accessPreviousSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης πριν το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για να φθάσετε στους χώρους μακρινής εστίασης. ' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Πρόσβαση στην επόμενη εντολή του χώρου εστίασης', | ||
77 | legend: 'Πατήστε ${accessNextSpace} για να έχετε πρόσβαση στον πιο κοντινό χώρο εστίασης μετά το δρομέα, για παράδειγμα: δύο παρακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτρων για τους χώρους μακρινής εστίασης. ' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Βοήθεια Προσβασιμότητας', | ||
81 | legend: 'Πατήστε ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Αριστερό Βέλος', | ||
100 | upArrow: 'Πάνω Βέλος', | ||
101 | rightArrow: 'Δεξί Βέλος', | ||
102 | downArrow: 'Κάτω Βέλος', | ||
103 | insert: 'Insert ', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'Αριστερό Πλήκτρο Windows', | ||
106 | rightWindowKey: 'Δεξί Πλήκτρο Windows', | ||
107 | selectKey: 'Πλήκτρο Select', | ||
108 | numpad0: 'Αριθμητικό πληκτρολόγιο 0', | ||
109 | numpad1: 'Αριθμητικό Πληκτρολόγιο 1', | ||
110 | numpad2: 'Αριθμητικό πληκτρολόγιο 2', | ||
111 | numpad3: 'Αριθμητικό πληκτρολόγιο 3', | ||
112 | numpad4: 'Αριθμητικό πληκτρολόγιο 4', | ||
113 | numpad5: 'Αριθμητικό πληκτρολόγιο 5', | ||
114 | numpad6: 'Αριθμητικό πληκτρολόγιο 6', | ||
115 | numpad7: 'Αριθμητικό πληκτρολόγιο 7', | ||
116 | numpad8: 'Αριθμητικό πληκτρολόγιο 8', | ||
117 | numpad9: 'Αριθμητικό πληκτρολόγιο 9', | ||
118 | multiply: 'Πολλαπλασιασμός', | ||
119 | add: 'Πρόσθεση', | ||
120 | subtract: 'Αφαίρεση', | ||
121 | decimalPoint: 'Υποδιαστολή', | ||
122 | divide: 'Διαίρεση', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: '6', | ||
129 | f7: '7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Ερωτηματικό', | ||
138 | equalSign: 'Σύμβολο Ισότητας', | ||
139 | comma: 'Κόμμα', | ||
140 | dash: 'Παύλα', | ||
141 | period: 'Τελεία', | ||
142 | forwardSlash: 'Κάθετος', | ||
143 | graveAccent: 'Βαρεία', | ||
144 | openBracket: 'Άνοιγμα Παρένθεσης', | ||
145 | backSlash: 'Ανάστροφη Κάθετος', | ||
146 | closeBracket: 'Κλείσιμο Παρένθεσης', | ||
147 | singleQuote: 'Απόστροφος' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/en-gb.js b/sources/plugins/a11yhelp/dialogs/lang/en-gb.js new file mode 100644 index 0000000..27dbff8 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/en-gb.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'en-gb', { | ||
7 | title: 'Accessibility Instructions', | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', // MISSING | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'General', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', | ||
45 | legend: 'Press ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', | ||
49 | legend: 'Press ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', | ||
53 | legend: 'Press ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', | ||
57 | legend: 'Press ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', | ||
61 | legend: 'Press ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', | ||
65 | legend: 'Press ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', | ||
69 | legend: 'Press ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', | ||
81 | legend: 'Press ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Left Arrow', | ||
100 | upArrow: 'Up Arrow', | ||
101 | rightArrow: 'Right Arrow', | ||
102 | downArrow: 'Down Arrow', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'Left Windows key', | ||
106 | rightWindowKey: 'Right Windows key', | ||
107 | selectKey: 'Select key', | ||
108 | numpad0: 'Numpad 0', | ||
109 | numpad1: 'Numpad 1', | ||
110 | numpad2: 'Numpad 2', | ||
111 | numpad3: 'Numpad 3', | ||
112 | numpad4: 'Numpad 4', | ||
113 | numpad5: 'Numpad 5', | ||
114 | numpad6: 'Numpad 6', | ||
115 | numpad7: 'Numpad 7', | ||
116 | numpad8: 'Numpad 8', | ||
117 | numpad9: 'Numpad 9', | ||
118 | multiply: 'Multiply', | ||
119 | add: 'Add', | ||
120 | subtract: 'Subtract', | ||
121 | decimalPoint: 'Decimal Point', | ||
122 | divide: 'Divide', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Semicolon', | ||
138 | equalSign: 'Equal Sign', | ||
139 | comma: 'Comma', | ||
140 | dash: 'Dash', | ||
141 | period: 'Period', | ||
142 | forwardSlash: 'Forward Slash', | ||
143 | graveAccent: 'Grave Accent', | ||
144 | openBracket: 'Open Bracket', | ||
145 | backSlash: 'Backslash', | ||
146 | closeBracket: 'Close Bracket', | ||
147 | singleQuote: 'Single Quote' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/en.js b/sources/plugins/a11yhelp/dialogs/lang/en.js new file mode 100644 index 0000000..47823d7 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/en.js | |||
@@ -0,0 +1,167 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'en', { | ||
7 | title: 'Accessibility Instructions', | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'General', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. ' + | ||
16 | 'Move to the next and previous toolbar group with TAB and SHIFT+TAB. ' + | ||
17 | 'Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. ' + | ||
18 | 'Press SPACE or ENTER to activate the toolbar button.' | ||
19 | }, | ||
20 | |||
21 | { | ||
22 | name: 'Editor Dialog', | ||
23 | legend: | ||
24 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. ' + | ||
25 | 'When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. ' + | ||
26 | 'With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor Context Menu', | ||
31 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. ' + | ||
32 | 'Then move to next menu option with TAB or DOWN ARROW. ' + | ||
33 | 'Move to previous option with SHIFT+TAB or UP ARROW. ' + | ||
34 | 'Press SPACE or ENTER to select the menu option. ' + | ||
35 | 'Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. ' + | ||
36 | 'Go back to parent menu item with ESC or LEFT ARROW. ' + | ||
37 | 'Close context menu with ESC.' | ||
38 | }, | ||
39 | |||
40 | { | ||
41 | name: 'Editor List Box', | ||
42 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. ' + | ||
43 | 'Move to previous list item with SHIFT+TAB or UP ARROW. ' + | ||
44 | 'Press SPACE or ENTER to select the list option. ' + | ||
45 | 'Press ESC to close the list-box.' | ||
46 | }, | ||
47 | |||
48 | { | ||
49 | name: 'Editor Element Path Bar', | ||
50 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. ' + | ||
51 | 'Move to next element button with TAB or RIGHT ARROW. ' + | ||
52 | 'Move to previous button with SHIFT+TAB or LEFT ARROW. ' + | ||
53 | 'Press SPACE or ENTER to select the element in editor.' | ||
54 | } | ||
55 | ] | ||
56 | }, | ||
57 | { | ||
58 | name: 'Commands', | ||
59 | items: [ | ||
60 | { | ||
61 | name: ' Undo command', | ||
62 | legend: 'Press ${undo}' | ||
63 | }, | ||
64 | { | ||
65 | name: ' Redo command', | ||
66 | legend: 'Press ${redo}' | ||
67 | }, | ||
68 | { | ||
69 | name: ' Bold command', | ||
70 | legend: 'Press ${bold}' | ||
71 | }, | ||
72 | { | ||
73 | name: ' Italic command', | ||
74 | legend: 'Press ${italic}' | ||
75 | }, | ||
76 | { | ||
77 | name: ' Underline command', | ||
78 | legend: 'Press ${underline}' | ||
79 | }, | ||
80 | { | ||
81 | name: ' Link command', | ||
82 | legend: 'Press ${link}' | ||
83 | }, | ||
84 | { | ||
85 | name: ' Toolbar Collapse command', | ||
86 | legend: 'Press ${toolbarCollapse}' | ||
87 | }, | ||
88 | { | ||
89 | name: ' Access previous focus space command', | ||
90 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, ' + | ||
91 | 'for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' | ||
92 | }, | ||
93 | { | ||
94 | name: ' Access next focus space command', | ||
95 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, ' + | ||
96 | 'for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' | ||
97 | }, | ||
98 | { | ||
99 | name: ' Accessibility Help', | ||
100 | legend: 'Press ${a11yHelp}' | ||
101 | } | ||
102 | ] | ||
103 | } | ||
104 | ], | ||
105 | backspace: 'Backspace', | ||
106 | tab: 'Tab', | ||
107 | enter: 'Enter', | ||
108 | shift: 'Shift', | ||
109 | ctrl: 'Ctrl', | ||
110 | alt: 'Alt', | ||
111 | pause: 'Pause', | ||
112 | capslock: 'Caps Lock', | ||
113 | escape: 'Escape', | ||
114 | pageUp: 'Page Up', | ||
115 | pageDown: 'Page Down', | ||
116 | end: 'End', | ||
117 | home: 'Home', | ||
118 | leftArrow: 'Left Arrow', | ||
119 | upArrow: 'Up Arrow', | ||
120 | rightArrow: 'Right Arrow', | ||
121 | downArrow: 'Down Arrow', | ||
122 | insert: 'Insert', | ||
123 | 'delete': 'Delete', | ||
124 | leftWindowKey: 'Left Windows key', | ||
125 | rightWindowKey: 'Right Windows key', | ||
126 | selectKey: 'Select key', | ||
127 | numpad0: 'Numpad 0', | ||
128 | numpad1: 'Numpad 1', | ||
129 | numpad2: 'Numpad 2', | ||
130 | numpad3: 'Numpad 3', | ||
131 | numpad4: 'Numpad 4', | ||
132 | numpad5: 'Numpad 5', | ||
133 | numpad6: 'Numpad 6', | ||
134 | numpad7: 'Numpad 7', | ||
135 | numpad8: 'Numpad 8', | ||
136 | numpad9: 'Numpad 9', | ||
137 | multiply: 'Multiply', | ||
138 | add: 'Add', | ||
139 | subtract: 'Subtract', | ||
140 | decimalPoint: 'Decimal Point', | ||
141 | divide: 'Divide', | ||
142 | f1: 'F1', | ||
143 | f2: 'F2', | ||
144 | f3: 'F3', | ||
145 | f4: 'F4', | ||
146 | f5: 'F5', | ||
147 | f6: 'F6', | ||
148 | f7: 'F7', | ||
149 | f8: 'F8', | ||
150 | f9: 'F9', | ||
151 | f10: 'F10', | ||
152 | f11: 'F11', | ||
153 | f12: 'F12', | ||
154 | numLock: 'Num Lock', | ||
155 | scrollLock: 'Scroll Lock', | ||
156 | semiColon: 'Semicolon', | ||
157 | equalSign: 'Equal Sign', | ||
158 | comma: 'Comma', | ||
159 | dash: 'Dash', | ||
160 | period: 'Period', | ||
161 | forwardSlash: 'Forward Slash', | ||
162 | graveAccent: 'Grave Accent', | ||
163 | openBracket: 'Open Bracket', | ||
164 | backSlash: 'Backslash', | ||
165 | closeBracket: 'Close Bracket', | ||
166 | singleQuote: 'Single Quote' | ||
167 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/eo.js b/sources/plugins/a11yhelp/dialogs/lang/eo.js new file mode 100644 index 0000000..104cdc4 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/eo.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'eo', { | ||
7 | title: 'Uzindikoj pri atingeblo', | ||
8 | contents: 'Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Ĝeneralaĵoj', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Ilbreto de la redaktilo', | ||
15 | legend: 'Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA+TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Redaktildialogo', | ||
20 | legend: | ||
21 | 'En dialogo, premu la TABAN klavon por navigi al la sekva dialogelemento, premu la MAJUSKLIGAN+TABAN klavon por iri al la antaŭa dialogelemento, premu la ENEN klavon por sendi la dialogon, premu la ESKAPAN klavon por nuligi la dialogon. Kiam dialogo havas multajn langetojn, eblas atingi la langetliston aŭ per ALT+F10 aŭ per la TABA klavo kiel parton de la dialoga taba ordo. En langetlisto, moviĝu al la sekva kaj antaŭa langeto per la klavoj SAGO DEKSTREN KAJ MALDEKSTREN respektive.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Kunteksta menuo de la redaktilo', | ||
26 | legend: 'Premu ${contextMenu} aŭ entajpu la KLAVKOMBINAĴON por malfermi la kuntekstan menuon. Poste moviĝu al la sekva opcio de la menuo per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa opcio per la klavoj MAJUSKLGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aŭ la ENENklavo aŭ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aŭ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Fallisto de la redaktilo', | ||
31 | legend: 'En fallisto, moviĝu al la sekva listelemento per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa listelemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Breto indikanta la vojon al la redaktilelementoj', | ||
36 | legend: 'Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. Moviĝu al la butono de la sekva elemento per la klavoj TABA aŭ SAGO DEKSTREN. Moviĝu al la butono de la antaŭa elemento per la klavoj MAJUSKLIGA+TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ ENENklavon por selekti la elementon en la redaktilo.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Komandoj', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Komando malfari', | ||
45 | legend: 'Premu ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Komando refari', | ||
49 | legend: 'Premu ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Komando grasa', | ||
53 | legend: 'Premu ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Komando kursiva', | ||
57 | legend: 'Premu ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Komando substreki', | ||
61 | legend: 'Premu ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Komando ligilo', | ||
65 | legend: 'Premu ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Komando faldi la ilbreton', | ||
69 | legend: 'Premu ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Komando por atingi la antaŭan fokusan spacon', | ||
73 | legend: 'Press ${accessPreviousSpace} por atingi la plej proksiman neatingeblan fokusan spacon antaŭ la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinaĵon por atingi malproksimajn fokusajn spacojn.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Komando por atingi la sekvan fokusan spacon', | ||
77 | legend: 'Press ${accessNextSpace} por atingi la plej proksiman neatingeblan fokusan spacon post la kursoro, ekzemple : du kuntuŝiĝajn HR elementojn. Ripetu la klavkombinajôn por atingi malproksimajn fokusajn spacojn' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Helpilo pri atingeblo', | ||
81 | legend: 'Premu ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Retropaŝo', | ||
87 | tab: 'Tabo', | ||
88 | enter: 'Enigi', | ||
89 | shift: 'Registrumo', | ||
90 | ctrl: 'Stirklavo', | ||
91 | alt: 'Alt-klavo', | ||
92 | pause: 'Paŭzo', | ||
93 | capslock: 'Majuskla baskulo', | ||
94 | escape: 'Eskapa klavo', | ||
95 | pageUp: 'Antaŭa Paĝo', | ||
96 | pageDown: 'Sekva Paĝo', | ||
97 | end: 'Fino', | ||
98 | home: 'Hejmo', | ||
99 | leftArrow: 'Sago Maldekstren', | ||
100 | upArrow: 'Sago Supren', | ||
101 | rightArrow: 'Sago Dekstren', | ||
102 | downArrow: 'Sago Suben', | ||
103 | insert: 'Enmeti', | ||
104 | 'delete': 'Forigi', | ||
105 | leftWindowKey: 'Maldekstra Windows-klavo', | ||
106 | rightWindowKey: 'Dekstra Windows-klavo', | ||
107 | selectKey: 'Selektklavo', | ||
108 | numpad0: 'Nombra Klavaro 0', | ||
109 | numpad1: 'Nombra Klavaro 1', | ||
110 | numpad2: 'Nombra Klavaro 2', | ||
111 | numpad3: 'Nombra Klavaro 3', | ||
112 | numpad4: 'Nombra Klavaro 4', | ||
113 | numpad5: 'Nombra Klavaro 5', | ||
114 | numpad6: 'Nombra Klavaro 6', | ||
115 | numpad7: 'Nombra Klavaro 7', | ||
116 | numpad8: 'Nombra Klavaro 8', | ||
117 | numpad9: 'Nombra Klavaro 9', | ||
118 | multiply: 'Obligi', | ||
119 | add: 'Almeti', | ||
120 | subtract: 'Subtrahi', | ||
121 | decimalPoint: 'Dekuma Punkto', | ||
122 | divide: 'Dividi', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Nombra Baskulo', | ||
136 | scrollLock: 'Ruluma Baskulo', | ||
137 | semiColon: 'Punktokomo', | ||
138 | equalSign: 'Egalsigno', | ||
139 | comma: 'Komo', | ||
140 | dash: 'Haltostreko', | ||
141 | period: 'Punkto', | ||
142 | forwardSlash: 'Oblikvo', | ||
143 | graveAccent: 'Malakuto', | ||
144 | openBracket: 'Malferma Krampo', | ||
145 | backSlash: 'Retroklino', | ||
146 | closeBracket: 'Ferma Krampo', | ||
147 | singleQuote: 'Citilo' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/es.js b/sources/plugins/a11yhelp/dialogs/lang/es.js new file mode 100644 index 0000000..8a1e130 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/es.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'es', { | ||
7 | title: 'Instrucciones de accesibilidad', | ||
8 | contents: 'Ayuda. Para cerrar presione ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'General', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Barra de herramientas del editor', | ||
15 | legend: 'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY+TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor de diálogo', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor del menú contextual', | ||
26 | legend: 'Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Lista del Editor', | ||
31 | legend: 'Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT+TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Barra de Ruta del Elemento en el Editor', | ||
36 | legend: 'Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT+TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Comandos', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Comando deshacer', | ||
45 | legend: 'Presiona ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Comando rehacer', | ||
49 | legend: 'Presiona ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Comando negrita', | ||
53 | legend: 'Presiona ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Comando itálica', | ||
57 | legend: 'Presiona ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Comando subrayar', | ||
61 | legend: 'Presiona ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Comando liga', | ||
65 | legend: 'Presiona ${liga}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Comando colapsar barra de herramientas', | ||
69 | legend: 'Presiona ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Comando accesar el anterior espacio de foco', | ||
73 | legend: 'Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Comando accesar el siguiente spacio de foco', | ||
77 | legend: 'Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Ayuda de Accesibilidad', | ||
81 | legend: 'Presiona ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Retroceso', | ||
87 | tab: 'Tabulador', | ||
88 | enter: 'Ingresar', | ||
89 | shift: 'Mayús.', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pausa', | ||
93 | capslock: 'Bloq. Mayús.', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Regresar Página', | ||
96 | pageDown: 'Avanzar Página', | ||
97 | end: 'Fin', | ||
98 | home: 'Inicio', | ||
99 | leftArrow: 'Flecha Izquierda', | ||
100 | upArrow: 'Flecha Arriba', | ||
101 | rightArrow: 'Flecha Derecha', | ||
102 | downArrow: 'Flecha Abajo', | ||
103 | insert: 'Insertar', | ||
104 | 'delete': 'Suprimir', | ||
105 | leftWindowKey: 'Tecla Windows Izquierda', | ||
106 | rightWindowKey: 'Tecla Windows Derecha', | ||
107 | selectKey: 'Tecla de Selección', | ||
108 | numpad0: 'Tecla 0 del teclado numérico', | ||
109 | numpad1: 'Tecla 1 del teclado numérico', | ||
110 | numpad2: 'Tecla 2 del teclado numérico', | ||
111 | numpad3: 'Tecla 3 del teclado numérico', | ||
112 | numpad4: 'Tecla 4 del teclado numérico', | ||
113 | numpad5: 'Tecla 5 del teclado numérico', | ||
114 | numpad6: 'Tecla 6 del teclado numérico', | ||
115 | numpad7: 'Tecla 7 del teclado numérico', | ||
116 | numpad8: 'Tecla 8 del teclado numérico', | ||
117 | numpad9: 'Tecla 9 del teclado numérico', | ||
118 | multiply: 'Multiplicar', | ||
119 | add: 'Sumar', | ||
120 | subtract: 'Restar', | ||
121 | decimalPoint: 'Punto Decimal', | ||
122 | divide: 'Dividir', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Punto y coma', | ||
138 | equalSign: 'Signo de Igual', | ||
139 | comma: 'Coma', | ||
140 | dash: 'Guión', | ||
141 | period: 'Punto', | ||
142 | forwardSlash: 'Diagonal', | ||
143 | graveAccent: 'Acento Grave', | ||
144 | openBracket: 'Abrir llave', | ||
145 | backSlash: 'Diagonal Invertida', | ||
146 | closeBracket: 'Cerrar llave', | ||
147 | singleQuote: 'Comillas simples' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/et.js b/sources/plugins/a11yhelp/dialogs/lang/et.js new file mode 100644 index 0000000..394f0c6 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/et.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'et', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Üldine', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', // MISSING | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', // MISSING | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/eu.js b/sources/plugins/a11yhelp/dialogs/lang/eu.js new file mode 100644 index 0000000..097ad14 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/eu.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'eu', { | ||
7 | title: 'Erabilerraztasunaren argibideak', | ||
8 | contents: 'Laguntzaren edukiak. Elkarrizketa-koadro hau ixteko sakatu ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Orokorra', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editorearen tresna-barra', | ||
15 | legend: 'Sakatu ${toolbarFocus} tresna-barrara nabigatzeko. Tresna-barrako aurreko eta hurrengo taldera joateko erabili TAB eta MAIUS+TAB. Tresna-barrako aurreko eta hurrengo botoira joateko erabili ESKUIN-GEZIA eta EZKER-GEZIA. Sakatu ZURIUNEA edo SARTU tresna-barrako botoia aktibatzeko.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editorearen elkarrizketa-koadroa', | ||
20 | legend: | ||
21 | 'Elkarrizketa-koadro baten barruan sakatu TAB hurrengo elementura nabigatzeko, sakatu MAIUS+TAB aurreko elementura joateko, sakatu SARTU elkarrizketa-koadroa bidaltzeko eta sakatu ESC uzteko. Elkarrizketa-koadro batek hainbat fitxa dituenean, ALT+F10 erabiliz irits daiteke fitxen zerrendara, edo TAB erabiliz. Fokoa fitxen zerrendak duenean, aurreko eta hurrengo fitxetara joateko erabili EZKER-GEZIA eta ESKUIN-GEZIA.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editorearen testuinguru-menua', | ||
26 | legend: 'Sakatu ${contextMenu} edo APLIKAZIO TEKLA testuinguru-menua irekitzeko. Menuko hurrengo aukerara joateko erabili TAB edo BEHERA GEZIA. Aurreko aukerara nabigatzeko erabili MAIUS+TAB edo GORA GEZIA. Sakatu ZURIUNEA edo SARTU menuko aukera hautatzeko. Ireki uneko aukeraren azpi-menua ZURIUNEA edo SARTU edo ESKUIN-GEZIA erabiliz. Menuko aukera gurasora itzultzeko erabili ESC edo EZKER-GEZIA. Testuinguru-menua ixteko sakatu ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editorearen zerrenda-koadroa', | ||
31 | legend: 'Zerrenda-koadro baten barruan, zerrendako hurrengo elementura joateko erabili TAB edo BEHERA GEZIA. Zerrendako aurreko elementura nabigatzeko MAIUS+TAB edo GORA GEZIA. Sakatu ZURIUNEA edo SARTU zerrendako aukera hautatzeko. Sakatu ESC zerrenda-koadroa ixteko.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editorearen elementuaren bide-barra', | ||
36 | legend: 'Sakatu ${elementsPathFocus} elementuaren bide-barrara nabigatzeko. Hurrengo elementuaren botoira joateko erabili TAB edo ESKUIN-GEZIA. Aurreko botoira joateko aldiz erabili MAIUS+TAB edo EZKER-GEZIA. Elementua editorean hautatzeko sakatu ZURIUNEA edo SARTU.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Komandoak', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Desegin komandoa', | ||
45 | legend: 'Sakatu ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Berregin komandoa', | ||
49 | legend: 'Sakatu ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Lodia komandoa', | ||
53 | legend: 'Sakatu ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Etzana komandoa', | ||
57 | legend: 'Sakatu ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Azpimarratu komandoa', | ||
61 | legend: 'Sakatu ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Esteka komandoa', | ||
65 | legend: 'Sakatu ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Tolestu tresna-barra komandoa', | ||
69 | legend: 'Sakatu ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: 'Erabilerraztasunaren laguntza', | ||
81 | legend: 'Sakatu ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Atzera tekla', | ||
87 | tab: 'Tabuladorea', | ||
88 | enter: 'Sartu', | ||
89 | shift: 'Maius', | ||
90 | ctrl: 'Ktrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pausatu', | ||
93 | capslock: 'Blok Maius', | ||
94 | escape: 'Ihes', | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'Buka', | ||
98 | home: 'Etxea', | ||
99 | leftArrow: 'Ezker-gezia', | ||
100 | upArrow: 'Gora gezia', | ||
101 | rightArrow: 'Eskuin-gezia', | ||
102 | downArrow: 'Behera gezia', | ||
103 | insert: 'Txertatu', | ||
104 | 'delete': 'Ezabatu', | ||
105 | leftWindowKey: 'Ezkerreko Windows tekla', | ||
106 | rightWindowKey: 'Eskuineko Windows tekla', | ||
107 | selectKey: 'Hautatu tekla', | ||
108 | numpad0: 'Zenbakizko teklatua 0', | ||
109 | numpad1: 'Zenbakizko teklatua 1', | ||
110 | numpad2: 'Zenbakizko teklatua 2', | ||
111 | numpad3: 'Zenbakizko teklatua 3', | ||
112 | numpad4: 'Zenbakizko teklatua 4', | ||
113 | numpad5: 'Zenbakizko teklatua 5', | ||
114 | numpad6: 'Zenbakizko teklatua 6', | ||
115 | numpad7: 'Zenbakizko teklatua 7', | ||
116 | numpad8: 'Zenbakizko teklatua 8', | ||
117 | numpad9: 'Zenbakizko teklatua 9', | ||
118 | multiply: 'Biderkatu', | ||
119 | add: 'Gehitu', | ||
120 | subtract: 'Kendu', | ||
121 | decimalPoint: 'Koma hamartarra', | ||
122 | divide: 'Zatitu', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Blok Zenb', | ||
136 | scrollLock: 'Blok Korr', | ||
137 | semiColon: 'Puntu eta koma', | ||
138 | equalSign: 'Berdin zeinua', | ||
139 | comma: 'Koma', | ||
140 | dash: 'Marratxoa', | ||
141 | period: 'Puntua', | ||
142 | forwardSlash: 'Barra', | ||
143 | graveAccent: 'Azentu kamutsa', | ||
144 | openBracket: 'Parentesia ireki', | ||
145 | backSlash: 'Alderantzizko barra', | ||
146 | closeBracket: 'Itxi parentesia', | ||
147 | singleQuote: 'Komatxo bakuna' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/fa.js b/sources/plugins/a11yhelp/dialogs/lang/fa.js new file mode 100644 index 0000000..7391490 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/fa.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'fa', { | ||
7 | title: 'دستورالعملهای دسترسی', | ||
8 | contents: 'راهنمای فهرست مطالب. برای بستن این کادر محاورهای ESC را فشار دهید.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'عمومی', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'نوار ابزار ویرایشگر', | ||
15 | legend: '${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shift+Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهتنمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'پنجره محاورهای ویرایشگر', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'منوی متنی ویرایشگر', | ||
26 | legend: '${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بفشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab و یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. فشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter و یا کلید جهتنمای راست و چپ. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای چپ. بستن منوی متن با Esc.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'جعبه فهرست ویرایشگر', | ||
31 | legend: 'در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB و یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بفشارید. کلید ESC را برای بستن جعبه لیست بفشارید.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'ویرایشگر عنصر نوار راه', | ||
36 | legend: 'برای رفتن به مسیر عناصر ${elementsPathFocus} را بفشارید. حرکت به کلید عنصر بعدی با کلید Tab یا کلید جهتنمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهتنمای چپ. فشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'فرمانها', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'بازگشت به آخرین فرمان', | ||
45 | legend: 'فشردن ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'انجام مجدد فرمان', | ||
49 | legend: 'فشردن ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'فرمان درشت کردن متن', | ||
53 | legend: 'فشردن ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'فرمان کج کردن متن', | ||
57 | legend: 'فشردن ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'فرمان زیرخطدار کردن متن', | ||
61 | legend: 'فشردن ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'فرمان پیوند دادن', | ||
65 | legend: 'فشردن ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'بستن نوار ابزار فرمان', | ||
69 | legend: 'فشردن ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'دسترسی به فرمان محل تمرکز قبلی', | ||
73 | legend: 'فشردن ${accessPreviousSpace} برای دسترسی به نزدیکترین فضای قابل دسترسی تمرکز قبل از هشتک، برای مثال: دو عنصر مجاور HR -خط افقی-. تکرار کلید ترکیبی برای رسیدن به فضاهای تمرکز از راه دور.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'دسترسی به فضای دستور بعدی', | ||
77 | legend: 'برای دسترسی به نزدیکترین فضای تمرکز غیر قابل دسترس، ${accessNextSpace} را پس از علامت هشتک بفشارید، برای مثال: دو عنصر مجاور HR -خط افقی-. کلید ترکیبی را برای رسیدن به فضای تمرکز تکرار کنید.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'راهنمای دسترسی', | ||
81 | legend: 'فشردن ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'عقبگرد', | ||
87 | tab: 'برگه', | ||
88 | enter: 'ورود', | ||
89 | shift: 'تعویض', | ||
90 | ctrl: 'کنترل', | ||
91 | alt: 'دگرساز', | ||
92 | pause: 'توقف', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'گریز', | ||
95 | pageUp: 'صفحه به بالا', | ||
96 | pageDown: 'صفحه به پایین', | ||
97 | end: 'پایان', | ||
98 | home: 'خانه', | ||
99 | leftArrow: 'پیکان چپ', | ||
100 | upArrow: 'پیکان بالا', | ||
101 | rightArrow: 'پیکان راست', | ||
102 | downArrow: 'پیکان پایین', | ||
103 | insert: 'ورود', | ||
104 | 'delete': 'حذف', | ||
105 | leftWindowKey: 'کلید چپ ویندوز', | ||
106 | rightWindowKey: 'کلید راست ویندوز', | ||
107 | selectKey: 'انتخاب کلید', | ||
108 | numpad0: 'کلید شماره 0', | ||
109 | numpad1: 'کلید شماره 1', | ||
110 | numpad2: 'کلید شماره 2', | ||
111 | numpad3: 'کلید شماره 3', | ||
112 | numpad4: 'کلید شماره 4', | ||
113 | numpad5: 'کلید شماره 5', | ||
114 | numpad6: 'کلید شماره 6', | ||
115 | numpad7: 'کلید شماره 7', | ||
116 | numpad8: 'کلید شماره 8', | ||
117 | numpad9: 'کلید شماره 9', | ||
118 | multiply: 'ضرب', | ||
119 | add: 'افزودن', | ||
120 | subtract: 'تفریق', | ||
121 | decimalPoint: 'نقطهی اعشار', | ||
122 | divide: 'جدا کردن', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Semicolon', | ||
138 | equalSign: 'علامت تساوی', | ||
139 | comma: 'کاما', | ||
140 | dash: 'خط تیره', | ||
141 | period: 'دوره', | ||
142 | forwardSlash: 'Forward Slash', | ||
143 | graveAccent: 'Grave Accent', | ||
144 | openBracket: 'Open Bracket', | ||
145 | backSlash: 'Backslash', | ||
146 | closeBracket: 'Close Bracket', | ||
147 | singleQuote: 'Single Quote' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/fi.js b/sources/plugins/a11yhelp/dialogs/lang/fi.js new file mode 100644 index 0000000..4f4775b --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/fi.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'fi', { | ||
7 | title: 'Saavutettavuus ohjeet', | ||
8 | contents: 'Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Yleinen', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editorin työkalupalkki', | ||
15 | legend: 'Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT+TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editorin dialogi', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editorin oheisvalikko', | ||
26 | legend: 'Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editorin listalaatikko', | ||
31 | legend: 'Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editorin elementtipolun palkki', | ||
36 | legend: 'Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Komennot', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Peruuta komento', | ||
45 | legend: 'Paina ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Tee uudelleen komento', | ||
49 | legend: 'Paina ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Lihavoi komento', | ||
53 | legend: 'Paina ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Kursivoi komento', | ||
57 | legend: 'Paina ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Alleviivaa komento', | ||
61 | legend: 'Paina ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Linkki komento', | ||
65 | legend: 'Paina ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Pienennä työkalupalkki komento', | ||
69 | legend: 'Paina ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Siirry aiempaan fokustilaan komento', | ||
73 | legend: 'Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin edellä olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Siirry seuraavaan fokustilaan komento', | ||
77 | legend: 'Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin jälkeen olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Saavutettavuus ohjeet', | ||
81 | legend: 'Paina ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numeronäppäimistö 0', | ||
109 | numpad1: 'Numeronäppäimistö 1', | ||
110 | numpad2: 'Numeronäppäimistö 2', | ||
111 | numpad3: 'Numeronäppäimistö 3', | ||
112 | numpad4: 'Numeronäppäimistö 4', | ||
113 | numpad5: 'Numeronäppäimistö 5', | ||
114 | numpad6: 'Numeronäppäimistö 6', | ||
115 | numpad7: 'Numeronäppäimistö 7', | ||
116 | numpad8: 'Numeronäppäimistö 8', | ||
117 | numpad9: 'Numeronäppäimistö 9', | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Puolipiste', | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Pilkku', | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Piste', | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/fo.js b/sources/plugins/a11yhelp/dialogs/lang/fo.js new file mode 100644 index 0000000..21bc261 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/fo.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'fo', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', // MISSING | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'General', // MISSING | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', // MISSING | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', // MISSING | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', | ||
109 | numpad1: 'Numpad 1', | ||
110 | numpad2: 'Numpad 2', | ||
111 | numpad3: 'Numpad 3', | ||
112 | numpad4: 'Numpad 4', | ||
113 | numpad5: 'Numpad 5', | ||
114 | numpad6: 'Numpad 6', | ||
115 | numpad7: 'Numpad 7', | ||
116 | numpad8: 'Numpad 8', | ||
117 | numpad9: 'Numpad 9', | ||
118 | multiply: 'Falda', | ||
119 | add: 'Pluss', | ||
120 | subtract: 'Frádráttar', | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Býta', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semikolon', | ||
138 | equalSign: 'Javnatekn', | ||
139 | comma: 'Komma', | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Punktum', | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/fr-ca.js b/sources/plugins/a11yhelp/dialogs/lang/fr-ca.js new file mode 100644 index 0000000..b43eeab --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/fr-ca.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'fr-ca', { | ||
7 | title: 'Instructions d\'accessibilité', | ||
8 | contents: 'Contenu de l\'aide. Pour fermer cette fenêtre, appuyez sur ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Général', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Barre d\'outil de l\'éditeur', | ||
15 | legend: 'Appuyer sur ${toolbarFocus} pour accéder à la barre d\'outils. Se déplacer vers les groupes suivant ou précédent de la barre d\'outil avec les touches TAB et SHIFT+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d\'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d\'espace ou la touche ENTRER pour activer le bouton de barre d\'outils.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Dialogue de l\'éditeur', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Menu contextuel de l\'éditeur', | ||
26 | legend: 'Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l\'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l\'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D\'ESPACE ou la touche ENTREE pour sélectionner l\'option du menu. Oovrir le sous-menu de l\'option courante avec la BARRE D\'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l\'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Menu déroulant de l\'éditeur', | ||
31 | legend: 'A l\'intérieur d\'une liste en menu déroulant, se déplacer vers l\'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l\'élément précédent de la liste avec les touches SHIFT+TAB ou FLECHE HAUT. Appuyer sur la BARRE D\'ESPACE ou sur ENTREE pour sélectionner l\'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Barre d\'emplacement des éléments de l\'éditeur', | ||
36 | legend: 'Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d\'emplacement des éléments de léditeur. Se déplacer vers le bouton d\'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d\'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D\'ESPACE ou sur ENTREE pour sélectionner l\'élément dans l\'éditeur.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commandes', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Annuler', | ||
45 | legend: 'Appuyer sur ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Refaire', | ||
49 | legend: 'Appuyer sur ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Gras', | ||
53 | legend: 'Appuyer sur ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Italique', | ||
57 | legend: 'Appuyer sur ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Souligné', | ||
61 | legend: 'Appuyer sur ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Lien', | ||
65 | legend: 'Appuyer sur ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Enrouler la barre d\'outils', | ||
69 | legend: 'Appuyer sur ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Accéder à l\'objet de focus précédent', | ||
73 | legend: 'Appuyer ${accessPreviousSpace} pour accéder au prochain espace disponible avant le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d\'espaces distantes.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Accéder au prochain objet de focus', | ||
77 | legend: 'Appuyer ${accessNextSpace} pour accéder au prochain espace disponible après le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d\'espaces distantes.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Aide d\'accessibilité', | ||
81 | legend: 'Appuyer sur ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/fr.js b/sources/plugins/a11yhelp/dialogs/lang/fr.js new file mode 100644 index 0000000..ee41566 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/fr.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'fr', { | ||
7 | title: 'Instructions d\'accessibilité', | ||
8 | contents: 'Contenu de l\'aide. Pour fermer ce dialogue, appuyez sur la touche ÉCHAP (Echappement).', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Général', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Barre d\'outils de l\'éditeur', | ||
15 | legend: 'Appuyer sur ${toolbarFocus} pour accéder à la barre d\'outils. Se déplacer vers les groupes suivant ou précédent de la barre d\'outil avec les touches MAJ et MAJ+TAB. Se déplacer vers les boutons suivant ou précédent de la barre d\'outils avec les touches FLÈCHE DROITE et FLÈCHE GAUCHE. Appuyer sur la barre d\'espace ou la touche ENTRÉE pour activer le bouton de barre d\'outils.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Dialogue de l\'éditeur', | ||
20 | legend: | ||
21 | 'Dans un dialogue, appuyer sur TAB pour aller à l\'élément suivant du dialogue, appuyer sur MAJ+TAB pour aller à l\'élément précédent du dialogue, appuyer sur ECHAP pour annuler le dialogue. Quand un dialogue a de multiples onglets, on peut accéder à la liste des onglets avec ALT+F10 ou avec TAB. Dans la liste des onglets, se déplacer vers le suivant ou le précédent avec les FLECHES DROITE et GAUCHE respectivement.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Menu contextuel de l\'éditeur', | ||
26 | legend: 'Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l\'option suivante du menu avec les touches TAB ou FLÈCHE BAS. Se déplacer vers l\'option précédente avec les touches MAJ+TAB ou FLÈCHE HAUT. appuyer sur la BARRE D\'ESPACE ou la touche ENTRÉE pour sélectionner l\'option du menu. Oovrir le sous-menu de l\'option courante avec la BARRE D\'ESPACE ou les touches ENTRÉE ou FLÈCHE DROITE. Revenir à l\'élément de menu parent avec les touches ÉCHAP ou FLÈCHE GAUCHE. Fermer le menu contextuel avec ÉCHAP.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Zone de liste de l\'éditeur', | ||
31 | legend: 'Dans la liste en menu déroulant, se déplacer vers l\'élément suivant de la liste avec les touches TAB ou FLÈCHE BAS. Se déplacer vers l\'élément précédent de la liste avec les touches MAJ+TAB ou FLÈCHE HAUT. Appuyer sur la BARRE D\'ESPACE ou sur ENTRÉE pour sélectionner l\'option dans la liste. Appuyer sur ÉCHAP pour fermer le menu déroulant.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Barre d\'emplacement des éléments de l\'éditeur', | ||
36 | legend: 'Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d\'emplacement des éléments de l\'éditeur. Se déplacer vers le bouton d\'élément suivant avec les touches TAB ou FLÈCHE DROITE. Se déplacer vers le bouton d\'élément précédent avec les touches MAJ+TAB ou FLÈCHE GAUCHE. Appuyer sur la BARRE D\'ESPACE ou sur ENTRÉE pour sélectionner l\'élément dans l\'éditeur.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commandes', | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Annuler la commande', | ||
45 | legend: 'Appuyer sur ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Refaire la commande', | ||
49 | legend: 'Appuyer sur ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: ' Commande gras', | ||
53 | legend: 'Appuyer sur ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: ' Commande italique', | ||
57 | legend: 'Appuyer sur ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: ' Commande souligné', | ||
61 | legend: 'Appuyer sur ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: ' Commande lien', | ||
65 | legend: 'Appuyer sur ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Commande enrouler la barre d\'outils', | ||
69 | legend: 'Appuyer sur ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Accéder à la précédente commande d\'espace de mise au point', | ||
73 | legend: 'Appuyez sur ${accessPreviousSpace} pour accéder à l\'espace hors d\'atteinte le plus proche avant le caret, par exemple: deux éléments HR adjacents. Répétez la combinaison de touches pour atteindre les espaces de mise au point distants.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Accès à la prochaine commande de l\'espace de mise au point', | ||
77 | legend: 'Appuyez sur ${accessNextSpace} pour accéder au plus proche espace de mise au point hors d\'atteinte après le caret, par exemple: deux éléments HR adjacents. répétez la combinaison de touches pour atteindre les espace de mise au point distants.' | ||
78 | }, | ||
79 | { | ||
80 | name: ' Aide Accessibilité', | ||
81 | legend: 'Appuyer sur ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Retour arrière', | ||
87 | tab: 'Tabulation', | ||
88 | enter: 'Entrée', | ||
89 | shift: 'Majuscule', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Verr. Maj.', | ||
94 | escape: 'Échap', | ||
95 | pageUp: 'Page supérieure', | ||
96 | pageDown: 'Page inférieure', | ||
97 | end: 'Fin', | ||
98 | home: 'Retour', | ||
99 | leftArrow: 'Flèche gauche', | ||
100 | upArrow: 'Flèche haute', | ||
101 | rightArrow: 'Flèche droite', | ||
102 | downArrow: 'Flèche basse', | ||
103 | insert: 'Insertion', | ||
104 | 'delete': 'Supprimer', | ||
105 | leftWindowKey: 'Touche Windows gauche', | ||
106 | rightWindowKey: 'Touche Windows droite', | ||
107 | selectKey: 'Touche menu', | ||
108 | numpad0: 'Pavé numérique 0', | ||
109 | numpad1: 'Pavé numérique 1', | ||
110 | numpad2: 'Pavé numérique 2', | ||
111 | numpad3: 'Pavé numérique 3', | ||
112 | numpad4: 'Pavé numérique 4', | ||
113 | numpad5: 'Pavé numérique 5', | ||
114 | numpad6: 'Pavé numérique 6', | ||
115 | numpad7: 'Pavé numérique 7', | ||
116 | numpad8: 'Pavé numérique 8', | ||
117 | numpad9: 'Pavé numérique 9', | ||
118 | multiply: 'Multiplier', | ||
119 | add: 'Addition', | ||
120 | subtract: 'Soustraire', | ||
121 | decimalPoint: 'Point décimal', | ||
122 | divide: 'Diviser', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Verrouillage numérique', | ||
136 | scrollLock: 'Arrêt défilement', | ||
137 | semiColon: 'Point virgule', | ||
138 | equalSign: 'Signe égal', | ||
139 | comma: 'Virgule', | ||
140 | dash: 'Tiret', | ||
141 | period: 'Point', | ||
142 | forwardSlash: 'Barre oblique', | ||
143 | graveAccent: 'Accent grave', | ||
144 | openBracket: 'Parenthèse ouvrante', | ||
145 | backSlash: 'Barre oblique inverse', | ||
146 | closeBracket: 'Parenthèse fermante', | ||
147 | singleQuote: 'Apostrophe' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/gl.js b/sources/plugins/a11yhelp/dialogs/lang/gl.js new file mode 100644 index 0000000..f6e6b1c --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/gl.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'gl', { | ||
7 | title: 'Instrucións de accesibilidade', | ||
8 | contents: 'Axuda. Para pechar este diálogo prema ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Xeral', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Barra de ferramentas do editor', | ||
15 | legend: 'Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor de diálogo', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor do menú contextual', | ||
26 | legend: 'Prema ${contextMenu} ou a TECLA MENÚ para abrir o menú contextual. A seguir móvase á seguinte opción do menú con TAB ou FRECHA ABAIXO. Móvase á opción anterior con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para seleccionar a opción do menú. Abra o submenú da opción actual con ESPAZO ou INTRO ou FRECHA DEREITA. Regrese ao elemento principal do menú con ESC ou FRECHA ESQUERDA. Peche o menú contextual con ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Lista do editor', | ||
31 | legend: 'Dentro dunha lista, móvase ao seguinte elemento da lista con TAB ou FRECHA ABAIXO. Móvase ao elemento anterior da lista con MAIÚS+TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para escoller a opción da lista. Prema ESC para pechar a lista.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Barra da ruta ao elemento no editor', | ||
36 | legend: 'Prema ${elementsPathFocus} para navegar ata os elementos da barra de ruta. Móvase ao seguinte elemento botón con TAB ou FRECHA DEREITA. Móvase ao botón anterior con MAIÚS+TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar o elemento no editor.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Ordes', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Orde «desfacer»', | ||
45 | legend: 'Prema ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Orde «refacer»', | ||
49 | legend: 'Prema ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Orde «negra»', | ||
53 | legend: 'Prema ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Orde «cursiva»', | ||
57 | legend: 'Prema ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Orde «subliñar»', | ||
61 | legend: 'Prema ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Orde «ligazón»', | ||
65 | legend: 'Prema ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Orde «contraer a barra de ferramentas»', | ||
69 | legend: 'Prema ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Orde «acceder ao anterior espazo en foco»', | ||
73 | legend: 'Prema ${accessPreviousSpace} para acceder ao espazo máis próximo de foco inalcanzábel anterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Orde «acceder ao seguinte espazo en foco»', | ||
77 | legend: 'Prema ${accessNextSpace} para acceder ao espazo máis próximo de foco inalcanzábel posterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Axuda da accesibilidade', | ||
81 | legend: 'Prema ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Ir atrás', | ||
87 | tab: 'Tabulador', | ||
88 | enter: 'Intro', | ||
89 | shift: 'Maiús', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pausa', | ||
93 | capslock: 'Bloq. Maiús', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Páxina arriba', | ||
96 | pageDown: 'Páxina abaixo', | ||
97 | end: 'Fin', | ||
98 | home: 'Inicio', | ||
99 | leftArrow: 'Frecha esquerda', | ||
100 | upArrow: 'Frecha arriba', | ||
101 | rightArrow: 'Frecha dereita', | ||
102 | downArrow: 'Frecha abaixo', | ||
103 | insert: 'Inserir', | ||
104 | 'delete': 'Supr', | ||
105 | leftWindowKey: 'Tecla Windows esquerda', | ||
106 | rightWindowKey: 'Tecla Windows dereita', | ||
107 | selectKey: 'Escolla a tecla', | ||
108 | numpad0: 'Tec. numérico 0', | ||
109 | numpad1: 'Tec. numérico 1', | ||
110 | numpad2: 'Tec. numérico 2', | ||
111 | numpad3: 'Tec. numérico 3', | ||
112 | numpad4: 'Tec. numérico 4', | ||
113 | numpad5: 'Tec. numérico 5', | ||
114 | numpad6: 'Tec. numérico 6', | ||
115 | numpad7: 'Tec. numérico 7', | ||
116 | numpad8: 'Tec. numérico 8', | ||
117 | numpad9: 'Tec. numérico 9', | ||
118 | multiply: 'Multiplicar', | ||
119 | add: 'Sumar', | ||
120 | subtract: 'Restar', | ||
121 | decimalPoint: 'Punto decimal', | ||
122 | divide: 'Dividir', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Bloq. num.', | ||
136 | scrollLock: 'Bloq. despraz.', | ||
137 | semiColon: 'Punto e coma', | ||
138 | equalSign: 'Signo igual', | ||
139 | comma: 'Coma', | ||
140 | dash: 'Guión', | ||
141 | period: 'Punto', | ||
142 | forwardSlash: 'Barra inclinada', | ||
143 | graveAccent: 'Acento grave', | ||
144 | openBracket: 'Abrir corchete', | ||
145 | backSlash: 'Barra invertida', | ||
146 | closeBracket: 'Pechar corchete', | ||
147 | singleQuote: 'Comiña simple' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/gu.js b/sources/plugins/a11yhelp/dialogs/lang/gu.js new file mode 100644 index 0000000..d8d4957 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/gu.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'gu', { | ||
7 | title: 'એક્ક્ષેબિલિટી ની વિગતો', | ||
8 | contents: 'હેલ્પ. આ બંધ કરવા ESC દબાવો.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'જનરલ', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'એડિટર ટૂલબાર', | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'એડિટર ડાયલોગ', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'કમાંડસ', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'અન્ડું કમાંડ', | ||
45 | legend: '$ દબાવો {undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'ફરી કરો કમાંડ', | ||
49 | legend: '$ દબાવો {redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'બોલ્દનો કમાંડ', | ||
53 | legend: '$ દબાવો {bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/he.js b/sources/plugins/a11yhelp/dialogs/lang/he.js new file mode 100644 index 0000000..025cf88 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/he.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'he', { | ||
7 | title: 'הוראות נגישות', | ||
8 | contents: 'הוראות נגישות. לסגירה לחץ אסקייפ (ESC).', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'כללי', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'סרגל הכלים', | ||
15 | legend: 'לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'דיאלוגים (חלונות תשאול)', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'תפריט ההקשר (Context Menu)', | ||
26 | legend: 'לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC).' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'תפריטים צפים (List boxes)', | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'עץ אלמנטים (Elements Path)', | ||
36 | legend: 'לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'פקודות', | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' ביטול צעד אחרון', | ||
45 | legend: 'לחץ ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: ' חזרה על צעד אחרון', | ||
49 | legend: 'לחץ ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: ' הדגשה', | ||
53 | legend: 'לחץ ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: ' הטייה', | ||
57 | legend: 'לחץ ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: ' הוספת קו תחתון', | ||
61 | legend: 'לחץ ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: ' הוספת לינק', | ||
65 | legend: 'לחץ ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' כיווץ סרגל הכלים', | ||
69 | legend: 'לחץ ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'גישה למיקום המיקוד הקודם', | ||
73 | legend: 'לחץ ${accessPreviousSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב לפני הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'גישה למיקום המיקוד הבא', | ||
77 | legend: 'לחץ ${accessNextSpace} כדי לגשת למיקום המיקוד הלא-נגיש הקרוב אחרי הסמן, למשל בין שני אלמנטים סמוכים מסוג HR. חזור על צירוף מקשים זה כדי להגיע למקומות מיקוד רחוקים יותר.' | ||
78 | }, | ||
79 | { | ||
80 | name: ' הוראות נגישות', | ||
81 | legend: 'לחץ ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'חץ שמאלה', | ||
100 | upArrow: 'חץ למעלה', | ||
101 | rightArrow: 'חץ ימינה', | ||
102 | downArrow: 'חץ למטה', | ||
103 | insert: 'הכנס', | ||
104 | 'delete': 'מחק', | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'בחר מקש', | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'הוסף', | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'סלאש', | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'סלאש הפוך', | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'ציטוט יחיד' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/hi.js b/sources/plugins/a11yhelp/dialogs/lang/hi.js new file mode 100644 index 0000000..19fda78 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/hi.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'hi', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', // MISSING | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'सामान्य', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', // MISSING | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', // MISSING | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/hr.js b/sources/plugins/a11yhelp/dialogs/lang/hr.js new file mode 100644 index 0000000..f4568a2 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/hr.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'hr', { | ||
7 | title: 'Upute dostupnosti', | ||
8 | contents: 'Sadržaj pomoći. Za zatvaranje pritisnite ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Općenito', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Alatna traka', | ||
15 | legend: 'Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT+TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Dijalog', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Kontekstni izbornik', | ||
26 | legend: 'Pritisnite ${contextMenu} ili APPLICATION tipku za otvaranje kontekstnog izbornika. Pomicanje se vrši TAB ili strelicom kursora prema dolje ili SHIFT+TAB ili strelica kursora prema gore. SPACE ili ENTER odabiru opciju izbornika. Otvorite podizbornik trenutne opcije sa SPACE, ENTER ili desna strelica kursora. Povratak na prethodni izbornik vrši se sa ESC ili lijevom strelicom kursora. Zatvaranje se vrši pritiskom na tipku ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Lista', | ||
31 | legend: 'Unutar list-boxa, pomicanje na sljedeću stavku vrši se sa TAB ili strelica kursora prema dolje. Na prethodnu sa SHIFT+TAB ili strelica prema gore. Pritiskom na SPACE ili ENTER odabire se stavka ili ESC za zatvaranje.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Traka putanje elemenata', | ||
36 | legend: 'Pritisnite ${elementsPathFocus} za navigaciju po putanji elemenata. Pritisnite TAB ili desnu strelicu kursora za pomicanje na sljedeći element ili SHIFT+TAB ili lijeva strelica kursora za pomicanje na prethodni element. Pritiskom na SPACE ili ENTER vrši se odabir elementa.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Naredbe', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Vrati naredbu', | ||
45 | legend: 'Pritisni ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Ponovi naredbu', | ||
49 | legend: 'Pritisni ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Bold naredba', | ||
53 | legend: 'Pritisni ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Italic naredba', | ||
57 | legend: 'Pritisni ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Underline naredba', | ||
61 | legend: 'Pritisni ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Link naredba', | ||
65 | legend: 'Pritisni ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Smanji alatnu traku naredba', | ||
69 | legend: 'Pritisni ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Access previous focus space naredba', | ||
73 | legend: 'Pritisni ${accessPreviousSpace} za pristup najbližem nedostupnom razmaku prije kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Access next focus space naredba', | ||
77 | legend: 'Pritisni ${accessNextSpace} za pristup najbližem nedostupnom razmaku nakon kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Pomoć za dostupnost', | ||
81 | legend: 'Pritisni ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/hu.js b/sources/plugins/a11yhelp/dialogs/lang/hu.js new file mode 100644 index 0000000..7342cee --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/hu.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'hu', { | ||
7 | title: 'Kisegítő utasítások', | ||
8 | contents: 'Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Általános', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Szerkesztő Eszköztár', | ||
15 | legend: 'Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következő és előző eszköztár csoporthoz a TAB és SHIFT+TAB-al juthat el. A következő és előző eszköztár gombhoz a BAL NYÍL vagy JOBB NYÍL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Szerkesző párbeszéd ablak', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Szerkesztő helyi menü', | ||
26 | legend: 'Nyomjon ${contextMenu}-t vagy ALKALMAZÁS BILLENTYŰT a helyi menü megnyitásához. Ezután a következő menüpontra léphet a TAB vagy LEFELÉ NYÍLLAL. Az előző opciót a SHIFT+TAB vagy FELFELÉ NYÍLLAL érheti el. Nyomjon SPACE-t vagy ENTER-t a menüpont kiválasztásához. A jelenlegi menüpont almenüjének megnyitásához nyomjon SPACE-t vagy ENTER-t, vagy JOBB NYILAT. A főmenühöz való visszatéréshez nyomjon ESC-et vagy BAL NYILAT. A helyi menü bezárása az ESC billentyűvel lehetséges.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Szerkesztő lista', | ||
31 | legend: 'A listán belül a következő elemre a TAB vagy LEFELÉ NYÍLLAL mozoghat. Az előző elem kiválasztásához nyomjon SHIFT+TAB-ot vagy FELFELÉ NYILAT. Nyomjon SPACE-t vagy ENTER-t az elem kiválasztásához. Az ESC billentyű megnyomásával bezárhatja a listát.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Szerkesztő elem utak sáv', | ||
36 | legend: 'Nyomj ${elementsPathFocus} hogy kijelöld a elemek út sávját. A következő elem gombhoz a TAB-al vagy a JOBB NYÍLLAL juthatsz el. Az előző gombhoz a SHIFT+TAB vagy BAL NYÍLLAL mehetsz. A SPACE vagy ENTER billentyűvel kiválaszthatod az elemet a szerkesztőben.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Parancsok', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Parancs visszavonása', | ||
45 | legend: 'Nyomj ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Parancs megismétlése', | ||
49 | legend: 'Nyomjon ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Félkövér parancs', | ||
53 | legend: 'Nyomjon ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Dőlt parancs', | ||
57 | legend: 'Nyomjon ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Aláhúzott parancs', | ||
61 | legend: 'Nyomjon ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Link parancs', | ||
65 | legend: 'Nyomjon ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Szerkesztősáv összecsukása parancs', | ||
69 | legend: 'Nyomjon ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Hozzáférés az előző fókusz helyhez parancs', | ||
73 | legend: 'Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel előtt, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Hozzáférés a következő fókusz helyhez parancs', | ||
77 | legend: 'Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel után, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Kisegítő súgó', | ||
81 | legend: 'Nyomjon ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'balra nyíl', | ||
100 | upArrow: 'felfelé nyíl', | ||
101 | rightArrow: 'jobbra nyíl', | ||
102 | downArrow: 'lefelé nyíl', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'bal Windows-billentyű', | ||
106 | rightWindowKey: 'jobb Windows-billentyű', | ||
107 | selectKey: 'Billentyű választása', | ||
108 | numpad0: 'Számbillentyűk 0', | ||
109 | numpad1: 'Számbillentyűk 1', | ||
110 | numpad2: 'Számbillentyűk 2', | ||
111 | numpad3: 'Számbillentyűk 3', | ||
112 | numpad4: 'Számbillentyűk 4', | ||
113 | numpad5: 'Számbillentyűk 5', | ||
114 | numpad6: 'Számbillentyűk 6', | ||
115 | numpad7: 'Számbillentyűk 7', | ||
116 | numpad8: 'Számbillentyűk 8', | ||
117 | numpad9: 'Számbillentyűk 9', | ||
118 | multiply: 'Szorzás', | ||
119 | add: 'Hozzáadás', | ||
120 | subtract: 'Kivonás', | ||
121 | decimalPoint: 'Tizedespont', | ||
122 | divide: 'Osztás', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Pontosvessző', | ||
138 | equalSign: 'Egyenlőségjel', | ||
139 | comma: 'Vessző', | ||
140 | dash: 'Kötőjel', | ||
141 | period: 'Pont', | ||
142 | forwardSlash: 'Perjel', | ||
143 | graveAccent: 'Visszafelé dőlő ékezet', | ||
144 | openBracket: 'Nyitó szögletes zárójel', | ||
145 | backSlash: 'fordított perjel', | ||
146 | closeBracket: 'Záró szögletes zárójel', | ||
147 | singleQuote: 'szimpla idézőjel' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/id.js b/sources/plugins/a11yhelp/dialogs/lang/id.js new file mode 100644 index 0000000..2b1675f --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/id.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'id', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Bantuan. Tekan ESC untuk menutup dialog ini.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Umum', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', // MISSING | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', // MISSING | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/it.js b/sources/plugins/a11yhelp/dialogs/lang/it.js new file mode 100644 index 0000000..bc06683 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/it.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'it', { | ||
7 | title: 'Istruzioni di Accessibilità', | ||
8 | contents: 'Contenuti di Aiuto. Per chiudere questa finestra premi ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Generale', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Barra degli strumenti Editor', | ||
15 | legend: 'Premere ${toolbarFocus} per passare alla barra degli strumenti. Usare TAB per spostarsi al gruppo successivo, MAIUSC+TAB per spostarsi a quello precedente. Usare FRECCIA DESTRA per spostarsi al pulsante successivo, FRECCIA SINISTRA per spostarsi a quello precedente. Premere SPAZIO o INVIO per attivare il pulsante della barra degli strumenti.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Finestra Editor', | ||
20 | legend: | ||
21 | 'All\'interno di una finestra di dialogo è possibile premere TAB per passare all\'elemento successivo della finestra, MAIUSC+TAB per passare a quello precedente; premere INVIO per inviare i dati della finestra, oppure ESC per annullare l\'operazione. Quando una finestra di dialogo ha più schede, è possibile passare all\'elenco delle schede sia con ALT+F10 che con TAB, in base all\'ordine delle tabulazioni della finestra. Quando l\'elenco delle schede è attivo, premere la FRECCIA DESTRA o la FRECCIA SINISTRA per passare rispettivamente alla scheda successiva o a quella precedente.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Menù contestuale Editor', | ||
26 | legend: 'Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all\'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all\'opzione precedente con MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l\'opzione di menu. Apri il sottomenu dell\'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Box Lista Editor', | ||
31 | legend: 'All\'interno di un elenco di opzioni, per spostarsi all\'elemento successivo premere TAB oppure FRECCIA GIÙ. Per spostarsi all\'elemento precedente usare SHIFT+TAB oppure FRECCIA SU. Premere SPAZIO o INVIO per selezionare l\'elemento della lista. Premere ESC per chiudere l\'elenco di opzioni.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Barra percorso elementi editor', | ||
36 | legend: 'Premere ${elementsPathFocus} per passare agli elementi della barra del percorso. Usare TAB o FRECCIA DESTRA per passare al pulsante successivo. Per passare al pulsante precedente premere MAIUSC+TAB o FRECCIA SINISTRA. Premere SPAZIO o INVIO per selezionare l\'elemento nell\'editor.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Comandi', | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Annulla comando', | ||
45 | legend: 'Premi ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: ' Ripeti comando', | ||
49 | legend: 'Premi ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: ' Comando Grassetto', | ||
53 | legend: 'Premi ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: ' Comando Corsivo', | ||
57 | legend: 'Premi ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: ' Comando Sottolineato', | ||
61 | legend: 'Premi ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: ' Comando Link', | ||
65 | legend: 'Premi ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Comando riduci barra degli strumenti', | ||
69 | legend: 'Premi ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Comando di accesso al precedente spazio di focus', | ||
73 | legend: 'Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Comando di accesso al prossimo spazio di focus', | ||
77 | legend: 'Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti.' | ||
78 | }, | ||
79 | { | ||
80 | name: ' Aiuto Accessibilità', | ||
81 | legend: 'Premi ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Invio', | ||
89 | shift: 'Maiusc', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pausa', | ||
93 | capslock: 'Bloc Maiusc', | ||
94 | escape: 'Esc', | ||
95 | pageUp: 'Pagina sù', | ||
96 | pageDown: 'Pagina giù', | ||
97 | end: 'Fine', | ||
98 | home: 'Inizio', | ||
99 | leftArrow: 'Freccia sinistra', | ||
100 | upArrow: 'Freccia su', | ||
101 | rightArrow: 'Freccia destra', | ||
102 | downArrow: 'Freccia giù', | ||
103 | insert: 'Ins', | ||
104 | 'delete': 'Canc', | ||
105 | leftWindowKey: 'Tasto di Windows sinistro', | ||
106 | rightWindowKey: 'Tasto di Windows destro', | ||
107 | selectKey: 'Tasto di selezione', | ||
108 | numpad0: '0 sul tastierino numerico', | ||
109 | numpad1: '1 sul tastierino numerico', | ||
110 | numpad2: '2 sul tastierino numerico', | ||
111 | numpad3: '3 sul tastierino numerico', | ||
112 | numpad4: '4 sul tastierino numerico', | ||
113 | numpad5: '5 sul tastierino numerico', | ||
114 | numpad6: '6 sul tastierino numerico', | ||
115 | numpad7: '7 sul tastierino numerico', | ||
116 | numpad8: '8 sul tastierino numerico', | ||
117 | numpad9: '9 sul tastierino numerico', | ||
118 | multiply: 'Moltiplicazione', | ||
119 | add: 'Più', | ||
120 | subtract: 'Sottrazione', | ||
121 | decimalPoint: 'Punto decimale', | ||
122 | divide: 'Divisione', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Bloc Num', | ||
136 | scrollLock: 'Bloc Scorr', | ||
137 | semiColon: 'Punto-e-virgola', | ||
138 | equalSign: 'Segno di uguale', | ||
139 | comma: 'Virgola', | ||
140 | dash: 'Trattino', | ||
141 | period: 'Punto', | ||
142 | forwardSlash: 'Barra', | ||
143 | graveAccent: 'Accento grave', | ||
144 | openBracket: 'Parentesi quadra aperta', | ||
145 | backSlash: 'Barra rovesciata', | ||
146 | closeBracket: 'Parentesi quadra chiusa', | ||
147 | singleQuote: 'Apostrofo' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/ja.js b/sources/plugins/a11yhelp/dialogs/lang/ja.js new file mode 100644 index 0000000..95f4e4d --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/ja.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'ja', { | ||
7 | title: 'ユーザー補助の説明', | ||
8 | contents: 'ヘルプ このダイアログを閉じるには ESCを押してください。', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: '全般', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'エディターツールバー', | ||
15 | legend: '${toolbarFocus} を押すとツールバーのオン/オフ操作ができます。カーソルをツールバーのグループで移動させるにはTabかSHIFT+Tabを押します。グループ内でカーソルを移動させるには、右カーソルか左カーソルを押します。スペースキーやエンターを押すとボタンを有効/無効にすることができます。' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: '編集ダイアログ', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'エディターのメニュー', | ||
26 | legend: '${contextMenu} キーかAPPLICATION KEYを押すとコンテキストメニューが開きます。Tabか下カーソルでメニューのオプション選択が下に移動します。戻るには、SHIFT+Tabか上カーソルです。スペースもしくはENTERキーでメニューオプションを決定できます。現在選んでいるオプションのサブメニューを開くには、スペース、もしくは右カーソルを押します。サブメニューから親メニューに戻るには、ESCか左カーソルを押してください。ESCでコンテキストメニュー自体をキャンセルできます。' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'エディターリストボックス', | ||
31 | legend: 'リストボックス内で移動するには、Tabか下カーソルで次のアイテムへ移動します。SHIFT+Tabで前のアイテムに戻ります。リストのオプションを選択するには、スペースもしくは、ENTERを押してください。リストボックスを閉じるには、ESCを押してください。' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'エディター要素パスバー', | ||
36 | legend: '${elementsPathFocus} を押すとエレメントパスバーを操作出来ます。Tabか右カーソルで次のエレメントを選択できます。前のエレメントを選択するには、SHIFT+Tabか左カーソルです。スペースもしくは、ENTERでエディタ内の対象エレメントを選択出来ます。' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'コマンド', | ||
42 | items: [ | ||
43 | { | ||
44 | name: '元に戻す', | ||
45 | legend: '${undo} をクリック' | ||
46 | }, | ||
47 | { | ||
48 | name: 'やり直し', | ||
49 | legend: '${redo} をクリック' | ||
50 | }, | ||
51 | { | ||
52 | name: '太字', | ||
53 | legend: '${bold} をクリック' | ||
54 | }, | ||
55 | { | ||
56 | name: '斜体 ', | ||
57 | legend: '${italic} をクリック' | ||
58 | }, | ||
59 | { | ||
60 | name: '下線', | ||
61 | legend: '${underline} をクリック' | ||
62 | }, | ||
63 | { | ||
64 | name: 'リンク', | ||
65 | legend: '${link} をクリック' | ||
66 | }, | ||
67 | { | ||
68 | name: 'ツールバーを縮める', | ||
69 | legend: '${toolbarCollapse} をクリック' | ||
70 | }, | ||
71 | { | ||
72 | name: '前のカーソル移動のできないポイントへ', | ||
73 | legend: '${accessPreviousSpace} を押すとカーソルより前にあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。' | ||
74 | }, | ||
75 | { | ||
76 | name: '次のカーソル移動のできないポイントへ', | ||
77 | legend: '${accessNextSpace} を押すとカーソルより後ろにあるカーソルキーで入り込めないスペースへ移動できます。例えば、HRエレメントが2つ接している場合などです。離れた場所へは、複数回キーを押します。' | ||
78 | }, | ||
79 | { | ||
80 | name: 'ユーザー補助ヘルプ', | ||
81 | legend: '${a11yHelp} をクリック' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: '左矢印', | ||
100 | upArrow: '上矢印', | ||
101 | rightArrow: '右矢印', | ||
102 | downArrow: '下矢印', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: '左Windowキー', | ||
106 | rightWindowKey: '右のWindowキー', | ||
107 | selectKey: 'Select', | ||
108 | numpad0: 'Num 0', | ||
109 | numpad1: 'Num 1', | ||
110 | numpad2: 'Num 2', | ||
111 | numpad3: 'Num 3', | ||
112 | numpad4: 'Num 4', | ||
113 | numpad5: 'Num 5', | ||
114 | numpad6: 'Num 6', | ||
115 | numpad7: 'Num 7', | ||
116 | numpad8: 'Num 8', | ||
117 | numpad9: 'Num 9', | ||
118 | multiply: '掛ける', | ||
119 | add: '足す', | ||
120 | subtract: '引く', | ||
121 | decimalPoint: '小数点', | ||
122 | divide: '割る', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'セミコロン', | ||
138 | equalSign: 'イコール記号', | ||
139 | comma: 'カンマ', | ||
140 | dash: 'ダッシュ', | ||
141 | period: 'ピリオド', | ||
142 | forwardSlash: 'フォワードスラッシュ', | ||
143 | graveAccent: 'グレイヴアクセント', | ||
144 | openBracket: '開きカッコ', | ||
145 | backSlash: 'バックスラッシュ', | ||
146 | closeBracket: '閉じカッコ', | ||
147 | singleQuote: 'シングルクォート' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/km.js b/sources/plugins/a11yhelp/dialogs/lang/km.js new file mode 100644 index 0000000..723a316 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/km.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'km', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'មាតិកាជំនួយ។ ដើម្បីបិទផ្ទាំងនេះ សូមចុច ESC ។', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'ទូទៅ', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'របារឧបករណ៍កម្មវិធីនិពន្ធ', | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'ផ្ទាំងកម្មវិធីនិពន្ធ', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'ម៉ីនុយបរិបទអ្នកកែសម្រួល', | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'ប្រអប់បញ្ជីអ្នកកែសម្រួល', | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'ពាក្យបញ្ជា', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'ការបញ្ជាមិនធ្វើវិញ', | ||
45 | legend: 'ចុច ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'ការបញ្ជាធ្វើវិញ', | ||
49 | legend: 'ចុច ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'ការបញ្ជាអក្សរដិត', | ||
53 | legend: 'ចុច ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'ការបញ្ជាអក្សរទ្រេត', | ||
57 | legend: 'ចុច ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'ពាក្យបញ្ជាបន្ទាត់ពីក្រោម', | ||
61 | legend: 'ចុច ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'ពាក្យបញ្ជាតំណ', | ||
65 | legend: 'ចុច ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: 'ជំនួយពីភាពងាយស្រួល', | ||
81 | legend: 'ជួយ ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'លុបថយក្រោយ', | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'ផ្អាក', | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'ចាកចេញ', | ||
95 | pageUp: 'ទំព័រលើ', | ||
96 | pageDown: 'ទំព័រក្រោម', | ||
97 | end: 'ចុង', | ||
98 | home: 'ផ្ទះ', | ||
99 | leftArrow: 'ព្រួញឆ្វេង', | ||
100 | upArrow: 'ព្រួញលើ', | ||
101 | rightArrow: 'ព្រួញស្ដាំ', | ||
102 | downArrow: 'ព្រួញក្រោម', | ||
103 | insert: 'បញ្ចូល', | ||
104 | 'delete': 'លុប', | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'ជ្រើសគ្រាប់ចុច', | ||
108 | numpad0: 'Numpad 0', | ||
109 | numpad1: 'Numpad 1', | ||
110 | numpad2: 'Numpad 2', | ||
111 | numpad3: 'Numpad 3', | ||
112 | numpad4: 'Numpad 4', | ||
113 | numpad5: 'Numpad 5', | ||
114 | numpad6: 'Numpad 6', | ||
115 | numpad7: 'Numpad 7', | ||
116 | numpad8: 'Numpad 8', | ||
117 | numpad9: 'Numpad 9', | ||
118 | multiply: 'គុណ', | ||
119 | add: 'បន្ថែម', | ||
120 | subtract: 'ដក', | ||
121 | decimalPoint: 'ចំណុចទសភាគ', | ||
122 | divide: 'ចែក', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'បិទរំកិល', | ||
137 | semiColon: 'ចុចក្បៀស', | ||
138 | equalSign: 'សញ្ញាអឺរ៉ូ', | ||
139 | comma: 'ក្បៀស', | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'ចុច', | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'តង្កៀបបើក', | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'តង្កៀបបិទ', | ||
147 | singleQuote: 'បន្តក់មួយ' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/ko.js b/sources/plugins/a11yhelp/dialogs/lang/ko.js new file mode 100644 index 0000000..9191e13 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/ko.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'ko', { | ||
7 | title: '접근성 설명', | ||
8 | contents: '도움말. 이 창을 닫으시려면 ESC 를 누르세요.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: '일반', | ||
12 | items: [ | ||
13 | { | ||
14 | name: '편집기 툴바', | ||
15 | legend: '툴바를 탐색하시려면 ${toolbarFocus} 를 투르세요. 이전/다음 툴바 그룹으로 이동하시려면 TAB 키 또는 SHIFT+TAB 키를 누르세요. 이전/다음 툴바 버튼으로 이동하시려면 오른쪽 화살표 키 또는 왼쪽 화살표 키를 누르세요. 툴바 버튼을 활성화 하려면 SPACE 키 또는 ENTER 키를 누르세요.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: '편집기 다이얼로그', | ||
20 | legend: | ||
21 | 'TAB 키를 누르면 다음 대화상자로 이동하고, SHIFT+TAB 키를 누르면 이전 대화상자로 이동합니다. 대화상자를 제출하려면 ENTER 키를 누르고, ESC 키를 누르면 대화상자를 취소합니다. 대화상자에 탭이 여러개 있을 때, ALT+F10 키 또는 TAB 키를 누르면 순서에 따라 탭 목록에 도달할 수 있습니다. 탭 목록에 초점이 맞을 때, 오른쪽과 왼쪽 화살표 키를 이용하면 각각 다음과 이전 탭으로 이동할 수 있습니다.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: '편집기 환경 메뉴', | ||
26 | legend: '${contextMenu} 또는 어플리케이션 키를 누르면 환경-메뉴를 열 수 있습니다. 환경-메뉴에서 TAB 키 또는 아래 화살표 키를 누르면 다음 메뉴 옵션으로 이동할 수 있습니다. 이전 옵션으로 이동은 SHIFT+TAB 키 또는 위 화살표 키를 눌러서 할 수 있습니다. 스페이스 키 또는 ENTER 키를 눌러서 메뉴 옵션을 선택할 수 있습니다. 스페이스 키 또는 ENTER 키 또는 오른쪽 화살표 키를 눌러서 하위 메뉴를 열 수 있습니다. 부모 메뉴 항목으로 돌아가려면 ESC 키 또는 왼쪽 화살표 키를 누릅니다. ESC 키를 눌러서 환경-메뉴를 닫습니다.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: '편집기 목록 박스', | ||
31 | legend: '리스트-박스 내에서, 목록의 다음 항목으로 이동하려면 TAB 키 또는 아래쪽 화살표 키를 누릅니다. 목록의 이전 항목으로 이동하려면 SHIFT+TAB 키 또는 위쪽 화살표 키를 누릅니다. 스페이스 키 또는 ENTER 키를 누르면 목록의 해당 옵션을 선택합니다. ESC 키를 눌러서 리스트-박스를 닫을 수 있습니다.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: '편집기 요소 경로 막대', | ||
36 | legend: '${elementsPathFocus}를 눌러서 요소 경로 막대를 탐색할 수 있습니다. 다음 요소로 이동하려면 TAB 키 또는 오른쪽 화살표 키를 누릅니다. SHIFT+TAB 키 또는 왼쪽 화살표 키를 누르면 이전 버튼으로 이동할 수 있습니다. 스페이스 키나 ENTER 키를 누르면 편집기의 해당 항목을 선택합니다.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: '명령', | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' 명령 실행 취소', | ||
45 | legend: '${undo} 누르시오' | ||
46 | }, | ||
47 | { | ||
48 | name: ' 명령 다시 실행', | ||
49 | legend: '${redo} 누르시오' | ||
50 | }, | ||
51 | { | ||
52 | name: ' 굵게 명령', | ||
53 | legend: '${bold} 누르시오' | ||
54 | }, | ||
55 | { | ||
56 | name: ' 기울임 꼴 명령', | ||
57 | legend: '${italic} 누르시오' | ||
58 | }, | ||
59 | { | ||
60 | name: ' 밑줄 명령', | ||
61 | legend: '${underline} 누르시오' | ||
62 | }, | ||
63 | { | ||
64 | name: ' 링크 명령', | ||
65 | legend: '${link} 누르시오' | ||
66 | }, | ||
67 | { | ||
68 | name: ' 툴바 줄이기 명령', | ||
69 | legend: '${toolbarCollapse} 누르시오' | ||
70 | }, | ||
71 | { | ||
72 | name: ' 이전 포커스 공간 접근 명령', | ||
73 | legend: '탈자 기호(^) 이전에 ${accessPreviousSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다.' | ||
74 | }, | ||
75 | { | ||
76 | name: '다음 포커스 공간 접근 명령', | ||
77 | legend: '탈자 기호(^) 다음에 ${accessNextSpace} 를 누르면, 접근 불가능하면서 가장 가까운 포커스 영역에 접근합니다. 예를 들면, 두 인접한 HR 요소가 있습니다. 키 조합을 반복해서 멀리있는 포커스 영역들에 도달할 수 있습니다. ' | ||
78 | }, | ||
79 | { | ||
80 | name: ' 접근성 도움말', | ||
81 | legend: '${a11yHelp} 누르시오' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace 키', | ||
87 | tab: '탭 키', | ||
88 | enter: '엔터 키', | ||
89 | shift: '시프트 키', | ||
90 | ctrl: '컨트롤 키', | ||
91 | alt: '알트 키', | ||
92 | pause: '일시정지 키', | ||
93 | capslock: '캡스 록 키', | ||
94 | escape: '이스케이프 키', | ||
95 | pageUp: '페이지 업 키', | ||
96 | pageDown: '페이지 다운 키', | ||
97 | end: '엔드 키', | ||
98 | home: '홈 키', | ||
99 | leftArrow: '왼쪽 화살표 키', | ||
100 | upArrow: '위쪽 화살표 키', | ||
101 | rightArrow: '오른쪽 화살표 키', | ||
102 | downArrow: '아래쪽 화살표 키', | ||
103 | insert: '인서트 키', | ||
104 | 'delete': '삭제 키', | ||
105 | leftWindowKey: '왼쪽 윈도우 키', | ||
106 | rightWindowKey: '오른쪽 윈도우 키', | ||
107 | selectKey: '셀렉트 키', | ||
108 | numpad0: '숫자 패드 0 키', | ||
109 | numpad1: '숫자 패드 1 키', | ||
110 | numpad2: '숫자 패드 2 키', | ||
111 | numpad3: '숫자 패드 3 키', | ||
112 | numpad4: '숫자 패드 4 키', | ||
113 | numpad5: '숫자 패드 5 키', | ||
114 | numpad6: '숫자 패드 6 키', | ||
115 | numpad7: '숫자 패드 7 키', | ||
116 | numpad8: '숫자 패드 8 키', | ||
117 | numpad9: '숫자 패드 9 키', | ||
118 | multiply: '곱셈(*) 키', | ||
119 | add: '덧셈(+) 키', | ||
120 | subtract: '뺄셈(-) 키', | ||
121 | decimalPoint: '온점(.) 키', | ||
122 | divide: '나눗셈(/) 키', | ||
123 | f1: 'F1 키', | ||
124 | f2: 'F2 키', | ||
125 | f3: 'F3 키', | ||
126 | f4: 'F4 키', | ||
127 | f5: 'F5 키', | ||
128 | f6: 'F6 키', | ||
129 | f7: 'F7 키', | ||
130 | f8: 'F8 키', | ||
131 | f9: 'F9 키', | ||
132 | f10: 'F10 키', | ||
133 | f11: 'F11 키', | ||
134 | f12: 'F12 키', | ||
135 | numLock: 'Num Lock 키', | ||
136 | scrollLock: 'Scroll Lock 키', | ||
137 | semiColon: '세미콜론(;) 키', | ||
138 | equalSign: '등호(=) 키', | ||
139 | comma: '쉼표(,) 키', | ||
140 | dash: '대시(-) 키', | ||
141 | period: '온점(.) 키', | ||
142 | forwardSlash: '슬래시(/) 키', | ||
143 | graveAccent: '억음 악센트(`) 키', | ||
144 | openBracket: '브라켓 열기([) 키', | ||
145 | backSlash: '역슬래시(\\\\) 키', | ||
146 | closeBracket: '브라켓 닫기(]) 키', | ||
147 | singleQuote: '외 따옴표(\') 키' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/ku.js b/sources/plugins/a11yhelp/dialogs/lang/ku.js new file mode 100644 index 0000000..93f77dc --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/ku.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'ku', { | ||
7 | title: 'ڕێنمای لەبەردەستدابوون', | ||
8 | contents: 'پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'گشتی', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'تووڵامرازی دەستكاریكەر', | ||
15 | legend: 'کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ SHIFT+TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'دیالۆگی دەستكاریكەر', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'پێڕستی سەرنووسەر', | ||
26 | legend: 'کلیك ${contextMenu} یان دوگمەی لیسته(Menu) بۆ کردنەوەی لیستەی دەق. بۆ چوونە هەڵبژاردەیەکی تر له لیسته کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوارەوه بۆ چوون بۆ هەڵبژاردەی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له سەرەوە. داگرتنی کلیلی SPACE یان ENTER بۆ هەڵبژاردنی هەڵبژاردەی لیسته. بۆ کردنەوەی لقی ژێر لیسته لەهەڵبژاردەی لیستە کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری دەستی ڕاست. بۆ گەڕانەوه بۆ سەرەوەی لیسته کلیکی کلیلی ESC یان کلیلی تیری دەستی چەپ. بۆ داخستنی لیستە کلیكی کلیلی ESC بکە.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'لیستی سنووقی سەرنووسەر', | ||
31 | legend: 'لەناو سنوقی لیست, چۆن بۆ هەڵنبژاردەی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوار. چوون بۆ هەڵبژاردەی لیستی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو لەسەرەوه. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی هەڵبژاردەی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'تووڵامرازی توخم', | ||
36 | legend: 'کلیك ${elementsPathFocus} بۆ ڕابەری تووڵامرازی توخمەکان. چوون بۆ دوگمەی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری دەستی ڕاست. چوون بۆ دوگمەی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری دەستی چەپ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمەکه لەسەرنووسه.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'فەرمانەکان', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'پووچکردنەوەی فەرمان', | ||
45 | legend: 'کلیك ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'هەڵگەڕانەوەی فەرمان', | ||
49 | legend: 'کلیك ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'فەرمانی دەقی قەڵەو', | ||
53 | legend: 'کلیك ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'فەرمانی دەقی لار', | ||
57 | legend: 'کلیك ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'فەرمانی ژێرهێڵ', | ||
61 | legend: 'کلیك ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'فەرمانی بهستەر', | ||
65 | legend: 'کلیك ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'شاردەنەوەی تووڵامراز', | ||
69 | legend: 'کلیك ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'چوونەناو سەرنجدانی پێشوی فەرمانی بۆشایی', | ||
73 | legend: 'کلیک ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'چوونەناو سەرنجدانی داهاتووی فەرمانی بۆشایی', | ||
77 | legend: 'کلیک ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'دەستپێگەیشتنی یارمەتی', | ||
81 | legend: 'کلیك ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Left Arrow', | ||
100 | upArrow: 'Up Arrow', | ||
101 | rightArrow: 'Right Arrow', | ||
102 | downArrow: 'Down Arrow', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'پەنجەرەی چەپ', | ||
106 | rightWindowKey: 'پەنجەرەی ڕاست', | ||
107 | selectKey: 'Select', | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: '1', | ||
110 | numpad2: '2', | ||
111 | numpad3: '3', | ||
112 | numpad4: '4', | ||
113 | numpad5: '5', | ||
114 | numpad6: '6', | ||
115 | numpad7: '7', | ||
116 | numpad8: '8', | ||
117 | numpad9: '9', | ||
118 | multiply: '*', | ||
119 | add: '+', | ||
120 | subtract: '-', | ||
121 | decimalPoint: '.', | ||
122 | divide: '/', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: ';', | ||
138 | equalSign: '=', | ||
139 | comma: ',', | ||
140 | dash: '-', | ||
141 | period: '.', | ||
142 | forwardSlash: '/', | ||
143 | graveAccent: '`', | ||
144 | openBracket: '[', | ||
145 | backSlash: '\\\\', | ||
146 | closeBracket: '}', | ||
147 | singleQuote: '\'' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/lt.js b/sources/plugins/a11yhelp/dialogs/lang/lt.js new file mode 100644 index 0000000..d1a21ac --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/lt.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'lt', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', // MISSING | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Bendros savybės', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', // MISSING | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', // MISSING | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/lv.js b/sources/plugins/a11yhelp/dialogs/lang/lv.js new file mode 100644 index 0000000..ccd13b8 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/lv.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'lv', { | ||
7 | title: 'Pieejamības instrukcija', | ||
8 | contents: 'Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Galvenais', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Redaktora rīkjosla', | ||
15 | legend: 'Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Redaktora dialoga logs', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Redaktora satura izvēle', | ||
26 | legend: 'Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Redaktora saraksta lauks', | ||
31 | legend: 'Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Redaktora elementa ceļa josla', | ||
36 | legend: 'Nospiediet ${elementsPathFocus} lai pārvietotos uz elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu izmantojiet SHIFT+TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Komandas', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Komanda atcelt darbību', | ||
45 | legend: 'Nospiediet ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Komanda atkārtot darbību', | ||
49 | legend: 'Nospiediet ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Treknraksta komanda', | ||
53 | legend: 'Nospiediet ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Kursīva komanda', | ||
57 | legend: 'Nospiediet ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Apakšsvītras komanda ', | ||
61 | legend: 'Nospiediet ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Hipersaites komanda', | ||
65 | legend: 'Nospiediet ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Rīkjoslas aizvēršanas komanda', | ||
69 | legend: 'Nospiediet ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Piekļūt iepriekšējai fokusa vietas komandai', | ||
73 | legend: 'Nospiediet ${accessPreviousSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pirms kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Piekļūt nākošā fokusa apgabala komandai', | ||
77 | legend: 'Nospiediet ${accessNextSpace} lai piekļūtu tuvākajai nepieejamajai fokusa vietai pēc kursora. Piemēram: diviem blakus esošiem līnijas HR elementiem. Atkārtojiet taustiņu kombināciju lai piekļūtu pie tālākām vietām.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Pieejamības palīdzība', | ||
81 | legend: 'Nospiediet ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/mk.js b/sources/plugins/a11yhelp/dialogs/lang/mk.js new file mode 100644 index 0000000..3dca6f7 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/mk.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'mk', { | ||
7 | title: 'Инструкции за пристапност', | ||
8 | contents: 'Содржина на делот за помош. За да го затворите овој дијалог притиснете ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Општо', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Мени за уредувачот', | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Дијалот за едиторот', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Контекст-мени на уредувачот', | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Наредби', | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Пауза', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Up', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Стрелка лево', | ||
100 | upArrow: 'Стрелка горе', | ||
101 | rightArrow: 'Стрелка десно', | ||
102 | downArrow: 'Стрелка доле', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'Лево Windows копче', | ||
106 | rightWindowKey: 'Десно Windows копче', | ||
107 | selectKey: 'Select копче', | ||
108 | numpad0: 'Нум. таст. 0', | ||
109 | numpad1: 'Нум. таст. 1', | ||
110 | numpad2: 'Нум. таст. 2', | ||
111 | numpad3: 'Нум. таст. 3', | ||
112 | numpad4: 'Нум. таст. 4', | ||
113 | numpad5: 'Нум. таст. 5', | ||
114 | numpad6: 'Нум. таст. 6', | ||
115 | numpad7: 'Нум. таст. 7', | ||
116 | numpad8: 'Нум. таст. 8', | ||
117 | numpad9: 'Нум. таст. 9', | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/mn.js b/sources/plugins/a11yhelp/dialogs/lang/mn.js new file mode 100644 index 0000000..35ae7a7 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/mn.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'mn', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', // MISSING | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Ерөнхий', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', // MISSING | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', // MISSING | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/nb.js b/sources/plugins/a11yhelp/dialogs/lang/nb.js new file mode 100644 index 0000000..f8a8774 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/nb.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'nb', { | ||
7 | title: 'Instruksjoner for tilgjengelighet', | ||
8 | contents: 'Innhold for hjelp. Trykk ESC for å lukke denne dialogen.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Generelt', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Verktøylinje for editor', | ||
15 | legend: 'Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Dialog for editor', | ||
20 | legend: | ||
21 | 'Mens du er i en dialog, trykk TAB for å navigere til neste dialogelement, trykk SHIFT+TAB for å flytte til forrige dialogelement, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. Når en dialog har flere faner, kan fanelisten nås med enten ALT+F10 eller med TAB. Når fanelisten er fokusert, går man til neste og forrige fane med henholdsvis HØYRE og VENSTRE PILTAST.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Kontekstmeny for editor', | ||
26 | legend: 'Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Listeboks for editor', | ||
31 | legend: 'I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Verktøylinje for elementsti', | ||
36 | legend: 'Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Hurtigtaster', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Angre', | ||
45 | legend: 'Trykk ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Gjør om', | ||
49 | legend: 'Trykk ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Fet tekst', | ||
53 | legend: 'Trykk ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Kursiv tekst', | ||
57 | legend: 'Trykk ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Understreking', | ||
61 | legend: 'Trykk ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Lenke', | ||
65 | legend: 'Trykk ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Skjul verktøylinje', | ||
69 | legend: 'Trykk ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Gå til forrige fokusområde', | ||
73 | legend: 'Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Gå til neste fokusområde', | ||
77 | legend: 'Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Hjelp for tilgjengelighet', | ||
81 | legend: 'Trykk ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tabulator', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Venstre piltast', | ||
100 | upArrow: 'Opp-piltast', | ||
101 | rightArrow: 'Høyre piltast', | ||
102 | downArrow: 'Ned-piltast', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'Venstre Windows-tast', | ||
106 | rightWindowKey: 'Høyre Windows-tast', | ||
107 | selectKey: 'Velg nøkkel', | ||
108 | numpad0: 'Numerisk tastatur 0', | ||
109 | numpad1: 'Numerisk tastatur 1', | ||
110 | numpad2: 'Numerisk tastatur 2', | ||
111 | numpad3: 'Numerisk tastatur 3', | ||
112 | numpad4: 'Numerisk tastatur 4', | ||
113 | numpad5: 'Numerisk tastatur 5', | ||
114 | numpad6: 'Numerisk tastatur 6', | ||
115 | numpad7: 'Numerisk tastatur 7', | ||
116 | numpad8: 'Numerisk tastatur 8', | ||
117 | numpad9: 'Numerisk tastatur 9', | ||
118 | multiply: 'Multipliser', | ||
119 | add: 'Legg til', | ||
120 | subtract: 'Trekk fra', | ||
121 | decimalPoint: 'Desimaltegn', | ||
122 | divide: 'Divider', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Semikolon', | ||
138 | equalSign: 'Likhetstegn', | ||
139 | comma: 'Komma', | ||
140 | dash: 'Bindestrek', | ||
141 | period: 'Punktum', | ||
142 | forwardSlash: 'Forover skråstrek', | ||
143 | graveAccent: 'Grav aksent', | ||
144 | openBracket: 'Åpne parentes', | ||
145 | backSlash: 'Bakover skråstrek', | ||
146 | closeBracket: 'Lukk parentes', | ||
147 | singleQuote: 'Enkelt sitattegn' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/nl.js b/sources/plugins/a11yhelp/dialogs/lang/nl.js new file mode 100644 index 0000000..a123ba4 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/nl.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'nl', { | ||
7 | title: 'Toegankelijkheidsinstructies', | ||
8 | contents: 'Help-inhoud. Druk op ESC om dit dialoog te sluiten.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Algemeen', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Werkbalk tekstverwerker', | ||
15 | legend: 'Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Dialoog tekstverwerker', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Contextmenu tekstverwerker', | ||
26 | legend: 'Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Keuzelijst tekstverwerker', | ||
31 | legend: 'In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Elementenpad werkbalk tekstverwerker', | ||
36 | legend: 'Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Opdrachten', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Ongedaan maken opdracht', | ||
45 | legend: 'Druk op ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Opnieuw uitvoeren opdracht', | ||
49 | legend: 'Druk op ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Vetgedrukt opdracht', | ||
53 | legend: 'Druk op ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Cursief opdracht', | ||
57 | legend: 'Druk op ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Onderstrepen opdracht', | ||
61 | legend: 'Druk op ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Link opdracht', | ||
65 | legend: 'Druk op ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Werkbalk inklappen opdracht', | ||
69 | legend: 'Druk op ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Ga naar vorige focus spatie commando', | ||
73 | legend: 'Druk ${accessPreviousSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie voor de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Ga naar volgende focus spatie commando', | ||
77 | legend: 'Druk ${accessNextSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie na de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Toegankelijkheidshulp', | ||
81 | legend: 'Druk op ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Pijl naar links', | ||
100 | upArrow: 'Pijl omhoog', | ||
101 | rightArrow: 'Pijl naar rechts', | ||
102 | downArrow: 'Pijl naar beneden', | ||
103 | insert: 'Invoegen', | ||
104 | 'delete': 'Verwijderen', | ||
105 | leftWindowKey: 'Linker Windows-toets', | ||
106 | rightWindowKey: 'Rechter Windows-toets', | ||
107 | selectKey: 'Selecteer toets', | ||
108 | numpad0: 'Numpad 0', | ||
109 | numpad1: 'Numpad 1', | ||
110 | numpad2: 'Numpad 2', | ||
111 | numpad3: 'Numpad 3', | ||
112 | numpad4: 'Numpad 4', | ||
113 | numpad5: 'Numpad 5', | ||
114 | numpad6: 'Numpad 6', | ||
115 | numpad7: 'Numpad 7', | ||
116 | numpad8: 'Numpad 8', | ||
117 | numpad9: 'Numpad 9', | ||
118 | multiply: 'Vermenigvuldigen', | ||
119 | add: 'Toevoegen', | ||
120 | subtract: 'Aftrekken', | ||
121 | decimalPoint: 'Decimaalteken', | ||
122 | divide: 'Delen', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Puntkomma', | ||
138 | equalSign: 'Is gelijk-teken', | ||
139 | comma: 'Komma', | ||
140 | dash: 'Koppelteken', | ||
141 | period: 'Punt', | ||
142 | forwardSlash: 'Slash', | ||
143 | graveAccent: 'Accent grave', | ||
144 | openBracket: 'Vierkant haakje openen', | ||
145 | backSlash: 'Backslash', | ||
146 | closeBracket: 'Vierkant haakje sluiten', | ||
147 | singleQuote: 'Apostrof' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/no.js b/sources/plugins/a11yhelp/dialogs/lang/no.js new file mode 100644 index 0000000..4fb1163 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/no.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'no', { | ||
7 | title: 'Instruksjoner for tilgjengelighet', | ||
8 | contents: 'Innhold for hjelp. Trykk ESC for å lukke denne dialogen.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Generelt', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Verktøylinje for editor', | ||
15 | legend: 'Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT+TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Dialog for editor', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Kontekstmeny for editor', | ||
26 | legend: 'Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Listeboks for editor', | ||
31 | legend: 'I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Verktøylinje for elementsti', | ||
36 | legend: 'Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Kommandoer', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Angre', | ||
45 | legend: 'Trykk ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Gjør om', | ||
49 | legend: 'Trykk ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Fet tekst', | ||
53 | legend: 'Trykk ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Kursiv tekst', | ||
57 | legend: 'Trykk ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Understreking', | ||
61 | legend: 'Trykk ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Link', | ||
65 | legend: 'Trykk ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Skjul verktøylinje', | ||
69 | legend: 'Trykk ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Gå til forrige fokusområde', | ||
73 | legend: 'Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Gå til neste fokusområde', | ||
77 | legend: 'Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Hjelp for tilgjengelighet', | ||
81 | legend: 'Trykk ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/pl.js b/sources/plugins/a11yhelp/dialogs/lang/pl.js new file mode 100644 index 0000000..1e270f5 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/pl.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'pl', { | ||
7 | title: 'Instrukcje dotyczące dostępności', | ||
8 | contents: 'Zawartość pomocy. Wciśnij ESC, aby zamknąć to okno.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Informacje ogólne', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Pasek narzędzi edytora', | ||
15 | legend: 'Naciśnij ${toolbarFocus}, by przejść do paska narzędzi. Przejdź do następnej i poprzedniej grupy narzędzi używając TAB oraz SHIFT+TAB. Przejdź do następnego i poprzedniego przycisku paska narzędzi za pomocą STRZAŁKI W PRAWO lub STRZAŁKI W LEWO. Naciśnij SPACJĘ lub ENTER by aktywować przycisk paska narzędzi.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Okno dialogowe edytora', | ||
20 | legend: | ||
21 | 'Wewnątrz okna dialogowego naciśnij TAB, by przejść do kolejnego elementu tego okna lub SHIFT+TAB, by przejść do poprzedniego elementu okna. Naciśnij ENTER w celu zatwierdzenia opcji okna dialogowego lub ESC w celu anulowania zmian. Jeśli okno dialogowe ma kilka zakładek, do listy zakładek można przejść za pomocą ALT+F10 lub TAB. Gdy lista zakładek jest aktywna, możesz przejść do kolejnej i poprzedniej zakładki za pomocą STRZAŁKI W PRAWO i STRZAŁKI W LEWO.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Menu kontekstowe edytora', | ||
26 | legend: 'Wciśnij ${contextMenu} lub PRZYCISK APLIKACJI aby otworzyć menu kontekstowe. Przejdź do następnej pozycji menu wciskając TAB lub STRZAŁKĘ W DÓŁ. Przejdź do poprzedniej pozycji menu wciskając SHIFT + TAB lub STRZAŁKĘ W GÓRĘ. Wciśnij SPACJĘ lub ENTER aby wygrać pozycję menu. Otwórz pod-menu obecnej pozycji wciskając SPACJĘ lub ENTER lub STRZAŁKĘ W PRAWO. Wróć do pozycji nadrzędnego menu wciskając ESC lub STRZAŁKĘ W LEWO. Zamknij menu wciskając ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Lista w edytorze', | ||
31 | legend: 'Wewnątrz listy przejdź do kolejnego elementu listy za pomocą przycisku TAB lub STRZAŁKI W DÓŁ. Przejdź do poprzedniego elementu listy za pomocą SHIFT+TAB lub STRZAŁKI W GÓRĘ. Naciśnij SPACJĘ lub ENTER w celu wybrania opcji z listy. Naciśnij ESC, by zamknąć listę.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Pasek ścieżki elementów edytora', | ||
36 | legend: 'Naciśnij ${elementsPathFocus} w celu przejścia do paska ścieżki elementów edytora. W celu przejścia do kolejnego elementu naciśnij klawisz TAB lub STRZAŁKI W PRAWO. W celu przejścia do poprzedniego elementu naciśnij klawisze SHIFT+TAB lub STRZAŁKI W LEWO. By wybrać element w edytorze, użyj klawisza SPACJI lub ENTER.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Polecenia', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Polecenie Cofnij', | ||
45 | legend: 'Naciśnij ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Polecenie Ponów', | ||
49 | legend: 'Naciśnij ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Polecenie Pogrubienie', | ||
53 | legend: 'Naciśnij ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Polecenie Kursywa', | ||
57 | legend: 'Naciśnij ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Polecenie Podkreślenie', | ||
61 | legend: 'Naciśnij ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Polecenie Wstaw/ edytuj odnośnik', | ||
65 | legend: 'Naciśnij ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Polecenie schowaj pasek narzędzi', | ||
69 | legend: 'Naciśnij ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: 'Pomoc dotycząca dostępności', | ||
81 | legend: 'Naciśnij ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Strzałka w lewo', | ||
100 | upArrow: 'Strzałka w górę', | ||
101 | rightArrow: 'Strzałka w prawo', | ||
102 | downArrow: 'Strzałka w dół', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'Lewy klawisz Windows', | ||
106 | rightWindowKey: 'Prawy klawisz Windows', | ||
107 | selectKey: 'Klawisz wyboru', | ||
108 | numpad0: 'Klawisz 0 na klawiaturze numerycznej', | ||
109 | numpad1: 'Klawisz 1 na klawiaturze numerycznej', | ||
110 | numpad2: 'Klawisz 2 na klawiaturze numerycznej', | ||
111 | numpad3: 'Klawisz 3 na klawiaturze numerycznej', | ||
112 | numpad4: 'Klawisz 4 na klawiaturze numerycznej', | ||
113 | numpad5: 'Klawisz 5 na klawiaturze numerycznej', | ||
114 | numpad6: 'Klawisz 6 na klawiaturze numerycznej', | ||
115 | numpad7: 'Klawisz 7 na klawiaturze numerycznej', | ||
116 | numpad8: 'Klawisz 8 na klawiaturze numerycznej', | ||
117 | numpad9: 'Klawisz 9 na klawiaturze numerycznej', | ||
118 | multiply: 'Przemnóż', | ||
119 | add: 'Plus', | ||
120 | subtract: 'Minus', | ||
121 | decimalPoint: 'Separator dziesiętny', | ||
122 | divide: 'Podziel', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Średnik', | ||
138 | equalSign: 'Znak równości', | ||
139 | comma: 'Przecinek', | ||
140 | dash: 'Pauza', | ||
141 | period: 'Kropka', | ||
142 | forwardSlash: 'Ukośnik prawy', | ||
143 | graveAccent: 'Akcent słaby', | ||
144 | openBracket: 'Nawias kwadratowy otwierający', | ||
145 | backSlash: 'Ukośnik lewy', | ||
146 | closeBracket: 'Nawias kwadratowy zamykający', | ||
147 | singleQuote: 'Apostrof' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/pt-br.js b/sources/plugins/a11yhelp/dialogs/lang/pt-br.js new file mode 100644 index 0000000..c499a57 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/pt-br.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'pt-br', { | ||
7 | title: 'Instruções de Acessibilidade', | ||
8 | contents: 'Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Geral', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Barra de Ferramentas do Editor', | ||
15 | legend: 'Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT+TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Diálogo do Editor', | ||
20 | legend: | ||
21 | 'Dentro de um diálogo, pressione TAB para navegar para o próximo elemento. Pressione SHIFT+TAB para mover para o elemento anterior. Pressione ENTER ara enviar o diálogo. pressione ESC para cancelar o diálogo. Quando um diálogo tem múltiplas abas, a lista de abas pode ser acessada com ALT+F10 ou TAB, como parte da ordem de tabulação do diálogo. Com a lista de abas em foco, mova para a próxima aba e para a aba anterior com a SETA DIREITA ou SETA ESQUERDA, respectivamente.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Menu de Contexto do Editor', | ||
26 | legend: 'Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Caixa de Lista do Editor', | ||
31 | legend: 'Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Barra de Caminho do Elementos do Editor', | ||
36 | legend: 'Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Comandos', | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Comando Desfazer', | ||
45 | legend: 'Pressione ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: ' Comando Refazer', | ||
49 | legend: 'Pressione ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: ' Comando Negrito', | ||
53 | legend: 'Pressione ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: ' Comando Itálico', | ||
57 | legend: 'Pressione ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: ' Comando Sublinhado', | ||
61 | legend: 'Pressione ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: ' Comando Link', | ||
65 | legend: 'Pressione ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Comando Fechar Barra de Ferramentas', | ||
69 | legend: 'Pressione ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Acessar o comando anterior de spaço de foco', | ||
73 | legend: 'Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo antes do cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Acessar próximo fomando de spaço de foco', | ||
77 | legend: 'Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo após o cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes.' | ||
78 | }, | ||
79 | { | ||
80 | name: ' Ajuda de Acessibilidade', | ||
81 | legend: 'Pressione ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Tecla Backspace', | ||
87 | tab: 'Tecla Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Seta à Esquerda', | ||
100 | upArrow: 'Seta à Cima', | ||
101 | rightArrow: 'Seta à Direita', | ||
102 | downArrow: 'Seta à Baixo', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'Tecla do Windows Esquerda', | ||
106 | rightWindowKey: 'Tecla do Windows Direita', | ||
107 | selectKey: 'Tecla Selecionar', | ||
108 | numpad0: '0 do Teclado Numérico', | ||
109 | numpad1: '1 do Teclado Numérico', | ||
110 | numpad2: '2 do Teclado Numérico', | ||
111 | numpad3: '3 do Teclado Numérico', | ||
112 | numpad4: '4 do Teclado Numérico', | ||
113 | numpad5: '5 do Teclado Numérico', | ||
114 | numpad6: '6 do Teclado Numérico', | ||
115 | numpad7: '7 do Teclado Numérico', | ||
116 | numpad8: '8 do Teclado Numérico', | ||
117 | numpad9: '9 do Teclado Numérico', | ||
118 | multiply: 'Multiplicar', | ||
119 | add: 'Mais', | ||
120 | subtract: 'Subtrair', | ||
121 | decimalPoint: 'Ponto', | ||
122 | divide: 'Dividir', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Ponto-e-vírgula', | ||
138 | equalSign: 'Igual', | ||
139 | comma: 'Vírgula', | ||
140 | dash: 'Hífen', | ||
141 | period: 'Ponto', | ||
142 | forwardSlash: 'Barra', | ||
143 | graveAccent: 'Acento Grave', | ||
144 | openBracket: 'Abrir Conchetes', | ||
145 | backSlash: 'Contra-barra', | ||
146 | closeBracket: 'Fechar Colchetes', | ||
147 | singleQuote: 'Aspas Simples' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/pt.js b/sources/plugins/a11yhelp/dialogs/lang/pt.js new file mode 100644 index 0000000..2566f5b --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/pt.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'pt', { | ||
7 | title: 'Instruções de acessibilidade', | ||
8 | contents: 'Conteúdo de ajuda. Use a tecla ESC para fechar esta janela.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Geral', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Barra de ferramentas do editor', | ||
15 | legend: 'Clique em ${toolbarFocus} para navegar para a barra de ferramentas. Vá para o grupo da barra de ferramentas anterior e seguinte com TAB e SHIFT+TAB. Vá para o botão da barra de ferramentas anterior com a SETA DIREITA ou ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Janela do Editor', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Menu de Contexto do Editor', | ||
26 | legend: 'Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. GVá para o item do menu parente com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor de caixa em lista', | ||
31 | legend: 'Dentro da caixa da lista, vá para o itemda lista seguinte com TAB ou SETA PARA BAIXO. Move Vá parao item da lista anterior com SHIFT+TAB ou SETA PARA BAIXO. Pressione ESPAÇO ou ENTER para selecionar a opção da lista. Pressione ESC para fechar a caisa da lista.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Caminho Barra Elemento Editor', | ||
36 | legend: 'Clique em ${elementsPathFocus} para navegar para a barra do caminho dos elementos. Vá para o botão do elemento seguinte com TAB ou SETA DIREITA. Vá para o botão anterior com SHIFT+TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Comandos', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Comando de Anular', | ||
45 | legend: 'Carregar ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Comando de Refazer', | ||
49 | legend: 'Pressione ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Comando de Negrito', | ||
53 | legend: 'Pressione ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Comando de Itálico', | ||
57 | legend: 'Pressione ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Comando de Sublinhado', | ||
61 | legend: 'Pressione ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Comando de Hiperligação', | ||
65 | legend: 'Pressione ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Comando de Ocultar Barra de Ferramentas', | ||
69 | legend: 'Pressione ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Acesso comando do espaço focus anterior', | ||
73 | legend: 'Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Acesso comando do espaço focus seguinte', | ||
77 | legend: 'Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Ajuda a acessibilidade', | ||
81 | legend: 'Pressione ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pausa', | ||
93 | capslock: 'Maiúsculas', | ||
94 | escape: 'Esc', | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'Fim', | ||
98 | home: 'Entrada', | ||
99 | leftArrow: 'Seta esquerda', | ||
100 | upArrow: 'Seta para cima', | ||
101 | rightArrow: 'Seta direita', | ||
102 | downArrow: 'Seta para baixo', | ||
103 | insert: 'Inserir', | ||
104 | 'delete': 'Eliminar', | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiplicar', | ||
119 | add: 'Adicionar', | ||
120 | subtract: 'Subtrair', | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Vírgula', | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Acento grave', | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/ro.js b/sources/plugins/a11yhelp/dialogs/lang/ro.js new file mode 100644 index 0000000..c787177 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/ro.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'ro', { | ||
7 | title: 'Instrucțiuni de accesibilitate', | ||
8 | contents: 'Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'General', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editează bara instrumente.', | ||
15 | legend: 'Apasă ${toolbarFocus} pentru a naviga prin bara de instrumente. Pentru a te mișca prin grupurile de instrumente folosește tastele TAB și SHIFT+TAB. Pentru a te mișca intre diverse instrumente folosește tastele SĂGEATĂ DREAPTA sau SĂGEATĂ STÂNGA. Apasă butonul SPAȚIU sau ENTER pentru activarea instrumentului.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Dialog editor', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor meniu contextual', | ||
26 | legend: 'Apasă ${contextMenu} sau TASTA MENIU pentru a deschide meniul contextual. Treci la următoarea opțiune din meniu cu TAB sau SĂGEATĂ JOS. Treci la opțiunea anterioară cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din meniu. Deschide sub-meniul opțiunii curente cu SPAȚIU sau ENTER sau SĂGEATĂ DREAPTA. Revino la elementul din meniul părinte cu ESC sau SĂGEATĂ STÂNGA. Închide meniul de context cu ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor Casetă Listă', | ||
31 | legend: 'În interiorul unei liste, treci la următorull element cu TAB sau SĂGEATĂ JOS. Treci la elementul anterior din listă cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din listă. Apasă ESC pentru a închide lista.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Comenzi', | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Apasă ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Comanda precedentă', | ||
49 | legend: 'Apasă ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Comanda Îngroșat', | ||
53 | legend: 'Apasă ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Comanda Inclinat', | ||
57 | legend: 'Apasă ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Comanda Subliniere', | ||
61 | legend: 'Apasă ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Comanda Legatură', | ||
65 | legend: 'Apasă ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/ru.js b/sources/plugins/a11yhelp/dialogs/lang/ru.js new file mode 100644 index 0000000..23bb13d --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/ru.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'ru', { | ||
7 | title: 'Горячие клавиши', | ||
8 | contents: 'Помощь. Для закрытия этого окна нажмите ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Основное', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Панель инструментов', | ||
15 | legend: 'Нажмите ${toolbarFocus} для перехода к панели инструментов. Для перемещения между группами панели инструментов используйте TAB и SHIFT+TAB. Для перемещения между кнопками панели иструментов используйте кнопки ВПРАВО или ВЛЕВО. Нажмите ПРОБЕЛ или ENTER для запуска кнопки панели инструментов.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Диалоги', | ||
20 | legend: | ||
21 | 'Внутри диалога, нажмите TAB чтобы перейти к следующему элементу диалога, нажмите SHIFT+TAB чтобы перейти к предыдущему элементу диалога, нажмите ENTER чтобы отправить диалог, нажмите ESC чтобы отменить диалог. Когда диалоговое окно имеет несколько вкладок, получить доступ к панели вкладок как части диалога можно нажатием или сочетания ALT+F10 или TAB, при этом активные элементы диалога будут перебираться с учетом порядка табуляции. При активной панели вкладок, переход к следующей или предыдущей вкладке осуществляется нажатием стрелки "ВПРАВО" или стрелки "ВЛЕВО" соответственно.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Контекстное меню', | ||
26 | legend: 'Нажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекстное меню. Затем перейдите к следующему пункту меню с помощью TAB или стрелкой "ВНИЗ". Переход к предыдущей опции - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или стрелкой "ВПРАВО". Возврат к родительскому пункту меню - ESC или стрелкой "ВЛЕВО". Закрытие контекстного меню - ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Редактор списка', | ||
31 | legend: 'Внутри окна списка, переход к следующему пункту списка - TAB или стрелкой "ВНИЗ". Переход к предыдущему пункту списка - SHIFT+TAB или стрелкой "ВВЕРХ". Нажмите SPACE, или ENTER, чтобы задействовать опцию списка. Нажмите ESC, чтобы закрыть окно списка.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Путь к элементу', | ||
36 | legend: 'Нажмите ${elementsPathFocus}, чтобы перейти к панели пути элементов. Переход к следующей кнопке элемента - TAB или стрелкой "ВПРАВО". Переход к предыдущей кнопку - SHIFT+TAB или стрелкой "ВЛЕВО". Нажмите SPACE, или ENTER, чтобы выбрать элемент в редакторе.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Команды', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Отменить', | ||
45 | legend: 'Нажмите ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Повторить', | ||
49 | legend: 'Нажмите ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Полужирный', | ||
53 | legend: 'Нажмите ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Курсив', | ||
57 | legend: 'Нажмите ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Подчеркнутый', | ||
61 | legend: 'Нажмите ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Гиперссылка', | ||
65 | legend: 'Нажмите ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Свернуть панель инструментов', | ||
69 | legend: 'Нажмите ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Команды доступа к предыдущему фокусному пространству', | ||
73 | legend: 'Нажмите ${accessPreviousSpace}, чтобы обратиться к ближайшему недостижимому фокусному пространству перед символом "^", например: два смежных HR элемента. Повторите комбинацию клавиш, чтобы достичь отдаленных фокусных пространств.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Команды доступа к следующему фокусному пространству', | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Справка по горячим клавишам', | ||
81 | legend: 'Нажмите ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Esc', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Стрелка влево', | ||
100 | upArrow: 'Стрелка вверх', | ||
101 | rightArrow: 'Стрелка вправо', | ||
102 | downArrow: 'Стрелка вниз', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'Левая клавиша Windows', | ||
106 | rightWindowKey: 'Правая клавиша Windows', | ||
107 | selectKey: 'Выбрать', | ||
108 | numpad0: 'Цифра 0', | ||
109 | numpad1: 'Цифра 1', | ||
110 | numpad2: 'Цифра 2', | ||
111 | numpad3: 'Цифра 3', | ||
112 | numpad4: 'Цифра 4', | ||
113 | numpad5: 'Цифра 5', | ||
114 | numpad6: 'Цифра 6', | ||
115 | numpad7: 'Цифра 7', | ||
116 | numpad8: 'Цифра 8', | ||
117 | numpad9: 'Цифра 9', | ||
118 | multiply: 'Умножить', | ||
119 | add: 'Плюс', | ||
120 | subtract: 'Вычесть', | ||
121 | decimalPoint: 'Десятичная точка', | ||
122 | divide: 'Делить', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Точка с запятой', | ||
138 | equalSign: 'Равно', | ||
139 | comma: 'Запятая', | ||
140 | dash: 'Тире', | ||
141 | period: 'Точка', | ||
142 | forwardSlash: 'Наклонная черта', | ||
143 | graveAccent: 'Апостроф', | ||
144 | openBracket: 'Открыть скобку', | ||
145 | backSlash: 'Обратная наклонная черта', | ||
146 | closeBracket: 'Закрыть скобку', | ||
147 | singleQuote: 'Одинарная кавычка' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/si.js b/sources/plugins/a11yhelp/dialogs/lang/si.js new file mode 100644 index 0000000..e855192 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/si.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'si', { | ||
7 | title: 'ළඟා වියහැකි ', | ||
8 | contents: 'උදව් සඳහා අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'පොදු කරුණු', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'සංස්කරණ මෙවලම් ', | ||
15 | legend: 'ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'සංස්කරණ ', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'සංස්කරණ අඩංගුවට ', | ||
26 | legend: 'ඔබන්න ${අන්තර්ගත මෙනුව} හෝ APPLICATION KEY අන්තර්ගත-මෙනුව විවුරතකිරීමට. ඊළඟ මෙනුව-ව්කල්පයන්ට යෑමට TAB හෝ DOWN ARROW බොත්තම ද, පෙර විකල්පයන්ටයෑමට SHIFT+TAB හෝ UP ARROW බොත්තම ද, මෙනුව-ව්කල්පයන් තේරීමට SPACE හෝ ENTER බොත්තම ද, දැනට විවුර්තව ඇති උප-මෙනුවක වීකල්ප තේරීමට SPACE හෝ ENTER හෝ RIGHT ARROW ද, නැවත පෙර ප්රධාන මෙනුවට යෑමට ESC හෝ LEFT ARROW බොත්තම ද. අන්තර්ගත-මෙනුව වැසීමට ESC බොත්තම ද ඔබන්න.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'සංස්කරණ තේරුම් ', | ||
31 | legend: 'තේරුම් කොටුව තුළ , ඊළඟ අයිතමයට යෑමට TAB හෝ DOWN ARROW , පෙර අයිතමයට යෑමට SHIFT+TAB හෝ UP ARROW . අයිතම විකල්පයන් තේරීමට SPACE හෝ ENTER ,තේරුම් කොටුව වැසීමට ESC බොත්තම් ද ඔබන්න.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'සංස්කරණ අංග සහිත ', | ||
36 | legend: 'ඔබන්න ${මෙවලම් තීරු අවධානය} මෙවලම් තීරුවේ එහා මෙහා යෑමට.ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරුකාණ්ඩය හා TAB හා SHIFT+TAB .ඉදිරියට යෑමට හා ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW හෝ LEFT ARROW.මෙවලම් තීරු බොත්තම සක්රිය කර ගැනීමට SPACE හෝ ENTER බොත්තම ඔබන්න.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'විධාන', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'විධානය වෙනස් ', | ||
45 | legend: 'ඔබන්න ${වෙනස් කිරීම}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'විධාන නැවත් පෙර පරිදිම වෙනස්කර ගැනීම.', | ||
49 | legend: 'ඔබන්න ${නැවත් පෙර පරිදිම වෙනස්කර ගැනීම}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'තද අකුරින් විධාන', | ||
53 | legend: 'ඔබන්න ${තද }' | ||
54 | }, | ||
55 | { | ||
56 | name: 'බැධී අකුරු විධාන', | ||
57 | legend: 'ඔබන්න ${බැධී අකුරු }' | ||
58 | }, | ||
59 | { | ||
60 | name: 'යටින් ඉරි ඇද ඇති විධාන.', | ||
61 | legend: 'ඔබන්න ${යටින් ඉරි ඇද ඇති}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'සම්බන්ධිත විධාන', | ||
65 | legend: 'ඔබන්න ${සම්බන්ධ }' | ||
66 | }, | ||
67 | { | ||
68 | name: 'මෙවලම් තීරු හැකුලුම් විධාන', | ||
69 | legend: 'ඔබන්න ${මෙවලම් තීරු හැකුලුම් }' | ||
70 | }, | ||
71 | { | ||
72 | name: 'යොමුවීමට පෙර වැදගත් විධාන', | ||
73 | legend: 'ඔබන්න ${යොමුවීමට ඊළඟ }' | ||
74 | }, | ||
75 | { | ||
76 | name: 'යොමුවීමට ඊළග වැදගත් විධාන', | ||
77 | legend: 'ඔබන්න ${යොමුවීමට ඊළඟ }' | ||
78 | }, | ||
79 | { | ||
80 | name: 'ප්රවේශ ', | ||
81 | legend: 'ඔබන්න ${a11y }' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/sk.js b/sources/plugins/a11yhelp/dialogs/lang/sk.js new file mode 100644 index 0000000..ee91403 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/sk.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'sk', { | ||
7 | title: 'Inštrukcie prístupnosti', | ||
8 | contents: 'Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Všeobecne', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Lišta nástrojov editora', | ||
15 | legend: 'Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT+TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editorový dialóg', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editorové kontextové menu', | ||
26 | legend: 'Stlačte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ďalšie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editorov box zoznamu', | ||
31 | legend: 'V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT+TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editorove pásmo cesty prvku', | ||
36 | legend: 'Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT+TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Príkazy', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Vrátiť príkazy', | ||
45 | legend: 'Stlačte ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Nanovo vrátiť príkaz', | ||
49 | legend: 'Stlačte ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Príkaz na stučnenie', | ||
53 | legend: 'Stlačte ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Príkaz na kurzívu', | ||
57 | legend: 'Stlačte ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Príkaz na podčiarknutie', | ||
61 | legend: 'Stlačte ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Príkaz na odkaz', | ||
65 | legend: 'Stlačte ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Príkaz na zbalenie lišty nástrojov', | ||
69 | legend: 'Stlačte ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Prejsť na predchádzajúcu zamerateľnú medzeru príkazu', | ||
73 | legend: 'Stlačte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Prejsť na ďalší ', | ||
77 | legend: 'Stlačte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Napríklad: dve za sebou idúce horizontálne čiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Pomoc prístupnosti', | ||
81 | legend: 'Stlačte ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Stránka hore', | ||
96 | pageDown: 'Stránka dole', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Šípka naľavo', | ||
100 | upArrow: 'Šípka hore', | ||
101 | rightArrow: 'Šípka napravo', | ||
102 | downArrow: 'Šípka dole', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'Ľavé Windows tlačidlo', | ||
106 | rightWindowKey: 'Pravé Windows tlačidlo', | ||
107 | selectKey: 'Tlačidlo Select', | ||
108 | numpad0: 'Numpad 0', | ||
109 | numpad1: 'Numpad 1', | ||
110 | numpad2: 'Numpad 2', | ||
111 | numpad3: 'Numpad 3', | ||
112 | numpad4: 'Numpad 4', | ||
113 | numpad5: 'Numpad 5', | ||
114 | numpad6: 'Numpad 6', | ||
115 | numpad7: 'Numpad 7', | ||
116 | numpad8: 'Numpad 8', | ||
117 | numpad9: 'Numpad 9', | ||
118 | multiply: 'Násobenie', | ||
119 | add: 'Sčítanie', | ||
120 | subtract: 'Odčítanie', | ||
121 | decimalPoint: 'Desatinná čiarka', | ||
122 | divide: 'Delenie', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Bodkočiarka', | ||
138 | equalSign: 'Rovná sa', | ||
139 | comma: 'Čiarka', | ||
140 | dash: 'Pomĺčka', | ||
141 | period: 'Bodka', | ||
142 | forwardSlash: 'Lomítko', | ||
143 | graveAccent: 'Zdôrazňovanie prízvuku', | ||
144 | openBracket: 'Hranatá zátvorka otváracia', | ||
145 | backSlash: 'Backslash', | ||
146 | closeBracket: 'Hranatá zátvorka zatváracia', | ||
147 | singleQuote: 'Jednoduché úvodzovky' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/sl.js b/sources/plugins/a11yhelp/dialogs/lang/sl.js new file mode 100644 index 0000000..7cb12f6 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/sl.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'sl', { | ||
7 | title: 'Navodila Dostopnosti', | ||
8 | contents: 'Vsebina Pomoči. Če želite zapreti to pogovorno okno pritisnite ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Splošno', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Urejevalna Orodna Vrstica', | ||
15 | legend: 'Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT+TAB se pomikate na naslednjo in prejšnjo skupino orodne vrstice. Z DESNO PUŠČICO ali LEVO PUŠČICO se pomikate na naslednji in prejšnji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Urejevalno Pogovorno Okno', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Urejevalni Kontekstni Meni', | ||
26 | legend: 'Pritisnite ${contextMenu} ali APPLICATION KEY, da odprete kontekstni meni. Nato se premaknite na naslednjo možnost menija s tipko TAB ali PUŠČICA DOL. Premakniti se na prejšnjo možnost z SHIFT + TAB ali PUŠČICA GOR. Pritisnite SPACE ali ENTER za izbiro možnosti menija. Odprite podmeni trenutne možnosti menija s tipko SPACE ali ENTER ali DESNA PUŠČICA. Vrnite se na matični element menija s tipko ESC ali LEVA PUŠČICA. Zaprite kontekstni meni z ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Urejevalno Seznamsko Polje', | ||
31 | legend: 'Znotraj seznama, se premaknete na naslednji element seznama s tipko TAB ali PUŠČICO DOL. Z SHIFT+TAB ali PUŠČICO GOR se premaknete na prejšnji element seznama. Pritisnite tipko SPACE ali ENTER za izbiro elementa. Pritisnite tipko ESC, da zaprete seznam.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Urejevalna vrstica poti elementa', | ||
36 | legend: 'Pritisnite ${elementsPathFocus} za pomikanje po vrstici elementnih poti. S TAB ali DESNA PUŠČICA se premaknete na naslednji gumb elementa. Z SHIFT+TAB ali LEVO PUŠČICO se premaknete na prejšnji gumb elementa. Pritisnite SPACE ali ENTER za izbiro elementa v urejevalniku.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Ukazi', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Razveljavi ukaz', | ||
45 | legend: 'Pritisnite ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Ponovi ukaz', | ||
49 | legend: 'Pritisnite ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Krepki ukaz', | ||
53 | legend: 'Pritisnite ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Ležeči ukaz', | ||
57 | legend: 'Pritisnite ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Poudarni ukaz', | ||
61 | legend: 'Pritisnite ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Ukaz povezave', | ||
65 | legend: 'Pritisnite ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Skrči Orodno Vrstico Ukaz', | ||
69 | legend: 'Pritisnite ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Dostop do prejšnjega ukaza ostrenja', | ||
73 | legend: 'Pritisnite ${accessPreviousSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora pred strešico, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Dostop do naslednjega ukaza ostrenja', | ||
77 | legend: 'Pritisnite ${accessNextSpace} za dostop do najbližjega nedosegljivega osredotočenega prostora po strešici, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotočene prostore.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Pomoč Dostopnosti', | ||
81 | legend: 'Pritisnite ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Levo puščica', | ||
100 | upArrow: 'Gor puščica', | ||
101 | rightArrow: 'Desno puščica', | ||
102 | downArrow: 'Dol puščica', | ||
103 | insert: 'Insert', | ||
104 | 'delete': 'Delete', | ||
105 | leftWindowKey: 'Leva Windows tipka', | ||
106 | rightWindowKey: 'Desna Windows tipka', | ||
107 | selectKey: 'Select tipka', | ||
108 | numpad0: 'Numpad 0', | ||
109 | numpad1: 'Numpad 1', | ||
110 | numpad2: 'Numpad 2', | ||
111 | numpad3: 'Numpad 3', | ||
112 | numpad4: 'Numpad 4', | ||
113 | numpad5: 'Numpad 5', | ||
114 | numpad6: 'Numpad 6', | ||
115 | numpad7: 'Numpad 7', | ||
116 | numpad8: 'Numpad 8', | ||
117 | numpad9: 'Numpad 9', | ||
118 | multiply: 'Zmnoži', | ||
119 | add: 'Dodaj', | ||
120 | subtract: 'Odštej', | ||
121 | decimalPoint: 'Decimalna vejica', | ||
122 | divide: 'Deli', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Podpičje', | ||
138 | equalSign: 'enačaj', | ||
139 | comma: 'Vejica', | ||
140 | dash: 'Vezaj', | ||
141 | period: 'Pika', | ||
142 | forwardSlash: 'Desna poševnica', | ||
143 | graveAccent: 'Krativec', | ||
144 | openBracket: 'Oklepaj', | ||
145 | backSlash: 'Leva poševnica', | ||
146 | closeBracket: 'Oklepaj', | ||
147 | singleQuote: 'Opuščaj' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/sq.js b/sources/plugins/a11yhelp/dialogs/lang/sq.js new file mode 100644 index 0000000..c308122 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/sq.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'sq', { | ||
7 | title: 'Udhëzimet e Qasjes', | ||
8 | contents: 'Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Të përgjithshme', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Shiriti i Redaktuesit', | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Dialogu i Redaktuesit', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Komandat', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Rikthe komandën', | ||
45 | legend: 'Shtyp ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Ribëj komandën', | ||
49 | legend: 'Shtyp ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Komanda e trashjes së tekstit', | ||
53 | legend: 'Shtyp ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Komanda kursive', | ||
57 | legend: 'Shtyp ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Komanda e nënvijëzimit', | ||
61 | legend: 'Shtyp ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Komanda e Nyjes', | ||
65 | legend: 'Shtyp ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Shtyp ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: 'Ndihmë Qasjeje', | ||
81 | legend: 'Shtyp ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Prapa', | ||
87 | tab: 'Fletë', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Shenja majtas', | ||
100 | upArrow: 'Shenja sipër', | ||
101 | rightArrow: 'Shenja djathtas', | ||
102 | downArrow: 'Shenja poshtë', | ||
103 | insert: 'Shto', | ||
104 | 'delete': 'Grise', | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Shto', | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Semicolon', | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Presje', | ||
140 | dash: 'vizë', | ||
141 | period: 'Pikë', | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Hape kllapën', | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Mbylle kllapën', | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/sr-latn.js b/sources/plugins/a11yhelp/dialogs/lang/sr-latn.js new file mode 100644 index 0000000..b70e635 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/sr-latn.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'sr-latn', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', // MISSING | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Opšte', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', // MISSING | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', // MISSING | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/sr.js b/sources/plugins/a11yhelp/dialogs/lang/sr.js new file mode 100644 index 0000000..fb07f86 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/sr.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'sr', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', // MISSING | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Опште', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', // MISSING | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Commands', // MISSING | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' Undo command', // MISSING | ||
45 | legend: 'Press ${undo}' // MISSING | ||
46 | }, | ||
47 | { | ||
48 | name: ' Redo command', // MISSING | ||
49 | legend: 'Press ${redo}' // MISSING | ||
50 | }, | ||
51 | { | ||
52 | name: ' Bold command', // MISSING | ||
53 | legend: 'Press ${bold}' // MISSING | ||
54 | }, | ||
55 | { | ||
56 | name: ' Italic command', // MISSING | ||
57 | legend: 'Press ${italic}' // MISSING | ||
58 | }, | ||
59 | { | ||
60 | name: ' Underline command', // MISSING | ||
61 | legend: 'Press ${underline}' // MISSING | ||
62 | }, | ||
63 | { | ||
64 | name: ' Link command', // MISSING | ||
65 | legend: 'Press ${link}' // MISSING | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/sv.js b/sources/plugins/a11yhelp/dialogs/lang/sv.js new file mode 100644 index 0000000..4200c9f --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/sv.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'sv', { | ||
7 | title: 'Hjälpmedelsinstruktioner', | ||
8 | contents: 'Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Allmänt', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor verktygsfält', | ||
15 | legend: 'Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT+TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck SPACE eller ENTER för att aktivera knappen i verktygsfältet.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Dialogeditor', | ||
20 | legend: | ||
21 | 'Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan, tryck SKIFT+TAB för att flytta till föregående fält, tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT+F10 eller TAB för att navigera till fliklistan. med fliklistan vald flytta till nästa och föregående flik med HÖGER- eller VÄNSTERPIL.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor för innehållsmeny', | ||
26 | legend: 'Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor för list-box', | ||
31 | legend: 'Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT+TAB eller UPPIL. Tryck SPACE eller ENTER för att välja listan alternativet. Tryck ESC för att stänga list-boxen.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor för elementens sökväg', | ||
36 | legend: 'Tryck på ${elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT+TAB eller VÄNSTERPIL. Tryck SPACE eller ENTER för att välja element i redigeraren.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Kommandon', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Ångra kommando', | ||
45 | legend: 'Tryck på ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Gör om kommando', | ||
49 | legend: 'Tryck på ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Kommandot fet stil', | ||
53 | legend: 'Tryck på ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Kommandot kursiv', | ||
57 | legend: 'Tryck på ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Kommandot understruken', | ||
61 | legend: 'Tryck på ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Kommandot länk', | ||
65 | legend: 'Tryck på ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Verktygsfält Dölj kommandot', | ||
69 | legend: 'Tryck på ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Gå till föregående fokus plats', | ||
73 | legend: 'Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Tillgå nästa fokuskommandots utrymme', | ||
77 | legend: 'Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Hjälp om tillgänglighet', | ||
81 | legend: 'Tryck ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backsteg', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Retur', | ||
89 | shift: 'Skift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Paus', | ||
93 | capslock: 'Caps lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Sida Up', | ||
96 | pageDown: 'Sida Ned', | ||
97 | end: 'Slut', | ||
98 | home: 'Hem', | ||
99 | leftArrow: 'Vänsterpil', | ||
100 | upArrow: 'Uppil', | ||
101 | rightArrow: 'Högerpil', | ||
102 | downArrow: 'Nedåtpil', | ||
103 | insert: 'Infoga', | ||
104 | 'delete': 'Radera', | ||
105 | leftWindowKey: 'Vänster Windowstangent', | ||
106 | rightWindowKey: 'Höger Windowstangent', | ||
107 | selectKey: 'Välj tangent', | ||
108 | numpad0: 'Nummer 0', | ||
109 | numpad1: 'Nummer 1', | ||
110 | numpad2: 'Nummer 2', | ||
111 | numpad3: 'Nummer 3', | ||
112 | numpad4: 'Nummer 4', | ||
113 | numpad5: 'Nummer 5', | ||
114 | numpad6: 'Nummer 6', | ||
115 | numpad7: 'Nummer 7', | ||
116 | numpad8: 'Nummer 8', | ||
117 | numpad9: 'Nummer 9', | ||
118 | multiply: 'Multiplicera', | ||
119 | add: 'Addera', | ||
120 | subtract: 'Minus', | ||
121 | decimalPoint: 'Decimalpunkt', | ||
122 | divide: 'Dividera', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Semikolon', | ||
138 | equalSign: 'Lika med tecken', | ||
139 | comma: 'Komma', | ||
140 | dash: 'Minus', | ||
141 | period: 'Punkt', | ||
142 | forwardSlash: 'Snedstreck framåt', | ||
143 | graveAccent: 'Accent', | ||
144 | openBracket: 'Öppningsparentes', | ||
145 | backSlash: 'Snedstreck bakåt', | ||
146 | closeBracket: 'Slutparentes', | ||
147 | singleQuote: 'Enkelt Citattecken' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/th.js b/sources/plugins/a11yhelp/dialogs/lang/th.js new file mode 100644 index 0000000..00c96d1 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/th.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'th', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', // MISSING | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'ทั่วไป', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'แถบเครื่องมือสำหรับเครื่องมือช่วยพิมพ์', | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'คำสั่ง', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'เลิกทำคำสั่ง', | ||
45 | legend: 'วาง ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'คำสั่งสำหรับทำซ้ำ', | ||
49 | legend: 'วาง ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'คำสั่งสำหรับตัวหนา', | ||
53 | legend: 'วาง ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'คำสั่งสำหรับตัวเอียง', | ||
57 | legend: 'วาง ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'คำสั่งสำหรับขีดเส้นใต้', | ||
61 | legend: 'วาง ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'คำสั่งสำหรับลิงก์', | ||
65 | legend: 'วาง ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: 'Press ${toolbarCollapse}' // MISSING | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: 'Press ${a11yHelp}' // MISSING | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', // MISSING | ||
87 | tab: 'Tab', // MISSING | ||
88 | enter: 'Enter', // MISSING | ||
89 | shift: 'Shift', // MISSING | ||
90 | ctrl: 'Ctrl', // MISSING | ||
91 | alt: 'Alt', // MISSING | ||
92 | pause: 'Pause', // MISSING | ||
93 | capslock: 'Caps Lock', // MISSING | ||
94 | escape: 'Escape', // MISSING | ||
95 | pageUp: 'Page Up', // MISSING | ||
96 | pageDown: 'Page Down', // MISSING | ||
97 | end: 'End', // MISSING | ||
98 | home: 'Home', // MISSING | ||
99 | leftArrow: 'Left Arrow', // MISSING | ||
100 | upArrow: 'Up Arrow', // MISSING | ||
101 | rightArrow: 'Right Arrow', // MISSING | ||
102 | downArrow: 'Down Arrow', // MISSING | ||
103 | insert: 'Insert', // MISSING | ||
104 | 'delete': 'Delete', // MISSING | ||
105 | leftWindowKey: 'Left Windows key', // MISSING | ||
106 | rightWindowKey: 'Right Windows key', // MISSING | ||
107 | selectKey: 'Select key', // MISSING | ||
108 | numpad0: 'Numpad 0', // MISSING | ||
109 | numpad1: 'Numpad 1', // MISSING | ||
110 | numpad2: 'Numpad 2', // MISSING | ||
111 | numpad3: 'Numpad 3', // MISSING | ||
112 | numpad4: 'Numpad 4', // MISSING | ||
113 | numpad5: 'Numpad 5', // MISSING | ||
114 | numpad6: 'Numpad 6', // MISSING | ||
115 | numpad7: 'Numpad 7', // MISSING | ||
116 | numpad8: 'Numpad 8', // MISSING | ||
117 | numpad9: 'Numpad 9', // MISSING | ||
118 | multiply: 'Multiply', // MISSING | ||
119 | add: 'Add', // MISSING | ||
120 | subtract: 'Subtract', // MISSING | ||
121 | decimalPoint: 'Decimal Point', // MISSING | ||
122 | divide: 'Divide', // MISSING | ||
123 | f1: 'F1', // MISSING | ||
124 | f2: 'F2', // MISSING | ||
125 | f3: 'F3', // MISSING | ||
126 | f4: 'F4', // MISSING | ||
127 | f5: 'F5', // MISSING | ||
128 | f6: 'F6', // MISSING | ||
129 | f7: 'F7', // MISSING | ||
130 | f8: 'F8', // MISSING | ||
131 | f9: 'F9', // MISSING | ||
132 | f10: 'F10', // MISSING | ||
133 | f11: 'F11', // MISSING | ||
134 | f12: 'F12', // MISSING | ||
135 | numLock: 'Num Lock', // MISSING | ||
136 | scrollLock: 'Scroll Lock', // MISSING | ||
137 | semiColon: 'Semicolon', // MISSING | ||
138 | equalSign: 'Equal Sign', // MISSING | ||
139 | comma: 'Comma', // MISSING | ||
140 | dash: 'Dash', // MISSING | ||
141 | period: 'Period', // MISSING | ||
142 | forwardSlash: 'Forward Slash', // MISSING | ||
143 | graveAccent: 'Grave Accent', // MISSING | ||
144 | openBracket: 'Open Bracket', // MISSING | ||
145 | backSlash: 'Backslash', // MISSING | ||
146 | closeBracket: 'Close Bracket', // MISSING | ||
147 | singleQuote: 'Single Quote' // MISSING | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/tr.js b/sources/plugins/a11yhelp/dialogs/lang/tr.js new file mode 100644 index 0000000..425f21d --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/tr.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'tr', { | ||
7 | title: 'Erişilebilirlik Talimatları', | ||
8 | contents: 'Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Genel', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Düzenleyici Araç Çubuğu', | ||
15 | legend: 'Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT+TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Diyalog Düzenleyici', | ||
20 | legend: | ||
21 | 'Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'İçerik Menü Editörü', | ||
26 | legend: 'İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU\'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Liste Kutusu Editörü', | ||
31 | legend: 'Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT+TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Element Yol Çubuğu Editörü', | ||
36 | legend: 'Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT+TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Komutlar', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Komutu geri al', | ||
45 | legend: '$(undo)\'ya basın' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Komutu geri al', | ||
49 | legend: '${redo} basın' | ||
50 | }, | ||
51 | { | ||
52 | name: ' Kalın komut', | ||
53 | legend: '${bold} basın' | ||
54 | }, | ||
55 | { | ||
56 | name: ' İtalik komutu', | ||
57 | legend: '${italic} basın' | ||
58 | }, | ||
59 | { | ||
60 | name: ' Alttan çizgi komutu', | ||
61 | legend: '${underline} basın' | ||
62 | }, | ||
63 | { | ||
64 | name: ' Bağlantı komutu', | ||
65 | legend: '${link} basın' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Araç çubuğu Toplama komutu', | ||
69 | legend: '${toolbarCollapse} basın' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Önceki komut alanına odaklan', | ||
73 | legend: 'Düzeltme imleçinden önce, en yakın uzaktaki alana erişmek için ${accessPreviousSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Sonraki komut alanına odaklan', | ||
77 | legend: 'Düzeltme imleçinden sonra, en yakın uzaktaki alana erişmek için ${accessNextSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Erişilebilirlik Yardımı', | ||
81 | legend: '${a11yHelp}\'e basın' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Silme', | ||
87 | tab: 'Sekme tuşu', | ||
88 | enter: 'Gir tuşu', | ||
89 | shift: '"Shift" Kaydırma tuşu', | ||
90 | ctrl: '"Ctrl" Kontrol tuşu', | ||
91 | alt: '"Alt" Anahtar tuşu', | ||
92 | pause: 'Durdurma tuşu', | ||
93 | capslock: 'Büyük harf tuşu', | ||
94 | escape: 'Vazgeç tuşu', | ||
95 | pageUp: 'Sayfa Yukarı', | ||
96 | pageDown: 'Sayfa Aşağı', | ||
97 | end: 'Sona', | ||
98 | home: 'En başa', | ||
99 | leftArrow: 'Sol ok', | ||
100 | upArrow: 'Yukarı ok', | ||
101 | rightArrow: 'Sağ ok', | ||
102 | downArrow: 'Aşağı ok', | ||
103 | insert: 'Araya gir', | ||
104 | 'delete': 'Silme', | ||
105 | leftWindowKey: 'Sol windows tuşu', | ||
106 | rightWindowKey: 'Sağ windows tuşu', | ||
107 | selectKey: 'Seçme tuşu', | ||
108 | numpad0: 'Nümerik 0', | ||
109 | numpad1: 'Nümerik 1', | ||
110 | numpad2: 'Nümerik 2', | ||
111 | numpad3: 'Nümerik 3', | ||
112 | numpad4: 'Nümerik 4', | ||
113 | numpad5: 'Nümerik 5', | ||
114 | numpad6: 'Nümerik 6', | ||
115 | numpad7: 'Nümerik 7', | ||
116 | numpad8: 'Nümerik 8', | ||
117 | numpad9: 'Nümerik 9', | ||
118 | multiply: 'Çarpma', | ||
119 | add: 'Toplama', | ||
120 | subtract: 'Çıkarma', | ||
121 | decimalPoint: 'Ondalık işareti', | ||
122 | divide: 'Bölme', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lk', | ||
136 | scrollLock: 'Scr Lk', | ||
137 | semiColon: 'Noktalı virgül', | ||
138 | equalSign: 'Eşittir', | ||
139 | comma: 'Virgül', | ||
140 | dash: 'Eksi', | ||
141 | period: 'Nokta', | ||
142 | forwardSlash: 'İleri eğik çizgi', | ||
143 | graveAccent: 'Üst tırnak', | ||
144 | openBracket: 'Parantez aç', | ||
145 | backSlash: 'Ters eğik çizgi', | ||
146 | closeBracket: 'Parantez kapa', | ||
147 | singleQuote: 'Tek tırnak' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/tt.js b/sources/plugins/a11yhelp/dialogs/lang/tt.js new file mode 100644 index 0000000..1ce78fa --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/tt.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'tt', { | ||
7 | title: 'Accessibility Instructions', // MISSING | ||
8 | contents: 'Help Contents. To close this dialog press ESC.', // MISSING | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Гомуми', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Editor Toolbar', // MISSING | ||
15 | legend: 'Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT+TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button.' // MISSING | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Editor Dialog', // MISSING | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Editor Context Menu', // MISSING | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC.' // MISSING | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Editor List Box', // MISSING | ||
31 | legend: 'Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box.' // MISSING | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Editor Element Path Bar', // MISSING | ||
36 | legend: 'Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor.' // MISSING | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Командалар', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Кайтару', | ||
45 | legend: '${undo} басыгыз' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Кабатлау', | ||
49 | legend: '${redo} басыгыз' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Калын', | ||
53 | legend: '${bold} басыгыз' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Курсив', | ||
57 | legend: '${italic} басыгыз' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Астына сызылган', | ||
61 | legend: '${underline} басыгыз' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Сылталама', | ||
65 | legend: '${link} басыгыз' | ||
66 | }, | ||
67 | { | ||
68 | name: ' Toolbar Collapse command', // MISSING | ||
69 | legend: '${toolbarCollapse} басыгыз' | ||
70 | }, | ||
71 | { | ||
72 | name: ' Access previous focus space command', // MISSING | ||
73 | legend: 'Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
74 | }, | ||
75 | { | ||
76 | name: ' Access next focus space command', // MISSING | ||
77 | legend: 'Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces.' // MISSING | ||
78 | }, | ||
79 | { | ||
80 | name: ' Accessibility Help', // MISSING | ||
81 | legend: '${a11yHelp} басыгыз' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Кайтару', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Тыныш', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Сул якка ук', | ||
100 | upArrow: 'Өскә таба ук', | ||
101 | rightArrow: 'Уң якка ук', | ||
102 | downArrow: 'Аска таба ук', | ||
103 | insert: 'Өстәү', | ||
104 | 'delete': 'Бетерү', | ||
105 | leftWindowKey: 'Сул Windows төймəсе', | ||
106 | rightWindowKey: 'Уң Windows төймəсе', | ||
107 | selectKey: 'Select төймəсе', | ||
108 | numpad0: 'Numpad 0', | ||
109 | numpad1: 'Numpad 1', | ||
110 | numpad2: 'Numpad 2', | ||
111 | numpad3: 'Numpad 3', | ||
112 | numpad4: 'Numpad 4', | ||
113 | numpad5: 'Numpad 5', | ||
114 | numpad6: 'Numpad 6', | ||
115 | numpad7: 'Numpad 7', | ||
116 | numpad8: 'Numpad 8', | ||
117 | numpad9: 'Numpad 9', | ||
118 | multiply: 'Тапкырлау', | ||
119 | add: 'Кушу', | ||
120 | subtract: 'Алу', | ||
121 | decimalPoint: 'Унарлы нокта', | ||
122 | divide: 'Бүлү', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Нокталы өтер', | ||
138 | equalSign: 'Тигезлек билгесе', | ||
139 | comma: 'Өтер', | ||
140 | dash: 'Сызык', | ||
141 | period: 'Дәрәҗә', | ||
142 | forwardSlash: 'Кыек сызык', | ||
143 | graveAccent: 'Гравис', | ||
144 | openBracket: 'Җәя ачу', | ||
145 | backSlash: 'Кире кыек сызык', | ||
146 | closeBracket: 'Җәя ябу', | ||
147 | singleQuote: 'Бер иңле куштырнаклар' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/ug.js b/sources/plugins/a11yhelp/dialogs/lang/ug.js new file mode 100644 index 0000000..0dd4d25 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/ug.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'ug', { | ||
7 | title: 'قوشۇمچە چۈشەندۈرۈش', | ||
8 | contents: 'ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'ئادەتتىكى', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'قورال بالداق تەھرىر', | ||
15 | legend: '${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'تەھرىرلىگۈچ سۆزلەشكۈسى', | ||
20 | legend: | ||
21 | 'سۆزلەشكۈدە TAB كۇنۇپكىسىدا كېيىنكى سۆز بۆلىكىگە يۆتكىلىدۇ، SHIFT+TAB بىرىكمە كۇنۇپكىسىدا ئالدىنقى سۆز بۆلىكىگە يۆتكىلىدۇ، ENTER كۇنۇپكىسىدا سۆزلەشكۈنى تاپشۇرىدۇ، ESC كۇنۇپكىسى سۆزلەشكۈدىن ۋاز كېچىدۇ. كۆپ بەتكۈچلۈك سۆزلەشكۈگە نىسبەتەن، ALT+F10 دا بەتكۈچ تىزىمىغا يۆتكەيدۇ. ئاندىن TAB كۇنۇپكىسى ياكى ئوڭ يا ئوق كۇنۇپكىسى كېيىنكى بەتكۈچكە يۆتكەيدۇ؛SHIFT+ TAB كۇنۇپكىسى ياكى سول يا ئوق كۇنۇپكىسى ئالدىنقى بەتكۈچكە يۆتكەيدۇ. بوشلۇق كۇنۇپكىسى ياكى ENTER كۇنۇپكىسى بەتكۈچنى تاللايدۇ.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى', | ||
26 | legend: '${contextMenu} ياكى ئەپ كۇنۇپكىسىدا تىل مۇھىت تىزىملىكىنى ئاچىدۇ. ئاندىن TAB ياكى ئاستى يا ئوق كۇنۇپكىسىدا كېيىنكى تىزىملىك تۈرىگە يۆتكەيدۇ؛ SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسىدا ئالدىنقى تىزىملىك تۈرىگە يۆتكەيدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىملىك تۈرىنى تاللايدۇ. بوشلۇق، ENTER ياكى ئوڭ يا ئوق كۇنۇپكىسىدا تارماق تىزىملىكنى ئاچىدۇ. قايتىش تىزىملىكىگە ESC ياكى سول يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ESC كۇنۇپكىسىدا تىل مۇھىت تىزىملىكى تاقىلىدۇ.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'تەھرىرلىگۈچ تىزىمى', | ||
31 | legend: 'تىزىم قۇتىسىدا، كېيىنكى تىزىم تۈرىگە يۆتكەشتە TAB ياكى ئاستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ئالدىنقى تىزىم تۈرىگە يۆتكەشتە SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىم تۈرىنى تاللايدۇ.ESC كۇنۇپكىسىدا تىزىم قۇتىسىنى يىغىدۇ.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'تەھرىرلىگۈچ ئېلېمېنت يول بالداق', | ||
36 | legend: '${elementsPathFocus} بېسىلسا ئېلېمېنت يول بالداققا يېتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا كېيىنكى ئېلېمېنت تاللىنىدۇ، SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئېلېمېنت تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئېلېمېنت تاللىنىدۇ.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'بۇيرۇق', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'بۇيرۇقتىن يېنىۋال', | ||
45 | legend: '${undo} نى بېسىڭ' | ||
46 | }, | ||
47 | { | ||
48 | name: 'قايتىلاش بۇيرۇقى', | ||
49 | legend: '${redo} نى بېسىڭ' | ||
50 | }, | ||
51 | { | ||
52 | name: 'توملىتىش بۇيرۇقى', | ||
53 | legend: '${bold} نى بېسىڭ' | ||
54 | }, | ||
55 | { | ||
56 | name: 'يانتۇ بۇيرۇقى', | ||
57 | legend: '${italic} نى بېسىڭ' | ||
58 | }, | ||
59 | { | ||
60 | name: 'ئاستى سىزىق بۇيرۇقى', | ||
61 | legend: '${underline} نى بېسىڭ' | ||
62 | }, | ||
63 | { | ||
64 | name: 'ئۇلانما بۇيرۇقى', | ||
65 | legend: '${link} نى بېسىڭ' | ||
66 | }, | ||
67 | { | ||
68 | name: 'قورال بالداق قاتلاش بۇيرۇقى', | ||
69 | legend: '${toolbarCollapse} نى بېسىڭ' | ||
70 | }, | ||
71 | { | ||
72 | name: 'ئالدىنقى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق', | ||
73 | legend: '${accessPreviousSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ ئالدىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'كېيىنكى فوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق', | ||
77 | legend: '${accessNextSpace} بېسىپ ^ بەلگىسىگە ئەڭ يېقىن زىيارەت قىلغىلى بولمايدىغان فوكۇس نۇقتا رايونىنىڭ كەينىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئېلېمېنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى فوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'توسالغۇسىز لايىھە چۈشەندۈرۈشى', | ||
81 | legend: '${a11yHelp} نى بېسىڭ' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Escape', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'سول يا ئوق', | ||
100 | upArrow: 'ئۈستى يا ئوق', | ||
101 | rightArrow: 'ئوڭ يا ئوق', | ||
102 | downArrow: 'ئاستى يا ئوق', | ||
103 | insert: 'قىستۇر', | ||
104 | 'delete': 'ئۆچۈر', | ||
105 | leftWindowKey: 'سول Windows كۇنۇپكىسى', | ||
106 | rightWindowKey: 'ئوڭ Windows كۇنۇپكىسى', | ||
107 | selectKey: 'تاللاش كۇنۇپكىسى', | ||
108 | numpad0: 'سان تاختا 0', | ||
109 | numpad1: 'سان تاختا 1', | ||
110 | numpad2: 'سان تاختا 2', | ||
111 | numpad3: 'سان تاختا 3', | ||
112 | numpad4: 'سان تاختا 4', | ||
113 | numpad5: 'سان تاختا 5', | ||
114 | numpad6: 'سان تاختا 6', | ||
115 | numpad7: 'سان تاختا 7', | ||
116 | numpad8: 'سان تاختا 8', | ||
117 | numpad9: 'سان تاختا 9', | ||
118 | multiply: 'يۇلتۇز كۇنۇپكىسى', | ||
119 | add: 'قوشۇش', | ||
120 | subtract: 'ئېلىش', | ||
121 | decimalPoint: 'كەسىر چېكىت', | ||
122 | divide: 'بۆلۈش', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'سان قۇلۇپ كۇنۇپكىسى', | ||
136 | scrollLock: 'سۈرگۈچ قۇلۇپ كۇنۇپكىسى', | ||
137 | semiColon: 'چېكىتلىك پەش', | ||
138 | equalSign: 'تەڭلىك بەلگىسى', | ||
139 | comma: 'پەش', | ||
140 | dash: 'سىزىقچە', | ||
141 | period: 'چېكىت', | ||
142 | forwardSlash: 'سولغا يانتۇ سىزىق', | ||
143 | graveAccent: 'ئۇرغۇ بەلگىسى', | ||
144 | openBracket: 'ئېچىلغان تىرناق', | ||
145 | backSlash: 'ئوڭغا يانتۇ سىزىق', | ||
146 | closeBracket: 'يېپىلغان تىرناق', | ||
147 | singleQuote: 'يالاڭ پەش' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/uk.js b/sources/plugins/a11yhelp/dialogs/lang/uk.js new file mode 100644 index 0000000..ce5ff60 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/uk.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'uk', { | ||
7 | title: 'Спеціальні Інструкції', | ||
8 | contents: 'Довідка. Натисніть ESC і вона зникне.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Основне', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Панель Редактора', | ||
15 | legend: 'Натисніть ${toolbarFocus} для переходу до панелі інструментів. Для переміщення між групами панелі інструментів використовуйте TAB і SHIFT+TAB. Для переміщення між кнопками панелі іструментів використовуйте кнопки СТРІЛКА ВПРАВО або ВЛІВО. Натисніть ПРОПУСК або ENTER для запуску кнопки панелі інструментів.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Діалог Редактора', | ||
20 | legend: | ||
21 | 'Усередині діалогу, натисніть TAB щоб перейти до наступного елементу діалогу, натисніть SHIFT+TAB щоб перейти до попереднього елемента діалогу, натисніть ENTER щоб відправити діалог, натисніть ESC щоб скасувати діалог. Коли діалогове вікно має декілька вкладок, отримати доступ до панелі вкладок як частині діалогу можна натисканням або поєднання ALT+F10 або TAB, при цьому активні елементи діалогу будуть перебиратися з урахуванням порядку табуляції. При активній панелі вкладок, перехід до наступної або попередньої вкладці здійснюється натисканням стрілки "ВПРАВО" або стрілки "ВЛЕВО" відповідно.' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Контекстне Меню Редактора', | ||
26 | legend: 'Press ${contextMenu} or APPLICATION KEY to open context-menu. Потім перейдіть до наступного пункту меню за допомогою TAB або СТРІЛКИ ВНИЗ. Натисніть ПРОПУСК або ENTER для вибору параметру меню. Відкрийте підменю поточного параметру, натиснувши ПРОПУСК або ENTER або СТРІЛКУ ВПРАВО. Перейдіть до батьківського елемента меню, натиснувши ESC або СТРІЛКУ ВЛІВО. Закрийте контекстне меню, натиснувши ESC.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Скринька Списків Редактора', | ||
31 | legend: 'Усередині списку, перехід до наступного пункту списку виконується клавішею TAB або СТРІЛКА ВНИЗ. Перехід до попереднього елемента списку клавішею SHIFT+TAB або СТРІЛКА ВГОРУ. Натисніть ПРОПУСК або ENTER, щоб вибрати параметр списку. Натисніть клавішу ESC, щоб закрити список.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Шлях до елемента редактора', | ||
36 | legend: 'Натисніть ${elementsPathFocus} для навігації між елементами панелі. Перейдіть до наступного елемента кнопкою TAB або СТРІЛКА ВПРАВО. Перейдіть до попереднього елемента кнопкою SHIFT+TAB або СТРІЛКА ВЛІВО. Натисніть ПРОПУСК або ENTER для вибору елемента в редакторі.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Команди', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Відмінити команду', | ||
45 | legend: 'Натисніть ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Повторити', | ||
49 | legend: 'Натисніть ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Жирний', | ||
53 | legend: 'Натисніть ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Курсив', | ||
57 | legend: 'Натисніть ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Підкреслений', | ||
61 | legend: 'Натисніть ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Посилання', | ||
65 | legend: 'Натисніть ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Згорнути панель інструментів', | ||
69 | legend: 'Натисніть ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Доступ до попереднього місця фокусування', | ||
73 | legend: 'Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування перед кареткою, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Доступ до наступного місця фокусування', | ||
77 | legend: 'Натисніть ${accessNextSpace} для доступу до найближчої недосяжної області фокусування після каретки, наприклад: два сусідні елементи HR. Повторіть комбінацію клавіш для досягнення віддалених областей фокусування.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Допомога з доступності', | ||
81 | legend: 'Натисніть ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Backspace', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Esc', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: 'Ліва стрілка', | ||
100 | upArrow: 'Стрілка вгору', | ||
101 | rightArrow: 'Права стрілка', | ||
102 | downArrow: 'Стрілка вниз', | ||
103 | insert: 'Вставити', | ||
104 | 'delete': 'Видалити', | ||
105 | leftWindowKey: 'Ліва клавіша Windows', | ||
106 | rightWindowKey: 'Права клавіша Windows', | ||
107 | selectKey: 'Виберіть клавішу', | ||
108 | numpad0: 'Numpad 0', | ||
109 | numpad1: 'Numpad 1', | ||
110 | numpad2: 'Numpad 2', | ||
111 | numpad3: 'Numpad 3', | ||
112 | numpad4: 'Numpad 4', | ||
113 | numpad5: 'Numpad 5', | ||
114 | numpad6: 'Numpad 6', | ||
115 | numpad7: 'Numpad 7', | ||
116 | numpad8: 'Numpad 8', | ||
117 | numpad9: 'Numpad 9', | ||
118 | multiply: 'Множення', | ||
119 | add: 'Додати', | ||
120 | subtract: 'Віднімання', | ||
121 | decimalPoint: 'Десяткова кома', | ||
122 | divide: 'Ділення', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Крапка з комою', | ||
138 | equalSign: 'Знак рівності', | ||
139 | comma: 'Кома', | ||
140 | dash: 'Тире', | ||
141 | period: 'Період', | ||
142 | forwardSlash: 'Коса риска', | ||
143 | graveAccent: 'Гравіс', | ||
144 | openBracket: 'Відкрити дужку', | ||
145 | backSlash: 'Зворотна коса риска', | ||
146 | closeBracket: 'Закрити дужку', | ||
147 | singleQuote: 'Одинарні лапки' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/vi.js b/sources/plugins/a11yhelp/dialogs/lang/vi.js new file mode 100644 index 0000000..c985471 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/vi.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'vi', { | ||
7 | title: 'Hướng dẫn trợ năng', | ||
8 | contents: 'Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: 'Chung', | ||
12 | items: [ | ||
13 | { | ||
14 | name: 'Thanh công cụ soạn thảo', | ||
15 | legend: 'Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT+TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công cụ.' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: 'Hộp thoại Biên t', | ||
20 | legend: | ||
21 | 'Inside a dialog, press TAB to navigate to the next dialog element, press SHIFT+TAB to move to the previous dialog element, press ENTER to submit the dialog, press ESC to cancel the dialog. When a dialog has multiple tabs, the tab list can be reached either with ALT+F10 or with TAB as part of the dialog tabbing order. With tab list focused, move to the next and previous tab with RIGHT and LEFT ARROW, respectively.' // MISSING | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: 'Trình đơn Ngữ cảnh cBộ soạn thảo', | ||
26 | legend: 'Nhấn ${contextMenu} hoặc PHÍM ỨNG DỤNG để mở thực đơn ngữ cảnh. Sau đó nhấn TAB hoặc MŨI TÊN XUỐNG để di chuyển đến tuỳ chọn tiếp theo của thực đơn. Nhấn SHIFT+TAB hoặc MŨI TÊN LÊN để quay lại tuỳ chọn trước. Nhấn DẤU CÁCH hoặc ENTER để chọn tuỳ chọn của thực đơn. Nhấn DẤU CÁCH hoặc ENTER hoặc MŨI TÊN SANG PHẢI để mở thực đơn con của tuỳ chọn hiện tại. Nhấn ESC hoặc MŨI TÊN SANG TRÁI để quay trở lại thực đơn gốc. Nhấn ESC để đóng thực đơn ngữ cảnh.' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: 'Hộp danh sách trình biên tập', | ||
31 | legend: 'Trong một danh sách chọn, di chuyển đối tượng tiếp theo với phím TAB hoặc phím mũi tên hướng xuống. Di chuyển đến đối tượng trước đó bằng cách nhấn tổ hợp phím SHIFT+TAB hoặc mũi tên hướng lên. Phím khoảng cách hoặc phím ENTER để chọn các tùy chọn trong danh sách. Nhấn phím ESC để đóng lại danh sách chọn.' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: 'Thanh đường dẫn các đối tượng', | ||
36 | legend: 'Nhấn ${elementsPathFocus} để điều hướng các đối tượng trong thanh đường dẫn. Di chuyển đến đối tượng tiếp theo bằng phím TAB hoặc phím mũi tên bên phải. Di chuyển đến đối tượng trước đó bằng tổ hợp phím SHIFT+TAB hoặc phím mũi tên bên trái. Nhấn phím khoảng cách hoặc ENTER để chọn đối tượng trong trình soạn thảo.' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: 'Lệnh', | ||
42 | items: [ | ||
43 | { | ||
44 | name: 'Làm lại lện', | ||
45 | legend: 'Ấn ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: 'Làm lại lệnh', | ||
49 | legend: 'Ấn ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: 'Lệnh in đậm', | ||
53 | legend: 'Ấn ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: 'Lệnh in nghiêng', | ||
57 | legend: 'Ấn ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: 'Lệnh gạch dưới', | ||
61 | legend: 'Ấn ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: 'Lệnh liên kết', | ||
65 | legend: 'Nhấn ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: 'Lệnh hiển thị thanh công cụ', | ||
69 | legend: 'Nhấn${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: 'Truy cập đến lệnh tập trung vào khoảng cách trước đó', | ||
73 | legend: 'Ấn ${accessPreviousSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách.' | ||
74 | }, | ||
75 | { | ||
76 | name: 'Truy cập phần đối tượng lệnh khoảng trống', | ||
77 | legend: 'Ấn ${accessNextSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác động đến được , thí dụ: hai yếu tố điều chỉnh HR. Lặp lại các phím kết họep này để vươn đến phần khoảng cách.' | ||
78 | }, | ||
79 | { | ||
80 | name: 'Trợ giúp liên quan', | ||
81 | legend: 'Nhấn ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: 'Phím Backspace', | ||
87 | tab: 'Phím Tab', | ||
88 | enter: 'Phím Tab', | ||
89 | shift: 'Phím Shift', | ||
90 | ctrl: 'Phím Ctrl', | ||
91 | alt: 'Phím Alt', | ||
92 | pause: 'Phím Pause', | ||
93 | capslock: 'Phím Caps Lock', | ||
94 | escape: 'Phím Escape', | ||
95 | pageUp: 'Phím Page Up', | ||
96 | pageDown: 'Phím Page Down', | ||
97 | end: 'Phím End', | ||
98 | home: 'Phím Home', | ||
99 | leftArrow: 'Phím Left Arrow', | ||
100 | upArrow: 'Phím Up Arrow', | ||
101 | rightArrow: 'Phím Right Arrow', | ||
102 | downArrow: 'Phím Down Arrow', | ||
103 | insert: 'Chèn', | ||
104 | 'delete': 'Xóa', | ||
105 | leftWindowKey: 'Phím Left Windows', | ||
106 | rightWindowKey: 'Phím Right Windows ', | ||
107 | selectKey: 'Chọn phím', | ||
108 | numpad0: 'Phím 0', | ||
109 | numpad1: 'Phím 1', | ||
110 | numpad2: 'Phím 2', | ||
111 | numpad3: 'Phím 3', | ||
112 | numpad4: 'Phím 4', | ||
113 | numpad5: 'Phím 5', | ||
114 | numpad6: 'Phím 6', | ||
115 | numpad7: 'Phím 7', | ||
116 | numpad8: 'Phím 8', | ||
117 | numpad9: 'Phím 9', | ||
118 | multiply: 'Nhân', | ||
119 | add: 'Thêm', | ||
120 | subtract: 'Trừ', | ||
121 | decimalPoint: 'Điểm số thập phân', | ||
122 | divide: 'Chia', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: 'Dấu chấm phẩy', | ||
138 | equalSign: 'Đăng nhập bằng', | ||
139 | comma: 'Dấu phẩy', | ||
140 | dash: 'Dấu gạch ngang', | ||
141 | period: 'Phím .', | ||
142 | forwardSlash: 'Phím /', | ||
143 | graveAccent: 'Phím `', | ||
144 | openBracket: 'Open Bracket', | ||
145 | backSlash: 'Dấu gạch chéo ngược', | ||
146 | closeBracket: 'Gần giá đỡ', | ||
147 | singleQuote: 'Trích dẫn' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/zh-cn.js b/sources/plugins/a11yhelp/dialogs/lang/zh-cn.js new file mode 100644 index 0000000..553f56c --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/zh-cn.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'zh-cn', { | ||
7 | title: '辅助功能说明', | ||
8 | contents: '帮助内容。要关闭此对话框请按 ESC 键。', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: '常规', | ||
12 | items: [ | ||
13 | { | ||
14 | name: '编辑器工具栏', | ||
15 | legend: '按 ${toolbarFocus} 切换到工具栏,使用 TAB 键和 SHIFT+TAB 组合键移动到上一个和下一个工具栏组。使用左右箭头键移动到上一个或下一个工具栏按钮。按空格键或回车键以选中工具栏按钮。' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: '编辑器对话框', | ||
20 | legend: | ||
21 | '在对话框内,按 TAB 键移动到下一个字段,按 SHIFT + TAB 组合键移动到上一个字段,按 ENTER 键提交对话框,按 ESC 键取消对话框。对于有多选项卡的对话框,可以按 ALT + F10 直接切换到或者按 TAB 键逐步移到选项卡列表,当焦点移到选项卡列表时可以用左右箭头键来移动到前后的选项卡。' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: '编辑器上下文菜单', | ||
26 | legend: '用 ${contextMenu} 或者“应用程序键”打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项;SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键,ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: '编辑器列表框', | ||
31 | legend: '在列表框中,移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT+TAB 组合键或者上箭头键,用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: '编辑器元素路径栏', | ||
36 | legend: '按 ${elementsPathFocus} 以导航到元素路径栏,使用 TAB 键或右箭头键选择下一个元素,使用 SHIFT+TAB 组合键或左箭头键选择上一个元素,按空格键或回车键以选定编辑器里的元素。' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: '命令', | ||
42 | items: [ | ||
43 | { | ||
44 | name: ' 撤消命令', | ||
45 | legend: '按 ${undo}' | ||
46 | }, | ||
47 | { | ||
48 | name: ' 重做命令', | ||
49 | legend: '按 ${redo}' | ||
50 | }, | ||
51 | { | ||
52 | name: ' 加粗命令', | ||
53 | legend: '按 ${bold}' | ||
54 | }, | ||
55 | { | ||
56 | name: ' 倾斜命令', | ||
57 | legend: '按 ${italic}' | ||
58 | }, | ||
59 | { | ||
60 | name: ' 下划线命令', | ||
61 | legend: '按 ${underline}' | ||
62 | }, | ||
63 | { | ||
64 | name: ' 链接命令', | ||
65 | legend: '按 ${link}' | ||
66 | }, | ||
67 | { | ||
68 | name: ' 工具栏折叠命令', | ||
69 | legend: '按 ${toolbarCollapse}' | ||
70 | }, | ||
71 | { | ||
72 | name: '访问前一个焦点区域的命令', | ||
73 | legend: '按 ${accessPreviousSpace} 访问^符号前最近的不可访问的焦点区域,例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。' | ||
74 | }, | ||
75 | { | ||
76 | name: '访问下一个焦点区域命令', | ||
77 | legend: '按 ${accessNextSpace} 以访问^符号后最近的不可访问的焦点区域。例如:两个相邻的 HR 元素。重复此组合按键可以到达远处的焦点区域。' | ||
78 | }, | ||
79 | { | ||
80 | name: '辅助功能帮助', | ||
81 | legend: '按 ${a11yHelp}' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: '退格键', | ||
87 | tab: 'Tab 键', | ||
88 | enter: '回车键', | ||
89 | shift: 'Shift 键', | ||
90 | ctrl: 'Ctrl 键', | ||
91 | alt: 'Alt 键', | ||
92 | pause: '暂停键', | ||
93 | capslock: '大写锁定键', | ||
94 | escape: 'Esc 键', | ||
95 | pageUp: '上翻页键', | ||
96 | pageDown: '下翻页键', | ||
97 | end: '行尾键', | ||
98 | home: '行首键', | ||
99 | leftArrow: '向左箭头键', | ||
100 | upArrow: '向上箭头键', | ||
101 | rightArrow: '向右箭头键', | ||
102 | downArrow: '向下箭头键', | ||
103 | insert: '插入键', | ||
104 | 'delete': '删除键', | ||
105 | leftWindowKey: '左 WIN 键', | ||
106 | rightWindowKey: '右 WIN 键', | ||
107 | selectKey: '选择键', | ||
108 | numpad0: '小键盘 0 键', | ||
109 | numpad1: '小键盘 1 键', | ||
110 | numpad2: '小键盘 2 键', | ||
111 | numpad3: '小键盘 3 键', | ||
112 | numpad4: '小键盘 4 键', | ||
113 | numpad5: '小键盘 5 键', | ||
114 | numpad6: '小键盘 6 键', | ||
115 | numpad7: '小键盘 7 键', | ||
116 | numpad8: '小键盘 8 键', | ||
117 | numpad9: '小键盘 9 键', | ||
118 | multiply: '星号键', | ||
119 | add: '加号键', | ||
120 | subtract: '减号键', | ||
121 | decimalPoint: '小数点键', | ||
122 | divide: '除号键', | ||
123 | f1: 'F1 键', | ||
124 | f2: 'F2 键', | ||
125 | f3: 'F3 键', | ||
126 | f4: 'F4 键', | ||
127 | f5: 'F5 键', | ||
128 | f6: 'F6 键', | ||
129 | f7: 'F7 键', | ||
130 | f8: 'F8 键', | ||
131 | f9: 'F9 键', | ||
132 | f10: 'F10 键', | ||
133 | f11: 'F11 键', | ||
134 | f12: 'F12 键', | ||
135 | numLock: '数字锁定键', | ||
136 | scrollLock: '滚动锁定键', | ||
137 | semiColon: '分号键', | ||
138 | equalSign: '等号键', | ||
139 | comma: '逗号键', | ||
140 | dash: '短划线键', | ||
141 | period: '句号键', | ||
142 | forwardSlash: '斜杠键', | ||
143 | graveAccent: '重音符键', | ||
144 | openBracket: '左中括号键', | ||
145 | backSlash: '反斜杠键', | ||
146 | closeBracket: '右中括号键', | ||
147 | singleQuote: '单引号键' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/dialogs/lang/zh.js b/sources/plugins/a11yhelp/dialogs/lang/zh.js new file mode 100644 index 0000000..69b61d9 --- /dev/null +++ b/sources/plugins/a11yhelp/dialogs/lang/zh.js | |||
@@ -0,0 +1,148 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'a11yhelp', 'zh', { | ||
7 | title: '輔助工具指南', | ||
8 | contents: '說明內容。若要關閉此對話框請按「ESC」。', | ||
9 | legend: [ | ||
10 | { | ||
11 | name: '一般', | ||
12 | items: [ | ||
13 | { | ||
14 | name: '編輯器工具列', | ||
15 | legend: '請按 ${toolbarFocus} 以導覽到工具列。利用 TAB 或 SHIFT+TAB 以便移動到下一個及前一個工具列群組。利用右方向鍵或左方向鍵以便移動到下一個及上一個工具列按鈕。按下空白鍵或 ENTER 鍵啟用工具列按鈕。' | ||
16 | }, | ||
17 | |||
18 | { | ||
19 | name: '編輯器對話方塊', | ||
20 | legend: | ||
21 | '在對話框中,按下 TAB 鍵以導覽到下一個對話框元素,按下 SHIFT+TAB 以移動到上一個對話框元素,按下 ENTER 以遞交對話框,按下 ESC 以取消對話框。當對話框有多個分頁時,可以使用 ALT+F10 或是在對話框分頁順序中的一部份按下 TAB 以使用分頁列表。焦點在分頁列表上時,分別使用右方向鍵及左方向鍵移動到下一個及上一個分頁。' | ||
22 | }, | ||
23 | |||
24 | { | ||
25 | name: '編輯器內容功能表', | ||
26 | legend: '請按下「${contextMenu}」或是「應用程式鍵」以開啟內容選單。以「TAB」或是「↓」鍵移動到下一個選單選項。以「SHIFT + TAB」或是「↑」鍵移動到上一個選單選項。按下「空白鍵」或是「ENTER」鍵以選取選單選項。以「空白鍵」或「ENTER」或「→」開啟目前選項之子選單。以「ESC」或「←」回到父選單。以「ESC」鍵關閉內容選單」。' | ||
27 | }, | ||
28 | |||
29 | { | ||
30 | name: '編輯器清單方塊', | ||
31 | legend: '在清單方塊中,使用 TAB 或下方向鍵移動到下一個列表項目。使用 SHIFT+TAB 或上方向鍵移動到上一個列表項目。按下空白鍵或 ENTER 以選取列表選項。按下 ESC 以關閉清單方塊。' | ||
32 | }, | ||
33 | |||
34 | { | ||
35 | name: '編輯器元件路徑工具列', | ||
36 | legend: '請按 ${elementsPathFocus} 以瀏覽元素路徑列。利用 TAB 或右方向鍵以便移動到下一個元素按鈕。利用 SHIFT 或左方向鍵以便移動到上一個按鈕。按下空白鍵或 ENTER 鍵來選取在編輯器中的元素。' | ||
37 | } | ||
38 | ] | ||
39 | }, | ||
40 | { | ||
41 | name: '命令', | ||
42 | items: [ | ||
43 | { | ||
44 | name: '復原命令', | ||
45 | legend: '請按下「${undo}」' | ||
46 | }, | ||
47 | { | ||
48 | name: '重複命令', | ||
49 | legend: '請按下「 ${redo}」' | ||
50 | }, | ||
51 | { | ||
52 | name: '粗體命令', | ||
53 | legend: '請按下「${bold}」' | ||
54 | }, | ||
55 | { | ||
56 | name: '斜體', | ||
57 | legend: '請按下「${italic}」' | ||
58 | }, | ||
59 | { | ||
60 | name: '底線命令', | ||
61 | legend: '請按下「${underline}」' | ||
62 | }, | ||
63 | { | ||
64 | name: '連結', | ||
65 | legend: '請按下「${link}」' | ||
66 | }, | ||
67 | { | ||
68 | name: '隱藏工具列', | ||
69 | legend: '請按下「${toolbarCollapse}」' | ||
70 | }, | ||
71 | { | ||
72 | name: '存取前一個焦點空間命令', | ||
73 | legend: '請按下 ${accessPreviousSpace} 以存取最近但無法靠近之插字符號前的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。' | ||
74 | }, | ||
75 | { | ||
76 | name: '存取下一個焦點空間命令', | ||
77 | legend: '請按下 ${accessNextSpace} 以存取最近但無法靠近之插字符號後的焦點空間。舉例:二個相鄰的 HR 元素。\r\n重複按鍵以存取較遠的焦點空間。' | ||
78 | }, | ||
79 | { | ||
80 | name: '協助工具說明', | ||
81 | legend: '請按下「${a11yHelp}」' | ||
82 | } | ||
83 | ] | ||
84 | } | ||
85 | ], | ||
86 | backspace: '退格鍵', | ||
87 | tab: 'Tab', | ||
88 | enter: 'Enter', | ||
89 | shift: 'Shift', | ||
90 | ctrl: 'Ctrl', | ||
91 | alt: 'Alt', | ||
92 | pause: 'Pause', | ||
93 | capslock: 'Caps Lock', | ||
94 | escape: 'Esc', | ||
95 | pageUp: 'Page Up', | ||
96 | pageDown: 'Page Down', | ||
97 | end: 'End', | ||
98 | home: 'Home', | ||
99 | leftArrow: '向左箭號', | ||
100 | upArrow: '向上鍵號', | ||
101 | rightArrow: '向右鍵號', | ||
102 | downArrow: '向下鍵號', | ||
103 | insert: '插入', | ||
104 | 'delete': '刪除', | ||
105 | leftWindowKey: '左方 Windows 鍵', | ||
106 | rightWindowKey: '右方 Windows 鍵', | ||
107 | selectKey: '選擇鍵', | ||
108 | numpad0: 'Numpad 0', | ||
109 | numpad1: 'Numpad 1', | ||
110 | numpad2: 'Numpad 2', | ||
111 | numpad3: 'Numpad 3', | ||
112 | numpad4: 'Numpad 4', | ||
113 | numpad5: 'Numpad 5', | ||
114 | numpad6: 'Numpad 6', | ||
115 | numpad7: 'Numpad 7', | ||
116 | numpad8: 'Numpad 8', | ||
117 | numpad9: 'Numpad 9', | ||
118 | multiply: '乘號', | ||
119 | add: '新增', | ||
120 | subtract: '減號', | ||
121 | decimalPoint: '小數點', | ||
122 | divide: '除號', | ||
123 | f1: 'F1', | ||
124 | f2: 'F2', | ||
125 | f3: 'F3', | ||
126 | f4: 'F4', | ||
127 | f5: 'F5', | ||
128 | f6: 'F6', | ||
129 | f7: 'F7', | ||
130 | f8: 'F8', | ||
131 | f9: 'F9', | ||
132 | f10: 'F10', | ||
133 | f11: 'F11', | ||
134 | f12: 'F12', | ||
135 | numLock: 'Num Lock', | ||
136 | scrollLock: 'Scroll Lock', | ||
137 | semiColon: '分號', | ||
138 | equalSign: '等號', | ||
139 | comma: '逗號', | ||
140 | dash: '虛線', | ||
141 | period: '句點', | ||
142 | forwardSlash: '斜線', | ||
143 | graveAccent: '抑音符號', | ||
144 | openBracket: '左方括號', | ||
145 | backSlash: '反斜線', | ||
146 | closeBracket: '右方括號', | ||
147 | singleQuote: '單引號' | ||
148 | } ); | ||
diff --git a/sources/plugins/a11yhelp/plugin.js b/sources/plugins/a11yhelp/plugin.js new file mode 100644 index 0000000..86b19fe --- /dev/null +++ b/sources/plugins/a11yhelp/plugin.js | |||
@@ -0,0 +1,51 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview Plugin definition for the a11yhelp, which provides a dialog | ||
8 | * with accessibility related help. | ||
9 | */ | ||
10 | |||
11 | ( function() { | ||
12 | var pluginName = 'a11yhelp', | ||
13 | commandName = 'a11yHelp'; | ||
14 | |||
15 | CKEDITOR.plugins.add( pluginName, { | ||
16 | requires: 'dialog', | ||
17 | |||
18 | // List of available localizations. | ||
19 | // jscs:disable | ||
20 | availableLangs: { af:1,ar:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,'de-ch':1,el:1,en:1,'en-gb':1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,fr:1,'fr-ca':1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,pl:1,pt:1,'pt-br':1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,'sr-latn':1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,'zh-cn':1 }, | ||
21 | // jscs:enable | ||
22 | |||
23 | init: function( editor ) { | ||
24 | var plugin = this; | ||
25 | editor.addCommand( commandName, { | ||
26 | exec: function() { | ||
27 | var langCode = editor.langCode; | ||
28 | langCode = | ||
29 | plugin.availableLangs[ langCode ] ? langCode : | ||
30 | plugin.availableLangs[ langCode.replace( /-.*/, '' ) ] ? langCode.replace( /-.*/, '' ) : | ||
31 | 'en'; | ||
32 | |||
33 | CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( plugin.path + 'dialogs/lang/' + langCode + '.js' ), function() { | ||
34 | editor.lang.a11yhelp = plugin.langEntries[ langCode ]; | ||
35 | editor.openDialog( commandName ); | ||
36 | } ); | ||
37 | }, | ||
38 | modes: { wysiwyg: 1, source: 1 }, | ||
39 | readOnly: 1, | ||
40 | canUndo: false | ||
41 | } ); | ||
42 | |||
43 | editor.setKeystroke( CKEDITOR.ALT + 48 /*0*/, 'a11yHelp' ); | ||
44 | CKEDITOR.dialog.add( commandName, this.path + 'dialogs/a11yhelp.js' ); | ||
45 | |||
46 | editor.on( 'ariaEditorHelpLabel', function( evt ) { | ||
47 | evt.data.label = editor.lang.common.editorHelp; | ||
48 | } ); | ||
49 | } | ||
50 | } ); | ||
51 | } )(); | ||
diff --git a/sources/plugins/basicstyles/icons/bold.png b/sources/plugins/basicstyles/icons/bold.png new file mode 100644 index 0000000..5ff84fe --- /dev/null +++ b/sources/plugins/basicstyles/icons/bold.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/icons/hidpi/bold.png b/sources/plugins/basicstyles/icons/hidpi/bold.png new file mode 100644 index 0000000..65acb29 --- /dev/null +++ b/sources/plugins/basicstyles/icons/hidpi/bold.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/icons/hidpi/italic.png b/sources/plugins/basicstyles/icons/hidpi/italic.png new file mode 100644 index 0000000..2b0f44e --- /dev/null +++ b/sources/plugins/basicstyles/icons/hidpi/italic.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/icons/hidpi/strike.png b/sources/plugins/basicstyles/icons/hidpi/strike.png new file mode 100644 index 0000000..ef045c8 --- /dev/null +++ b/sources/plugins/basicstyles/icons/hidpi/strike.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/icons/hidpi/subscript.png b/sources/plugins/basicstyles/icons/hidpi/subscript.png new file mode 100644 index 0000000..f12f4be --- /dev/null +++ b/sources/plugins/basicstyles/icons/hidpi/subscript.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/icons/hidpi/superscript.png b/sources/plugins/basicstyles/icons/hidpi/superscript.png new file mode 100644 index 0000000..4f7b762 --- /dev/null +++ b/sources/plugins/basicstyles/icons/hidpi/superscript.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/icons/hidpi/underline.png b/sources/plugins/basicstyles/icons/hidpi/underline.png new file mode 100644 index 0000000..79702f6 --- /dev/null +++ b/sources/plugins/basicstyles/icons/hidpi/underline.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/icons/italic.png b/sources/plugins/basicstyles/icons/italic.png new file mode 100644 index 0000000..64d1332 --- /dev/null +++ b/sources/plugins/basicstyles/icons/italic.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/icons/strike.png b/sources/plugins/basicstyles/icons/strike.png new file mode 100644 index 0000000..31ea47a --- /dev/null +++ b/sources/plugins/basicstyles/icons/strike.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/icons/subscript.png b/sources/plugins/basicstyles/icons/subscript.png new file mode 100644 index 0000000..bfe5420 --- /dev/null +++ b/sources/plugins/basicstyles/icons/subscript.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/icons/superscript.png b/sources/plugins/basicstyles/icons/superscript.png new file mode 100644 index 0000000..a1eb2f1 --- /dev/null +++ b/sources/plugins/basicstyles/icons/superscript.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/icons/underline.png b/sources/plugins/basicstyles/icons/underline.png new file mode 100644 index 0000000..1dd0c59 --- /dev/null +++ b/sources/plugins/basicstyles/icons/underline.png | |||
Binary files differ | |||
diff --git a/sources/plugins/basicstyles/lang/af.js b/sources/plugins/basicstyles/lang/af.js new file mode 100644 index 0000000..3fbcb9c --- /dev/null +++ b/sources/plugins/basicstyles/lang/af.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'af', { | ||
6 | bold: 'Vet', | ||
7 | italic: 'Skuins', | ||
8 | strike: 'Deurgestreep', | ||
9 | subscript: 'Onderskrif', | ||
10 | superscript: 'Bo-skrif', | ||
11 | underline: 'Onderstreep' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/ar.js b/sources/plugins/basicstyles/lang/ar.js new file mode 100644 index 0000000..8ed2b07 --- /dev/null +++ b/sources/plugins/basicstyles/lang/ar.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'ar', { | ||
6 | bold: 'عريض', | ||
7 | italic: 'مائل', | ||
8 | strike: 'يتوسطه خط', | ||
9 | subscript: 'منخفض', | ||
10 | superscript: 'مرتفع', | ||
11 | underline: 'تسطير' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/bg.js b/sources/plugins/basicstyles/lang/bg.js new file mode 100644 index 0000000..e410766 --- /dev/null +++ b/sources/plugins/basicstyles/lang/bg.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'bg', { | ||
6 | bold: 'Удебелен', | ||
7 | italic: 'Наклонен', | ||
8 | strike: 'Зачертан текст', | ||
9 | subscript: 'Индексиран текст', | ||
10 | superscript: 'Суперскрипт', | ||
11 | underline: 'Подчертан' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/bn.js b/sources/plugins/basicstyles/lang/bn.js new file mode 100644 index 0000000..007520b --- /dev/null +++ b/sources/plugins/basicstyles/lang/bn.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'bn', { | ||
6 | bold: 'বোল্ড', | ||
7 | italic: 'ইটালিক', | ||
8 | strike: 'স্ট্রাইক থ্রু', | ||
9 | subscript: 'অধোলেখ', | ||
10 | superscript: 'অভিলেখ', | ||
11 | underline: 'আন্ডারলাইন' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/bs.js b/sources/plugins/basicstyles/lang/bs.js new file mode 100644 index 0000000..9484a8d --- /dev/null +++ b/sources/plugins/basicstyles/lang/bs.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'bs', { | ||
6 | bold: 'Boldiraj', | ||
7 | italic: 'Ukosi', | ||
8 | strike: 'Precrtaj', | ||
9 | subscript: 'Subscript', | ||
10 | superscript: 'Superscript', | ||
11 | underline: 'Podvuci' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/ca.js b/sources/plugins/basicstyles/lang/ca.js new file mode 100644 index 0000000..7d3cc03 --- /dev/null +++ b/sources/plugins/basicstyles/lang/ca.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'ca', { | ||
6 | bold: 'Negreta', | ||
7 | italic: 'Cursiva', | ||
8 | strike: 'Ratllat', | ||
9 | subscript: 'Subíndex', | ||
10 | superscript: 'Superíndex', | ||
11 | underline: 'Subratllat' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/cs.js b/sources/plugins/basicstyles/lang/cs.js new file mode 100644 index 0000000..5322b5a --- /dev/null +++ b/sources/plugins/basicstyles/lang/cs.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'cs', { | ||
6 | bold: 'Tučné', | ||
7 | italic: 'Kurzíva', | ||
8 | strike: 'Přeškrtnuté', | ||
9 | subscript: 'Dolní index', | ||
10 | superscript: 'Horní index', | ||
11 | underline: 'Podtržené' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/cy.js b/sources/plugins/basicstyles/lang/cy.js new file mode 100644 index 0000000..4a207e8 --- /dev/null +++ b/sources/plugins/basicstyles/lang/cy.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'cy', { | ||
6 | bold: 'Bras', | ||
7 | italic: 'Italig', | ||
8 | strike: 'Llinell Trwyddo', | ||
9 | subscript: 'Is-sgript', | ||
10 | superscript: 'Uwchsgript', | ||
11 | underline: 'Tanlinellu' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/da.js b/sources/plugins/basicstyles/lang/da.js new file mode 100644 index 0000000..d1b1050 --- /dev/null +++ b/sources/plugins/basicstyles/lang/da.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'da', { | ||
6 | bold: 'Fed', | ||
7 | italic: 'Kursiv', | ||
8 | strike: 'Gennemstreget', | ||
9 | subscript: 'Sænket skrift', | ||
10 | superscript: 'Hævet skrift', | ||
11 | underline: 'Understreget' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/de-ch.js b/sources/plugins/basicstyles/lang/de-ch.js new file mode 100644 index 0000000..21ade9f --- /dev/null +++ b/sources/plugins/basicstyles/lang/de-ch.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'de-ch', { | ||
6 | bold: 'Fett', | ||
7 | italic: 'Kursiv', | ||
8 | strike: 'Durchgestrichen', | ||
9 | subscript: 'Tiefgestellt', | ||
10 | superscript: 'Hochgestellt', | ||
11 | underline: 'Unterstrichen' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/de.js b/sources/plugins/basicstyles/lang/de.js new file mode 100644 index 0000000..5c67cd9 --- /dev/null +++ b/sources/plugins/basicstyles/lang/de.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'de', { | ||
6 | bold: 'Fett', | ||
7 | italic: 'Kursiv', | ||
8 | strike: 'Durchgestrichen', | ||
9 | subscript: 'Tiefgestellt', | ||
10 | superscript: 'Hochgestellt', | ||
11 | underline: 'Unterstrichen' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/el.js b/sources/plugins/basicstyles/lang/el.js new file mode 100644 index 0000000..899b794 --- /dev/null +++ b/sources/plugins/basicstyles/lang/el.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'el', { | ||
6 | bold: 'Έντονη', | ||
7 | italic: 'Πλάγια', | ||
8 | strike: 'Διακριτή Διαγραφή', | ||
9 | subscript: 'Δείκτης', | ||
10 | superscript: 'Εκθέτης', | ||
11 | underline: 'Υπογράμμιση' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/en-au.js b/sources/plugins/basicstyles/lang/en-au.js new file mode 100644 index 0000000..4c80293 --- /dev/null +++ b/sources/plugins/basicstyles/lang/en-au.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'en-au', { | ||
6 | bold: 'Bold', | ||
7 | italic: 'Italic', | ||
8 | strike: 'Strike Through', | ||
9 | subscript: 'Subscript', | ||
10 | superscript: 'Superscript', | ||
11 | underline: 'Underline' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/en-ca.js b/sources/plugins/basicstyles/lang/en-ca.js new file mode 100644 index 0000000..e85611a --- /dev/null +++ b/sources/plugins/basicstyles/lang/en-ca.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'en-ca', { | ||
6 | bold: 'Bold', | ||
7 | italic: 'Italic', | ||
8 | strike: 'Strike Through', | ||
9 | subscript: 'Subscript', | ||
10 | superscript: 'Superscript', | ||
11 | underline: 'Underline' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/en-gb.js b/sources/plugins/basicstyles/lang/en-gb.js new file mode 100644 index 0000000..b2cd62c --- /dev/null +++ b/sources/plugins/basicstyles/lang/en-gb.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'en-gb', { | ||
6 | bold: 'Bold', | ||
7 | italic: 'Italic', | ||
8 | strike: 'Strike Through', | ||
9 | subscript: 'Subscript', | ||
10 | superscript: 'Superscript', | ||
11 | underline: 'Underline' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/en.js b/sources/plugins/basicstyles/lang/en.js new file mode 100644 index 0000000..7284189 --- /dev/null +++ b/sources/plugins/basicstyles/lang/en.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'en', { | ||
6 | bold: 'Bold', | ||
7 | italic: 'Italic', | ||
8 | strike: 'Strikethrough', | ||
9 | subscript: 'Subscript', | ||
10 | superscript: 'Superscript', | ||
11 | underline: 'Underline' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/eo.js b/sources/plugins/basicstyles/lang/eo.js new file mode 100644 index 0000000..0fef072 --- /dev/null +++ b/sources/plugins/basicstyles/lang/eo.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'eo', { | ||
6 | bold: 'Grasa', | ||
7 | italic: 'Kursiva', | ||
8 | strike: 'Trastreko', | ||
9 | subscript: 'Suba indico', | ||
10 | superscript: 'Supra indico', | ||
11 | underline: 'Substreko' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/es.js b/sources/plugins/basicstyles/lang/es.js new file mode 100644 index 0000000..b44dbf7 --- /dev/null +++ b/sources/plugins/basicstyles/lang/es.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'es', { | ||
6 | bold: 'Negrita', | ||
7 | italic: 'Cursiva', | ||
8 | strike: 'Tachado', | ||
9 | subscript: 'Subíndice', | ||
10 | superscript: 'Superíndice', | ||
11 | underline: 'Subrayado' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/et.js b/sources/plugins/basicstyles/lang/et.js new file mode 100644 index 0000000..18d1a04 --- /dev/null +++ b/sources/plugins/basicstyles/lang/et.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'et', { | ||
6 | bold: 'Paks', | ||
7 | italic: 'Kursiiv', | ||
8 | strike: 'Läbijoonitud', | ||
9 | subscript: 'Allindeks', | ||
10 | superscript: 'Ülaindeks', | ||
11 | underline: 'Allajoonitud' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/eu.js b/sources/plugins/basicstyles/lang/eu.js new file mode 100644 index 0000000..97f4075 --- /dev/null +++ b/sources/plugins/basicstyles/lang/eu.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'eu', { | ||
6 | bold: 'Lodia', | ||
7 | italic: 'Etzana', | ||
8 | strike: 'Marratua', | ||
9 | subscript: 'Azpi-indizea', | ||
10 | superscript: 'Goi-indizea', | ||
11 | underline: 'Azpimarratu' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/fa.js b/sources/plugins/basicstyles/lang/fa.js new file mode 100644 index 0000000..21cea30 --- /dev/null +++ b/sources/plugins/basicstyles/lang/fa.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'fa', { | ||
6 | bold: 'درشت', | ||
7 | italic: 'خمیده', | ||
8 | strike: 'خطخورده', | ||
9 | subscript: 'زیرنویس', | ||
10 | superscript: 'بالانویس', | ||
11 | underline: 'زیرخطدار' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/fi.js b/sources/plugins/basicstyles/lang/fi.js new file mode 100644 index 0000000..83b2fca --- /dev/null +++ b/sources/plugins/basicstyles/lang/fi.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'fi', { | ||
6 | bold: 'Lihavoitu', | ||
7 | italic: 'Kursivoitu', | ||
8 | strike: 'Yliviivattu', | ||
9 | subscript: 'Alaindeksi', | ||
10 | superscript: 'Yläindeksi', | ||
11 | underline: 'Alleviivattu' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/fo.js b/sources/plugins/basicstyles/lang/fo.js new file mode 100644 index 0000000..4af4e21 --- /dev/null +++ b/sources/plugins/basicstyles/lang/fo.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'fo', { | ||
6 | bold: 'Feit skrift', | ||
7 | italic: 'Skráskrift', | ||
8 | strike: 'Yvirstrikað', | ||
9 | subscript: 'Lækkað skrift', | ||
10 | superscript: 'Hækkað skrift', | ||
11 | underline: 'Undirstrikað' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/fr-ca.js b/sources/plugins/basicstyles/lang/fr-ca.js new file mode 100644 index 0000000..1a1f013 --- /dev/null +++ b/sources/plugins/basicstyles/lang/fr-ca.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'fr-ca', { | ||
6 | bold: 'Gras', | ||
7 | italic: 'Italique', | ||
8 | strike: 'Barré', | ||
9 | subscript: 'Indice', | ||
10 | superscript: 'Exposant', | ||
11 | underline: 'Souligné' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/fr.js b/sources/plugins/basicstyles/lang/fr.js new file mode 100644 index 0000000..65d8877 --- /dev/null +++ b/sources/plugins/basicstyles/lang/fr.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'fr', { | ||
6 | bold: 'Gras', | ||
7 | italic: 'Italique', | ||
8 | strike: 'Barré', | ||
9 | subscript: 'Indice', | ||
10 | superscript: 'Exposant', | ||
11 | underline: 'Souligné' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/gl.js b/sources/plugins/basicstyles/lang/gl.js new file mode 100644 index 0000000..597f06b --- /dev/null +++ b/sources/plugins/basicstyles/lang/gl.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'gl', { | ||
6 | bold: 'Negra', | ||
7 | italic: 'Cursiva', | ||
8 | strike: 'Riscado', | ||
9 | subscript: 'Subíndice', | ||
10 | superscript: 'Superíndice', | ||
11 | underline: 'Subliñado' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/gu.js b/sources/plugins/basicstyles/lang/gu.js new file mode 100644 index 0000000..3ca4b60 --- /dev/null +++ b/sources/plugins/basicstyles/lang/gu.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'gu', { | ||
6 | bold: 'બોલ્ડ/સ્પષ્ટ', | ||
7 | italic: 'ઇટેલિક, ત્રાંસા', | ||
8 | strike: 'છેકી નાખવું', | ||
9 | subscript: 'એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન', | ||
10 | superscript: 'એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.', | ||
11 | underline: 'અન્ડર્લાઇન, નીચે લીટી' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/he.js b/sources/plugins/basicstyles/lang/he.js new file mode 100644 index 0000000..5d73395 --- /dev/null +++ b/sources/plugins/basicstyles/lang/he.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'he', { | ||
6 | bold: 'מודגש', | ||
7 | italic: 'נטוי', | ||
8 | strike: 'כתיב מחוק', | ||
9 | subscript: 'כתיב תחתון', | ||
10 | superscript: 'כתיב עליון', | ||
11 | underline: 'קו תחתון' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/hi.js b/sources/plugins/basicstyles/lang/hi.js new file mode 100644 index 0000000..0beaa59 --- /dev/null +++ b/sources/plugins/basicstyles/lang/hi.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'hi', { | ||
6 | bold: 'बोल्ड', | ||
7 | italic: 'इटैलिक', | ||
8 | strike: 'स्ट्राइक थ्रू', | ||
9 | subscript: 'अधोलेख', | ||
10 | superscript: 'अभिलेख', | ||
11 | underline: 'रेखांकण' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/hr.js b/sources/plugins/basicstyles/lang/hr.js new file mode 100644 index 0000000..ef1c439 --- /dev/null +++ b/sources/plugins/basicstyles/lang/hr.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'hr', { | ||
6 | bold: 'Podebljaj', | ||
7 | italic: 'Ukosi', | ||
8 | strike: 'Precrtano', | ||
9 | subscript: 'Subscript', | ||
10 | superscript: 'Superscript', | ||
11 | underline: 'Potcrtano' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/hu.js b/sources/plugins/basicstyles/lang/hu.js new file mode 100644 index 0000000..36081b3 --- /dev/null +++ b/sources/plugins/basicstyles/lang/hu.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'hu', { | ||
6 | bold: 'Félkövér', | ||
7 | italic: 'Dőlt', | ||
8 | strike: 'Áthúzott', | ||
9 | subscript: 'Alsó index', | ||
10 | superscript: 'Felső index', | ||
11 | underline: 'Aláhúzott' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/id.js b/sources/plugins/basicstyles/lang/id.js new file mode 100644 index 0000000..8bad46e --- /dev/null +++ b/sources/plugins/basicstyles/lang/id.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'id', { | ||
6 | bold: 'Huruf Tebal', | ||
7 | italic: 'Huruf Miring', | ||
8 | strike: 'Strikethrough', // MISSING | ||
9 | subscript: 'Subscript', // MISSING | ||
10 | superscript: 'Superscript', // MISSING | ||
11 | underline: 'Garis Bawah' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/is.js b/sources/plugins/basicstyles/lang/is.js new file mode 100644 index 0000000..67a4cff --- /dev/null +++ b/sources/plugins/basicstyles/lang/is.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'is', { | ||
6 | bold: 'Feitletrað', | ||
7 | italic: 'Skáletrað', | ||
8 | strike: 'Yfirstrikað', | ||
9 | subscript: 'Niðurskrifað', | ||
10 | superscript: 'Uppskrifað', | ||
11 | underline: 'Undirstrikað' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/it.js b/sources/plugins/basicstyles/lang/it.js new file mode 100644 index 0000000..bbd38a7 --- /dev/null +++ b/sources/plugins/basicstyles/lang/it.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'it', { | ||
6 | bold: 'Grassetto', | ||
7 | italic: 'Corsivo', | ||
8 | strike: 'Barrato', | ||
9 | subscript: 'Pedice', | ||
10 | superscript: 'Apice', | ||
11 | underline: 'Sottolineato' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/ja.js b/sources/plugins/basicstyles/lang/ja.js new file mode 100644 index 0000000..a28beba --- /dev/null +++ b/sources/plugins/basicstyles/lang/ja.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'ja', { | ||
6 | bold: '太字', | ||
7 | italic: '斜体', | ||
8 | strike: '打ち消し線', | ||
9 | subscript: '下付き', | ||
10 | superscript: '上付き', | ||
11 | underline: '下線' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/ka.js b/sources/plugins/basicstyles/lang/ka.js new file mode 100644 index 0000000..10be39d --- /dev/null +++ b/sources/plugins/basicstyles/lang/ka.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'ka', { | ||
6 | bold: 'მსხვილი', | ||
7 | italic: 'დახრილი', | ||
8 | strike: 'გადახაზული', | ||
9 | subscript: 'ინდექსი', | ||
10 | superscript: 'ხარისხი', | ||
11 | underline: 'გახაზული' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/km.js b/sources/plugins/basicstyles/lang/km.js new file mode 100644 index 0000000..256559c --- /dev/null +++ b/sources/plugins/basicstyles/lang/km.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'km', { | ||
6 | bold: 'ដិត', | ||
7 | italic: 'ទ្រេត', | ||
8 | strike: 'គូសបន្ទាត់ចំកណ្ដាល', | ||
9 | subscript: 'អក្សរតូចក្រោម', | ||
10 | superscript: 'អក្សរតូចលើ', | ||
11 | underline: 'គូសបន្ទាត់ក្រោម' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/ko.js b/sources/plugins/basicstyles/lang/ko.js new file mode 100644 index 0000000..0a988f4 --- /dev/null +++ b/sources/plugins/basicstyles/lang/ko.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'ko', { | ||
6 | bold: '굵게', | ||
7 | italic: '기울임꼴', | ||
8 | strike: '취소선', | ||
9 | subscript: '아래 첨자', | ||
10 | superscript: '위 첨자', | ||
11 | underline: '밑줄' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/ku.js b/sources/plugins/basicstyles/lang/ku.js new file mode 100644 index 0000000..99100cb --- /dev/null +++ b/sources/plugins/basicstyles/lang/ku.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'ku', { | ||
6 | bold: 'قەڵەو', | ||
7 | italic: 'لار', | ||
8 | strike: 'لێدان', | ||
9 | subscript: 'ژێرنووس', | ||
10 | superscript: 'سەرنووس', | ||
11 | underline: 'ژێرهێڵ' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/lt.js b/sources/plugins/basicstyles/lang/lt.js new file mode 100644 index 0000000..8ea74dd --- /dev/null +++ b/sources/plugins/basicstyles/lang/lt.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'lt', { | ||
6 | bold: 'Pusjuodis', | ||
7 | italic: 'Kursyvas', | ||
8 | strike: 'Perbrauktas', | ||
9 | subscript: 'Apatinis indeksas', | ||
10 | superscript: 'Viršutinis indeksas', | ||
11 | underline: 'Pabrauktas' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/lv.js b/sources/plugins/basicstyles/lang/lv.js new file mode 100644 index 0000000..38bbe70 --- /dev/null +++ b/sources/plugins/basicstyles/lang/lv.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'lv', { | ||
6 | bold: 'Treknināts', | ||
7 | italic: 'Kursīvs', | ||
8 | strike: 'Pārsvītrots', | ||
9 | subscript: 'Apakšrakstā', | ||
10 | superscript: 'Augšrakstā', | ||
11 | underline: 'Pasvītrots' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/mk.js b/sources/plugins/basicstyles/lang/mk.js new file mode 100644 index 0000000..478ce87 --- /dev/null +++ b/sources/plugins/basicstyles/lang/mk.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'mk', { | ||
6 | bold: 'Здебелено', | ||
7 | italic: 'Накривено', | ||
8 | strike: 'Прецртано', | ||
9 | subscript: 'Долен индекс', | ||
10 | superscript: 'Горен индекс', | ||
11 | underline: 'Подвлечено' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/mn.js b/sources/plugins/basicstyles/lang/mn.js new file mode 100644 index 0000000..7edec37 --- /dev/null +++ b/sources/plugins/basicstyles/lang/mn.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'mn', { | ||
6 | bold: 'Тод бүдүүн', | ||
7 | italic: 'Налуу', | ||
8 | strike: 'Дундуур нь зураастай болгох', | ||
9 | subscript: 'Суурь болгох', | ||
10 | superscript: 'Зэрэг болгох', | ||
11 | underline: 'Доогуур нь зураастай болгох' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/ms.js b/sources/plugins/basicstyles/lang/ms.js new file mode 100644 index 0000000..0fc9f9b --- /dev/null +++ b/sources/plugins/basicstyles/lang/ms.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'ms', { | ||
6 | bold: 'Bold', | ||
7 | italic: 'Italic', | ||
8 | strike: 'Strike Through', | ||
9 | subscript: 'Subscript', | ||
10 | superscript: 'Superscript', | ||
11 | underline: 'Underline' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/nb.js b/sources/plugins/basicstyles/lang/nb.js new file mode 100644 index 0000000..b5f922a --- /dev/null +++ b/sources/plugins/basicstyles/lang/nb.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'nb', { | ||
6 | bold: 'Fet', | ||
7 | italic: 'Kursiv', | ||
8 | strike: 'Gjennomstreking', | ||
9 | subscript: 'Senket skrift', | ||
10 | superscript: 'Hevet skrift', | ||
11 | underline: 'Understreking' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/nl.js b/sources/plugins/basicstyles/lang/nl.js new file mode 100644 index 0000000..92cad81 --- /dev/null +++ b/sources/plugins/basicstyles/lang/nl.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'nl', { | ||
6 | bold: 'Vet', | ||
7 | italic: 'Cursief', | ||
8 | strike: 'Doorhalen', | ||
9 | subscript: 'Subscript', | ||
10 | superscript: 'Superscript', | ||
11 | underline: 'Onderstrepen' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/no.js b/sources/plugins/basicstyles/lang/no.js new file mode 100644 index 0000000..300659a --- /dev/null +++ b/sources/plugins/basicstyles/lang/no.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'no', { | ||
6 | bold: 'Fet', | ||
7 | italic: 'Kursiv', | ||
8 | strike: 'Gjennomstreking', | ||
9 | subscript: 'Senket skrift', | ||
10 | superscript: 'Hevet skrift', | ||
11 | underline: 'Understreking' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/pl.js b/sources/plugins/basicstyles/lang/pl.js new file mode 100644 index 0000000..321f895 --- /dev/null +++ b/sources/plugins/basicstyles/lang/pl.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'pl', { | ||
6 | bold: 'Pogrubienie', | ||
7 | italic: 'Kursywa', | ||
8 | strike: 'Przekreślenie', | ||
9 | subscript: 'Indeks dolny', | ||
10 | superscript: 'Indeks górny', | ||
11 | underline: 'Podkreślenie' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/pt-br.js b/sources/plugins/basicstyles/lang/pt-br.js new file mode 100644 index 0000000..fad08d4 --- /dev/null +++ b/sources/plugins/basicstyles/lang/pt-br.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'pt-br', { | ||
6 | bold: 'Negrito', | ||
7 | italic: 'Itálico', | ||
8 | strike: 'Tachado', | ||
9 | subscript: 'Subscrito', | ||
10 | superscript: 'Sobrescrito', | ||
11 | underline: 'Sublinhado' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/pt.js b/sources/plugins/basicstyles/lang/pt.js new file mode 100644 index 0000000..85de020 --- /dev/null +++ b/sources/plugins/basicstyles/lang/pt.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'pt', { | ||
6 | bold: 'Negrito', | ||
7 | italic: 'Itálico', | ||
8 | strike: 'Rasurado', | ||
9 | subscript: 'Superior à linha', | ||
10 | superscript: 'Inferior à Linha', | ||
11 | underline: 'Sublinhado' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/ro.js b/sources/plugins/basicstyles/lang/ro.js new file mode 100644 index 0000000..c274ded --- /dev/null +++ b/sources/plugins/basicstyles/lang/ro.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'ro', { | ||
6 | bold: 'Îngroşat (bold)', | ||
7 | italic: 'Înclinat (italic)', | ||
8 | strike: 'Tăiat (strike through)', | ||
9 | subscript: 'Indice (subscript)', | ||
10 | superscript: 'Putere (superscript)', | ||
11 | underline: 'Subliniat (underline)' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/ru.js b/sources/plugins/basicstyles/lang/ru.js new file mode 100644 index 0000000..25cdf88 --- /dev/null +++ b/sources/plugins/basicstyles/lang/ru.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'ru', { | ||
6 | bold: 'Полужирный', | ||
7 | italic: 'Курсив', | ||
8 | strike: 'Зачеркнутый', | ||
9 | subscript: 'Подстрочный индекс', | ||
10 | superscript: 'Надстрочный индекс', | ||
11 | underline: 'Подчеркнутый' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/si.js b/sources/plugins/basicstyles/lang/si.js new file mode 100644 index 0000000..fbd052e --- /dev/null +++ b/sources/plugins/basicstyles/lang/si.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'si', { | ||
6 | bold: 'තද අකුරින් ලියනලද', | ||
7 | italic: 'බැධීඅකුරින් ලියන ලද', | ||
8 | strike: 'Strikethrough', // MISSING | ||
9 | subscript: 'Subscript', // MISSING | ||
10 | superscript: 'Superscript', // MISSING | ||
11 | underline: 'යටින් ඉරි අදින ලද' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/sk.js b/sources/plugins/basicstyles/lang/sk.js new file mode 100644 index 0000000..3a19d9b --- /dev/null +++ b/sources/plugins/basicstyles/lang/sk.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'sk', { | ||
6 | bold: 'Tučné', | ||
7 | italic: 'Kurzíva', | ||
8 | strike: 'Prečiarknuté', | ||
9 | subscript: 'Dolný index', | ||
10 | superscript: 'Horný index', | ||
11 | underline: 'Podčiarknuté' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/sl.js b/sources/plugins/basicstyles/lang/sl.js new file mode 100644 index 0000000..d6a0dbc --- /dev/null +++ b/sources/plugins/basicstyles/lang/sl.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'sl', { | ||
6 | bold: 'Krepko', | ||
7 | italic: 'Ležeče', | ||
8 | strike: 'Prečrtano', | ||
9 | subscript: 'Podpisano', | ||
10 | superscript: 'Nadpisano', | ||
11 | underline: 'Podčrtano' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/sq.js b/sources/plugins/basicstyles/lang/sq.js new file mode 100644 index 0000000..7604a7a --- /dev/null +++ b/sources/plugins/basicstyles/lang/sq.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'sq', { | ||
6 | bold: 'Trash', | ||
7 | italic: 'Pjerrët', | ||
8 | strike: 'Nëpërmes', | ||
9 | subscript: 'Nën-skriptë', | ||
10 | superscript: 'Super-skriptë', | ||
11 | underline: 'Nënvijëzuar' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/sr-latn.js b/sources/plugins/basicstyles/lang/sr-latn.js new file mode 100644 index 0000000..6c87984 --- /dev/null +++ b/sources/plugins/basicstyles/lang/sr-latn.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'sr-latn', { | ||
6 | bold: 'Podebljano', | ||
7 | italic: 'Kurziv', | ||
8 | strike: 'Precrtano', | ||
9 | subscript: 'Indeks', | ||
10 | superscript: 'Stepen', | ||
11 | underline: 'Podvučeno' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/sr.js b/sources/plugins/basicstyles/lang/sr.js new file mode 100644 index 0000000..f0cc6eb --- /dev/null +++ b/sources/plugins/basicstyles/lang/sr.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'sr', { | ||
6 | bold: 'Подебљано', | ||
7 | italic: 'Курзив', | ||
8 | strike: 'Прецртано', | ||
9 | subscript: 'Индекс', | ||
10 | superscript: 'Степен', | ||
11 | underline: 'Подвучено' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/sv.js b/sources/plugins/basicstyles/lang/sv.js new file mode 100644 index 0000000..d11c18c --- /dev/null +++ b/sources/plugins/basicstyles/lang/sv.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'sv', { | ||
6 | bold: 'Fet', | ||
7 | italic: 'Kursiv', | ||
8 | strike: 'Genomstruken', | ||
9 | subscript: 'Nedsänkta tecken', | ||
10 | superscript: 'Upphöjda tecken', | ||
11 | underline: 'Understruken' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/th.js b/sources/plugins/basicstyles/lang/th.js new file mode 100644 index 0000000..91c0cea --- /dev/null +++ b/sources/plugins/basicstyles/lang/th.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'th', { | ||
6 | bold: 'ตัวหนา', | ||
7 | italic: 'ตัวเอียง', | ||
8 | strike: 'ตัวขีดเส้นทับ', | ||
9 | subscript: 'ตัวห้อย', | ||
10 | superscript: 'ตัวยก', | ||
11 | underline: 'ตัวขีดเส้นใต้' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/tr.js b/sources/plugins/basicstyles/lang/tr.js new file mode 100644 index 0000000..62f6d09 --- /dev/null +++ b/sources/plugins/basicstyles/lang/tr.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'tr', { | ||
6 | bold: 'Kalın', | ||
7 | italic: 'İtalik', | ||
8 | strike: 'Üstü Çizgili', | ||
9 | subscript: 'Alt Simge', | ||
10 | superscript: 'Üst Simge', | ||
11 | underline: 'Altı Çizgili' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/tt.js b/sources/plugins/basicstyles/lang/tt.js new file mode 100644 index 0000000..13e0217 --- /dev/null +++ b/sources/plugins/basicstyles/lang/tt.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'tt', { | ||
6 | bold: 'Калын', | ||
7 | italic: 'Курсив', | ||
8 | strike: 'Сызылган', | ||
9 | subscript: 'Аскы индекс', | ||
10 | superscript: 'Өске индекс', | ||
11 | underline: 'Астына сызылган' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/ug.js b/sources/plugins/basicstyles/lang/ug.js new file mode 100644 index 0000000..780e7b7 --- /dev/null +++ b/sources/plugins/basicstyles/lang/ug.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'ug', { | ||
6 | bold: 'توم', | ||
7 | italic: 'يانتۇ', | ||
8 | strike: 'ئۆچۈرۈش سىزىقى', | ||
9 | subscript: 'تۆۋەن ئىندېكس', | ||
10 | superscript: 'يۇقىرى ئىندېكس', | ||
11 | underline: 'ئاستى سىزىق' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/uk.js b/sources/plugins/basicstyles/lang/uk.js new file mode 100644 index 0000000..66e9f6a --- /dev/null +++ b/sources/plugins/basicstyles/lang/uk.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'uk', { | ||
6 | bold: 'Жирний', | ||
7 | italic: 'Курсив', | ||
8 | strike: 'Закреслений', | ||
9 | subscript: 'Нижній індекс', | ||
10 | superscript: 'Верхній індекс', | ||
11 | underline: 'Підкреслений' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/vi.js b/sources/plugins/basicstyles/lang/vi.js new file mode 100644 index 0000000..510ec58 --- /dev/null +++ b/sources/plugins/basicstyles/lang/vi.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'vi', { | ||
6 | bold: 'Đậm', | ||
7 | italic: 'Nghiêng', | ||
8 | strike: 'Gạch xuyên ngang', | ||
9 | subscript: 'Chỉ số dưới', | ||
10 | superscript: 'Chỉ số trên', | ||
11 | underline: 'Gạch chân' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/zh-cn.js b/sources/plugins/basicstyles/lang/zh-cn.js new file mode 100644 index 0000000..1b7e89f --- /dev/null +++ b/sources/plugins/basicstyles/lang/zh-cn.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'zh-cn', { | ||
6 | bold: '加粗', | ||
7 | italic: '倾斜', | ||
8 | strike: '删除线', | ||
9 | subscript: '下标', | ||
10 | superscript: '上标', | ||
11 | underline: '下划线' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/lang/zh.js b/sources/plugins/basicstyles/lang/zh.js new file mode 100644 index 0000000..6e75580 --- /dev/null +++ b/sources/plugins/basicstyles/lang/zh.js | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'basicstyles', 'zh', { | ||
6 | bold: '粗體', | ||
7 | italic: '斜體', | ||
8 | strike: '刪除線', | ||
9 | subscript: '下標', | ||
10 | superscript: '上標', | ||
11 | underline: '底線' | ||
12 | } ); | ||
diff --git a/sources/plugins/basicstyles/plugin.js b/sources/plugins/basicstyles/plugin.js new file mode 100644 index 0000000..6960e2e --- /dev/null +++ b/sources/plugins/basicstyles/plugin.js | |||
@@ -0,0 +1,209 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.add( 'basicstyles', { | ||
7 | // jscs:disable maximumLineLength | ||
8 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
9 | // jscs:enable maximumLineLength | ||
10 | icons: 'bold,italic,underline,strike,subscript,superscript', // %REMOVE_LINE_CORE% | ||
11 | hidpi: true, // %REMOVE_LINE_CORE% | ||
12 | init: function( editor ) { | ||
13 | var order = 0; | ||
14 | // All buttons use the same code to register. So, to avoid | ||
15 | // duplications, let's use this tool function. | ||
16 | var addButtonCommand = function( buttonName, buttonLabel, commandName, styleDefiniton ) { | ||
17 | // Disable the command if no definition is configured. | ||
18 | if ( !styleDefiniton ) | ||
19 | return; | ||
20 | |||
21 | var style = new CKEDITOR.style( styleDefiniton ), | ||
22 | forms = contentForms[ commandName ]; | ||
23 | |||
24 | // Put the style as the most important form. | ||
25 | forms.unshift( style ); | ||
26 | |||
27 | // Listen to contextual style activation. | ||
28 | editor.attachStyleStateChange( style, function( state ) { | ||
29 | !editor.readOnly && editor.getCommand( commandName ).setState( state ); | ||
30 | } ); | ||
31 | |||
32 | // Create the command that can be used to apply the style. | ||
33 | editor.addCommand( commandName, new CKEDITOR.styleCommand( style, { | ||
34 | contentForms: forms | ||
35 | } ) ); | ||
36 | |||
37 | // Register the button, if the button plugin is loaded. | ||
38 | if ( editor.ui.addButton ) { | ||
39 | editor.ui.addButton( buttonName, { | ||
40 | label: buttonLabel, | ||
41 | command: commandName, | ||
42 | toolbar: 'basicstyles,' + ( order += 10 ) | ||
43 | } ); | ||
44 | } | ||
45 | }; | ||
46 | |||
47 | var contentForms = { | ||
48 | bold: [ | ||
49 | 'strong', | ||
50 | 'b', | ||
51 | [ 'span', function( el ) { | ||
52 | var fw = el.styles[ 'font-weight' ]; | ||
53 | return fw == 'bold' || +fw >= 700; | ||
54 | } ] | ||
55 | ], | ||
56 | |||
57 | italic: [ | ||
58 | 'em', | ||
59 | 'i', | ||
60 | [ 'span', function( el ) { | ||
61 | return el.styles[ 'font-style' ] == 'italic'; | ||
62 | } ] | ||
63 | ], | ||
64 | |||
65 | underline: [ | ||
66 | 'u', | ||
67 | [ 'span', function( el ) { | ||
68 | return el.styles[ 'text-decoration' ] == 'underline'; | ||
69 | } ] | ||
70 | ], | ||
71 | |||
72 | strike: [ | ||
73 | 's', | ||
74 | 'strike', | ||
75 | [ 'span', function( el ) { | ||
76 | return el.styles[ 'text-decoration' ] == 'line-through'; | ||
77 | } ] | ||
78 | ], | ||
79 | |||
80 | subscript: [ | ||
81 | 'sub' | ||
82 | ], | ||
83 | |||
84 | superscript: [ | ||
85 | 'sup' | ||
86 | ] | ||
87 | }, | ||
88 | config = editor.config, | ||
89 | lang = editor.lang.basicstyles; | ||
90 | |||
91 | addButtonCommand( 'Bold', lang.bold, 'bold', config.coreStyles_bold ); | ||
92 | addButtonCommand( 'Italic', lang.italic, 'italic', config.coreStyles_italic ); | ||
93 | addButtonCommand( 'Underline', lang.underline, 'underline', config.coreStyles_underline ); | ||
94 | addButtonCommand( 'Strike', lang.strike, 'strike', config.coreStyles_strike ); | ||
95 | addButtonCommand( 'Subscript', lang.subscript, 'subscript', config.coreStyles_subscript ); | ||
96 | addButtonCommand( 'Superscript', lang.superscript, 'superscript', config.coreStyles_superscript ); | ||
97 | |||
98 | editor.setKeystroke( [ | ||
99 | [ CKEDITOR.CTRL + 66 /*B*/, 'bold' ], | ||
100 | [ CKEDITOR.CTRL + 73 /*I*/, 'italic' ], | ||
101 | [ CKEDITOR.CTRL + 85 /*U*/, 'underline' ] | ||
102 | ] ); | ||
103 | } | ||
104 | } ); | ||
105 | |||
106 | // Basic Inline Styles. | ||
107 | |||
108 | /** | ||
109 | * The style definition that applies the **bold** style to the text. | ||
110 | * | ||
111 | * Read more in the [documentation](#!/guide/dev_basicstyles) | ||
112 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html). | ||
113 | * | ||
114 | * config.coreStyles_bold = { element: 'b', overrides: 'strong' }; | ||
115 | * | ||
116 | * config.coreStyles_bold = { | ||
117 | * element: 'span', | ||
118 | * attributes: { 'class': 'Bold' } | ||
119 | * }; | ||
120 | * | ||
121 | * @cfg | ||
122 | * @member CKEDITOR.config | ||
123 | */ | ||
124 | CKEDITOR.config.coreStyles_bold = { element: 'strong', overrides: 'b' }; | ||
125 | |||
126 | /** | ||
127 | * The style definition that applies the *italics* style to the text. | ||
128 | * | ||
129 | * Read more in the [documentation](#!/guide/dev_basicstyles) | ||
130 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html). | ||
131 | * | ||
132 | * config.coreStyles_italic = { element: 'i', overrides: 'em' }; | ||
133 | * | ||
134 | * CKEDITOR.config.coreStyles_italic = { | ||
135 | * element: 'span', | ||
136 | * attributes: { 'class': 'Italic' } | ||
137 | * }; | ||
138 | * | ||
139 | * @cfg | ||
140 | * @member CKEDITOR.config | ||
141 | */ | ||
142 | CKEDITOR.config.coreStyles_italic = { element: 'em', overrides: 'i' }; | ||
143 | |||
144 | /** | ||
145 | * The style definition that applies the <u>underline</u> style to the text. | ||
146 | * | ||
147 | * Read more in the [documentation](#!/guide/dev_basicstyles) | ||
148 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html). | ||
149 | * | ||
150 | * CKEDITOR.config.coreStyles_underline = { | ||
151 | * element: 'span', | ||
152 | * attributes: { 'class': 'Underline' } | ||
153 | * }; | ||
154 | * | ||
155 | * @cfg | ||
156 | * @member CKEDITOR.config | ||
157 | */ | ||
158 | CKEDITOR.config.coreStyles_underline = { element: 'u' }; | ||
159 | |||
160 | /** | ||
161 | * The style definition that applies the <strike>strikethrough</strike> style to the text. | ||
162 | * | ||
163 | * Read more in the [documentation](#!/guide/dev_basicstyles) | ||
164 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html). | ||
165 | * | ||
166 | * CKEDITOR.config.coreStyles_strike = { | ||
167 | * element: 'span', | ||
168 | * attributes: { 'class': 'Strikethrough' }, | ||
169 | * overrides: 'strike' | ||
170 | * }; | ||
171 | * | ||
172 | * @cfg | ||
173 | * @member CKEDITOR.config | ||
174 | */ | ||
175 | CKEDITOR.config.coreStyles_strike = { element: 's', overrides: 'strike' }; | ||
176 | |||
177 | /** | ||
178 | * The style definition that applies the subscript style to the text. | ||
179 | * | ||
180 | * Read more in the [documentation](#!/guide/dev_basicstyles) | ||
181 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html). | ||
182 | * | ||
183 | * CKEDITOR.config.coreStyles_subscript = { | ||
184 | * element: 'span', | ||
185 | * attributes: { 'class': 'Subscript' }, | ||
186 | * overrides: 'sub' | ||
187 | * }; | ||
188 | * | ||
189 | * @cfg | ||
190 | * @member CKEDITOR.config | ||
191 | */ | ||
192 | CKEDITOR.config.coreStyles_subscript = { element: 'sub' }; | ||
193 | |||
194 | /** | ||
195 | * The style definition that applies the superscript style to the text. | ||
196 | * | ||
197 | * Read more in the [documentation](#!/guide/dev_basicstyles) | ||
198 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html). | ||
199 | * | ||
200 | * CKEDITOR.config.coreStyles_superscript = { | ||
201 | * element: 'span', | ||
202 | * attributes: { 'class': 'Superscript' }, | ||
203 | * overrides: 'sup' | ||
204 | * }; | ||
205 | * | ||
206 | * @cfg | ||
207 | * @member CKEDITOR.config | ||
208 | */ | ||
209 | CKEDITOR.config.coreStyles_superscript = { element: 'sup' }; | ||
diff --git a/sources/plugins/button/lang/af.js b/sources/plugins/button/lang/af.js new file mode 100644 index 0000000..af03793 --- /dev/null +++ b/sources/plugins/button/lang/af.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'af', { | ||
7 | selectedLabel: '%1 uitgekies' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/ar.js b/sources/plugins/button/lang/ar.js new file mode 100644 index 0000000..28f4346 --- /dev/null +++ b/sources/plugins/button/lang/ar.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'ar', { | ||
7 | selectedLabel: '%1 (محدد)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/bg.js b/sources/plugins/button/lang/bg.js new file mode 100644 index 0000000..dfe5be1 --- /dev/null +++ b/sources/plugins/button/lang/bg.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'bg', { | ||
7 | selectedLabel: '%1 (Избрано)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/ca.js b/sources/plugins/button/lang/ca.js new file mode 100644 index 0000000..2feb710 --- /dev/null +++ b/sources/plugins/button/lang/ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'ca', { | ||
7 | selectedLabel: '%1 (Seleccionat)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/cs.js b/sources/plugins/button/lang/cs.js new file mode 100644 index 0000000..01f4a86 --- /dev/null +++ b/sources/plugins/button/lang/cs.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'cs', { | ||
7 | selectedLabel: '%1 (Vybráno)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/da.js b/sources/plugins/button/lang/da.js new file mode 100644 index 0000000..021201f --- /dev/null +++ b/sources/plugins/button/lang/da.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'da', { | ||
7 | selectedLabel: '%1 (Valgt)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/de-ch.js b/sources/plugins/button/lang/de-ch.js new file mode 100644 index 0000000..680cc20 --- /dev/null +++ b/sources/plugins/button/lang/de-ch.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'de-ch', { | ||
7 | selectedLabel: '%1 (Ausgewählt)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/de.js b/sources/plugins/button/lang/de.js new file mode 100644 index 0000000..d31afaa --- /dev/null +++ b/sources/plugins/button/lang/de.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'de', { | ||
7 | selectedLabel: '%1 (Ausgewählt)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/el.js b/sources/plugins/button/lang/el.js new file mode 100644 index 0000000..84e630c --- /dev/null +++ b/sources/plugins/button/lang/el.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'el', { | ||
7 | selectedLabel: '%1 (Επιλεγμένο)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/en-gb.js b/sources/plugins/button/lang/en-gb.js new file mode 100644 index 0000000..b4060d3 --- /dev/null +++ b/sources/plugins/button/lang/en-gb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'en-gb', { | ||
7 | selectedLabel: '%1 (Selected)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/en.js b/sources/plugins/button/lang/en.js new file mode 100644 index 0000000..b0b4807 --- /dev/null +++ b/sources/plugins/button/lang/en.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'en', { | ||
7 | selectedLabel: '%1 (Selected)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/eo.js b/sources/plugins/button/lang/eo.js new file mode 100644 index 0000000..733c960 --- /dev/null +++ b/sources/plugins/button/lang/eo.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'eo', { | ||
7 | selectedLabel: '%1 (Selektita)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/es.js b/sources/plugins/button/lang/es.js new file mode 100644 index 0000000..8b4695b --- /dev/null +++ b/sources/plugins/button/lang/es.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'es', { | ||
7 | selectedLabel: '%1 (Seleccionado)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/eu.js b/sources/plugins/button/lang/eu.js new file mode 100644 index 0000000..fd60b16 --- /dev/null +++ b/sources/plugins/button/lang/eu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'eu', { | ||
7 | selectedLabel: '%1 (hautatuta)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/fa.js b/sources/plugins/button/lang/fa.js new file mode 100644 index 0000000..8e923b0 --- /dev/null +++ b/sources/plugins/button/lang/fa.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'fa', { | ||
7 | selectedLabel: '%1 (انتخاب شده)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/fi.js b/sources/plugins/button/lang/fi.js new file mode 100644 index 0000000..2668a8d --- /dev/null +++ b/sources/plugins/button/lang/fi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'fi', { | ||
7 | selectedLabel: '%1 (Valittu)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/fr.js b/sources/plugins/button/lang/fr.js new file mode 100644 index 0000000..1039c90 --- /dev/null +++ b/sources/plugins/button/lang/fr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'fr', { | ||
7 | selectedLabel: '%1 (Sélectionné)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/gl.js b/sources/plugins/button/lang/gl.js new file mode 100644 index 0000000..e73ea65 --- /dev/null +++ b/sources/plugins/button/lang/gl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'gl', { | ||
7 | selectedLabel: '%1 (seleccionado)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/he.js b/sources/plugins/button/lang/he.js new file mode 100644 index 0000000..8890cf9 --- /dev/null +++ b/sources/plugins/button/lang/he.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'he', { | ||
7 | selectedLabel: '1% (סומן)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/hu.js b/sources/plugins/button/lang/hu.js new file mode 100644 index 0000000..9dc42a5 --- /dev/null +++ b/sources/plugins/button/lang/hu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'hu', { | ||
7 | selectedLabel: '%1 (Kiválasztva)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/id.js b/sources/plugins/button/lang/id.js new file mode 100644 index 0000000..52726a8 --- /dev/null +++ b/sources/plugins/button/lang/id.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'id', { | ||
7 | selectedLabel: '%1(Dipilih)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/it.js b/sources/plugins/button/lang/it.js new file mode 100644 index 0000000..0b28b8c --- /dev/null +++ b/sources/plugins/button/lang/it.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'it', { | ||
7 | selectedLabel: '%1 (selezionato)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/ja.js b/sources/plugins/button/lang/ja.js new file mode 100644 index 0000000..559d08c --- /dev/null +++ b/sources/plugins/button/lang/ja.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'ja', { | ||
7 | selectedLabel: '%1 (選択中)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/km.js b/sources/plugins/button/lang/km.js new file mode 100644 index 0000000..ecfc774 --- /dev/null +++ b/sources/plugins/button/lang/km.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'km', { | ||
7 | selectedLabel: '%1 (បានជ្រើសរើស)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/ko.js b/sources/plugins/button/lang/ko.js new file mode 100644 index 0000000..2e2cc61 --- /dev/null +++ b/sources/plugins/button/lang/ko.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'ko', { | ||
7 | selectedLabel: '%1 (선택됨)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/ku.js b/sources/plugins/button/lang/ku.js new file mode 100644 index 0000000..b794e23 --- /dev/null +++ b/sources/plugins/button/lang/ku.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'ku', { | ||
7 | selectedLabel: '%1 (هەڵبژێردراو)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/lt.js b/sources/plugins/button/lang/lt.js new file mode 100644 index 0000000..e17e9e5 --- /dev/null +++ b/sources/plugins/button/lang/lt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'lt', { | ||
7 | selectedLabel: '%1 (Pasirinkta)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/nb.js b/sources/plugins/button/lang/nb.js new file mode 100644 index 0000000..b91a823 --- /dev/null +++ b/sources/plugins/button/lang/nb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'nb', { | ||
7 | selectedLabel: '%1 (Valgt)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/nl.js b/sources/plugins/button/lang/nl.js new file mode 100644 index 0000000..0654cec --- /dev/null +++ b/sources/plugins/button/lang/nl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'nl', { | ||
7 | selectedLabel: '%1 (Geselecteerd)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/pl.js b/sources/plugins/button/lang/pl.js new file mode 100644 index 0000000..bc980d0 --- /dev/null +++ b/sources/plugins/button/lang/pl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'pl', { | ||
7 | selectedLabel: '%1 (Wybrany)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/pt-br.js b/sources/plugins/button/lang/pt-br.js new file mode 100644 index 0000000..f1cd7c4 --- /dev/null +++ b/sources/plugins/button/lang/pt-br.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'pt-br', { | ||
7 | selectedLabel: '%1 (Selecionado)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/pt.js b/sources/plugins/button/lang/pt.js new file mode 100644 index 0000000..adc8251 --- /dev/null +++ b/sources/plugins/button/lang/pt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'pt', { | ||
7 | selectedLabel: '%1 (Selecionado)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/ro.js b/sources/plugins/button/lang/ro.js new file mode 100644 index 0000000..c70153c --- /dev/null +++ b/sources/plugins/button/lang/ro.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'ro', { | ||
7 | selectedLabel: '%1 (Selectat)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/ru.js b/sources/plugins/button/lang/ru.js new file mode 100644 index 0000000..06ee190 --- /dev/null +++ b/sources/plugins/button/lang/ru.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'ru', { | ||
7 | selectedLabel: '%1 (Выбрано)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/sk.js b/sources/plugins/button/lang/sk.js new file mode 100644 index 0000000..adbadf2 --- /dev/null +++ b/sources/plugins/button/lang/sk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'sk', { | ||
7 | selectedLabel: '%1 (Vybrané)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/sl.js b/sources/plugins/button/lang/sl.js new file mode 100644 index 0000000..85e5cc2 --- /dev/null +++ b/sources/plugins/button/lang/sl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'sl', { | ||
7 | selectedLabel: '%1 (Izbrano)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/sq.js b/sources/plugins/button/lang/sq.js new file mode 100644 index 0000000..1690634 --- /dev/null +++ b/sources/plugins/button/lang/sq.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'sq', { | ||
7 | selectedLabel: '%1 (Përzgjedhur)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/sv.js b/sources/plugins/button/lang/sv.js new file mode 100644 index 0000000..db15526 --- /dev/null +++ b/sources/plugins/button/lang/sv.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'sv', { | ||
7 | selectedLabel: '%1 (Vald)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/tr.js b/sources/plugins/button/lang/tr.js new file mode 100644 index 0000000..a87bb12 --- /dev/null +++ b/sources/plugins/button/lang/tr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'tr', { | ||
7 | selectedLabel: '%1 (Seçilmiş)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/tt.js b/sources/plugins/button/lang/tt.js new file mode 100644 index 0000000..79044c6 --- /dev/null +++ b/sources/plugins/button/lang/tt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'tt', { | ||
7 | selectedLabel: '%1 (Сайланган)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/ug.js b/sources/plugins/button/lang/ug.js new file mode 100644 index 0000000..fe30252 --- /dev/null +++ b/sources/plugins/button/lang/ug.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'ug', { | ||
7 | selectedLabel: '%1 (تاللاندى)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/uk.js b/sources/plugins/button/lang/uk.js new file mode 100644 index 0000000..a40cf8f --- /dev/null +++ b/sources/plugins/button/lang/uk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'uk', { | ||
7 | selectedLabel: '%1 (Вибрано)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/vi.js b/sources/plugins/button/lang/vi.js new file mode 100644 index 0000000..a3ea973 --- /dev/null +++ b/sources/plugins/button/lang/vi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'vi', { | ||
7 | selectedLabel: '%1 (Đã chọn)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/zh-cn.js b/sources/plugins/button/lang/zh-cn.js new file mode 100644 index 0000000..1271943 --- /dev/null +++ b/sources/plugins/button/lang/zh-cn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'zh-cn', { | ||
7 | selectedLabel: '已选中 %1 项' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/lang/zh.js b/sources/plugins/button/lang/zh.js new file mode 100644 index 0000000..5fee74f --- /dev/null +++ b/sources/plugins/button/lang/zh.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'button', 'zh', { | ||
7 | selectedLabel: '%1 (已選取)' | ||
8 | } ); | ||
diff --git a/sources/plugins/button/plugin.js b/sources/plugins/button/plugin.js new file mode 100644 index 0000000..0ce75c6 --- /dev/null +++ b/sources/plugins/button/plugin.js | |||
@@ -0,0 +1,377 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | var template = '<a id="{id}"' + | ||
8 | ' class="cke_button cke_button__{name} cke_button_{state} {cls}"' + | ||
9 | ( CKEDITOR.env.gecko && !CKEDITOR.env.hc ? '' : ' href="javascript:void(\'{titleJs}\')"' ) + | ||
10 | ' title="{title}"' + | ||
11 | ' tabindex="-1"' + | ||
12 | ' hidefocus="true"' + | ||
13 | ' role="button"' + | ||
14 | ' aria-labelledby="{id}_label"' + | ||
15 | ' aria-haspopup="{hasArrow}"' + | ||
16 | ' aria-disabled="{ariaDisabled}"'; | ||
17 | |||
18 | // Some browsers don't cancel key events in the keydown but in the | ||
19 | // keypress. | ||
20 | // TODO: Check if really needed. | ||
21 | if ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) | ||
22 | template += ' onkeypress="return false;"'; | ||
23 | |||
24 | // With Firefox, we need to force the button to redraw, otherwise it | ||
25 | // will remain in the focus state. | ||
26 | if ( CKEDITOR.env.gecko ) | ||
27 | template += ' onblur="this.style.cssText = this.style.cssText;"'; | ||
28 | |||
29 | template += ' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event);"' + | ||
30 | ' onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" ' + | ||
31 | ( CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick' ) + // #188 | ||
32 | '="CKEDITOR.tools.callFunction({clickFn},this);return false;">' + | ||
33 | '<span class="cke_button_icon cke_button__{iconName}_icon" style="{style}"'; | ||
34 | |||
35 | |||
36 | template += '> </span>' + | ||
37 | '<span id="{id}_label" class="cke_button_label cke_button__{name}_label" aria-hidden="false">{label}</span>' + | ||
38 | '{arrowHtml}' + | ||
39 | '</a>'; | ||
40 | |||
41 | var templateArrow = '<span class="cke_button_arrow">' + | ||
42 | // BLACK DOWN-POINTING TRIANGLE | ||
43 | ( CKEDITOR.env.hc ? '▼' : '' ) + | ||
44 | '</span>'; | ||
45 | |||
46 | var btnArrowTpl = CKEDITOR.addTemplate( 'buttonArrow', templateArrow ), | ||
47 | btnTpl = CKEDITOR.addTemplate( 'button', template ); | ||
48 | |||
49 | CKEDITOR.plugins.add( 'button', { | ||
50 | lang: 'af,ar,bg,ca,cs,da,de,de-ch,el,en,en-gb,eo,es,eu,fa,fi,fr,gl,he,hu,id,it,ja,km,ko,ku,lt,nb,nl,pl,pt,pt-br,ro,ru,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
51 | beforeInit: function( editor ) { | ||
52 | editor.ui.addHandler( CKEDITOR.UI_BUTTON, CKEDITOR.ui.button.handler ); | ||
53 | } | ||
54 | } ); | ||
55 | |||
56 | /** | ||
57 | * Button UI element. | ||
58 | * | ||
59 | * @readonly | ||
60 | * @property {String} [='button'] | ||
61 | * @member CKEDITOR | ||
62 | */ | ||
63 | CKEDITOR.UI_BUTTON = 'button'; | ||
64 | |||
65 | /** | ||
66 | * Represents a button UI element. This class should not be called directly. To | ||
67 | * create new buttons use {@link CKEDITOR.ui#addButton} instead. | ||
68 | * | ||
69 | * @class | ||
70 | * @constructor Creates a button class instance. | ||
71 | * @param {Object} definition The button definition. | ||
72 | */ | ||
73 | CKEDITOR.ui.button = function( definition ) { | ||
74 | CKEDITOR.tools.extend( this, definition, | ||
75 | // Set defaults. | ||
76 | { | ||
77 | title: definition.label, | ||
78 | click: definition.click || | ||
79 | function( editor ) { | ||
80 | editor.execCommand( definition.command ); | ||
81 | } | ||
82 | } ); | ||
83 | |||
84 | this._ = {}; | ||
85 | }; | ||
86 | |||
87 | /** | ||
88 | * Represents the button handler object. | ||
89 | * | ||
90 | * @class | ||
91 | * @singleton | ||
92 | * @extends CKEDITOR.ui.handlerDefinition | ||
93 | */ | ||
94 | CKEDITOR.ui.button.handler = { | ||
95 | /** | ||
96 | * Transforms a button definition in a {@link CKEDITOR.ui.button} instance. | ||
97 | * | ||
98 | * @member CKEDITOR.ui.button.handler | ||
99 | * @param {Object} definition | ||
100 | * @returns {CKEDITOR.ui.button} | ||
101 | */ | ||
102 | create: function( definition ) { | ||
103 | return new CKEDITOR.ui.button( definition ); | ||
104 | } | ||
105 | }; | ||
106 | |||
107 | /** @class CKEDITOR.ui.button */ | ||
108 | CKEDITOR.ui.button.prototype = { | ||
109 | /** | ||
110 | * Renders the button. | ||
111 | * | ||
112 | * @param {CKEDITOR.editor} editor The editor instance which this button is | ||
113 | * to be used by. | ||
114 | * @param {Array} output The output array to which the HTML code related to | ||
115 | * this button should be appended. | ||
116 | */ | ||
117 | render: function( editor, output ) { | ||
118 | function updateState() { | ||
119 | // "this" is a CKEDITOR.ui.button instance. | ||
120 | var mode = editor.mode; | ||
121 | |||
122 | if ( mode ) { | ||
123 | // Restore saved button state. | ||
124 | var state = this.modes[ mode ] ? modeStates[ mode ] !== undefined ? modeStates[ mode ] : CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; | ||
125 | |||
126 | state = editor.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : state; | ||
127 | |||
128 | this.setState( state ); | ||
129 | |||
130 | // Let plugin to disable button. | ||
131 | if ( this.refresh ) | ||
132 | this.refresh(); | ||
133 | } | ||
134 | } | ||
135 | |||
136 | var env = CKEDITOR.env, | ||
137 | id = this._.id = CKEDITOR.tools.getNextId(), | ||
138 | stateName = '', | ||
139 | command = this.command, | ||
140 | // Get the command name. | ||
141 | clickFn; | ||
142 | |||
143 | this._.editor = editor; | ||
144 | |||
145 | var instance = { | ||
146 | id: id, | ||
147 | button: this, | ||
148 | editor: editor, | ||
149 | focus: function() { | ||
150 | var element = CKEDITOR.document.getById( id ); | ||
151 | element.focus(); | ||
152 | }, | ||
153 | execute: function() { | ||
154 | this.button.click( editor ); | ||
155 | }, | ||
156 | attach: function( editor ) { | ||
157 | this.button.attach( editor ); | ||
158 | } | ||
159 | }; | ||
160 | |||
161 | var keydownFn = CKEDITOR.tools.addFunction( function( ev ) { | ||
162 | if ( instance.onkey ) { | ||
163 | ev = new CKEDITOR.dom.event( ev ); | ||
164 | return ( instance.onkey( instance, ev.getKeystroke() ) !== false ); | ||
165 | } | ||
166 | } ); | ||
167 | |||
168 | var focusFn = CKEDITOR.tools.addFunction( function( ev ) { | ||
169 | var retVal; | ||
170 | |||
171 | if ( instance.onfocus ) | ||
172 | retVal = ( instance.onfocus( instance, new CKEDITOR.dom.event( ev ) ) !== false ); | ||
173 | |||
174 | return retVal; | ||
175 | } ); | ||
176 | |||
177 | var selLocked = 0; | ||
178 | |||
179 | instance.clickFn = clickFn = CKEDITOR.tools.addFunction( function() { | ||
180 | |||
181 | // Restore locked selection in Opera. | ||
182 | if ( selLocked ) { | ||
183 | editor.unlockSelection( 1 ); | ||
184 | selLocked = 0; | ||
185 | } | ||
186 | instance.execute(); | ||
187 | |||
188 | // Fixed iOS focus issue when your press disabled button (#12381). | ||
189 | if ( env.iOS ) { | ||
190 | editor.focus(); | ||
191 | } | ||
192 | } ); | ||
193 | |||
194 | |||
195 | // Indicate a mode sensitive button. | ||
196 | if ( this.modes ) { | ||
197 | var modeStates = {}; | ||
198 | |||
199 | editor.on( 'beforeModeUnload', function() { | ||
200 | if ( editor.mode && this._.state != CKEDITOR.TRISTATE_DISABLED ) | ||
201 | modeStates[ editor.mode ] = this._.state; | ||
202 | }, this ); | ||
203 | |||
204 | // Update status when activeFilter, mode or readOnly changes. | ||
205 | editor.on( 'activeFilterChange', updateState, this ); | ||
206 | editor.on( 'mode', updateState, this ); | ||
207 | // If this button is sensitive to readOnly state, update it accordingly. | ||
208 | !this.readOnly && editor.on( 'readOnly', updateState, this ); | ||
209 | |||
210 | } else if ( command ) { | ||
211 | // Get the command instance. | ||
212 | command = editor.getCommand( command ); | ||
213 | |||
214 | if ( command ) { | ||
215 | command.on( 'state', function() { | ||
216 | this.setState( command.state ); | ||
217 | }, this ); | ||
218 | |||
219 | stateName += ( command.state == CKEDITOR.TRISTATE_ON ? 'on' : command.state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' : 'off' ); | ||
220 | } | ||
221 | } | ||
222 | |||
223 | // For button that has text-direction awareness on selection path. | ||
224 | if ( this.directional ) { | ||
225 | editor.on( 'contentDirChanged', function( evt ) { | ||
226 | var el = CKEDITOR.document.getById( this._.id ), | ||
227 | icon = el.getFirst(); | ||
228 | |||
229 | var pathDir = evt.data; | ||
230 | |||
231 | // Make a minor direction change to become style-able for the skin icon. | ||
232 | if ( pathDir != editor.lang.dir ) | ||
233 | el.addClass( 'cke_' + pathDir ); | ||
234 | else | ||
235 | el.removeClass( 'cke_ltr' ).removeClass( 'cke_rtl' ); | ||
236 | |||
237 | // Inline style update for the plugin icon. | ||
238 | icon.setAttribute( 'style', CKEDITOR.skin.getIconStyle( iconName, pathDir == 'rtl', this.icon, this.iconOffset ) ); | ||
239 | }, this ); | ||
240 | } | ||
241 | |||
242 | if ( !command ) | ||
243 | stateName += 'off'; | ||
244 | |||
245 | var name = this.name || this.command, | ||
246 | iconName = name; | ||
247 | |||
248 | // Check if we're pointing to an icon defined by another command. (#9555) | ||
249 | if ( this.icon && !( /\./ ).test( this.icon ) ) { | ||
250 | iconName = this.icon; | ||
251 | this.icon = null; | ||
252 | } | ||
253 | |||
254 | var params = { | ||
255 | id: id, | ||
256 | name: name, | ||
257 | iconName: iconName, | ||
258 | label: this.label, | ||
259 | cls: this.className || '', | ||
260 | state: stateName, | ||
261 | ariaDisabled: stateName == 'disabled' ? 'true' : 'false', | ||
262 | title: this.title, | ||
263 | titleJs: env.gecko && !env.hc ? '' : ( this.title || '' ).replace( "'", '' ), | ||
264 | hasArrow: this.hasArrow ? 'true' : 'false', | ||
265 | keydownFn: keydownFn, | ||
266 | focusFn: focusFn, | ||
267 | clickFn: clickFn, | ||
268 | style: CKEDITOR.skin.getIconStyle( iconName, ( editor.lang.dir == 'rtl' ), this.icon, this.iconOffset ), | ||
269 | arrowHtml: this.hasArrow ? btnArrowTpl.output() : '' | ||
270 | }; | ||
271 | |||
272 | btnTpl.output( params, output ); | ||
273 | |||
274 | if ( this.onRender ) | ||
275 | this.onRender(); | ||
276 | |||
277 | return instance; | ||
278 | }, | ||
279 | |||
280 | /** | ||
281 | * Sets the button state. | ||
282 | * | ||
283 | * @param {Number} state Indicates the button state. One of {@link CKEDITOR#TRISTATE_ON}, | ||
284 | * {@link CKEDITOR#TRISTATE_OFF}, or {@link CKEDITOR#TRISTATE_DISABLED}. | ||
285 | */ | ||
286 | setState: function( state ) { | ||
287 | if ( this._.state == state ) | ||
288 | return false; | ||
289 | |||
290 | this._.state = state; | ||
291 | |||
292 | var element = CKEDITOR.document.getById( this._.id ); | ||
293 | |||
294 | if ( element ) { | ||
295 | element.setState( state, 'cke_button' ); | ||
296 | |||
297 | state == CKEDITOR.TRISTATE_DISABLED ? | ||
298 | element.setAttribute( 'aria-disabled', true ) : | ||
299 | element.removeAttribute( 'aria-disabled' ); | ||
300 | |||
301 | if ( !this.hasArrow ) { | ||
302 | // Note: aria-pressed attribute should not be added to menuButton instances. (#11331) | ||
303 | state == CKEDITOR.TRISTATE_ON ? | ||
304 | element.setAttribute( 'aria-pressed', true ) : | ||
305 | element.removeAttribute( 'aria-pressed' ); | ||
306 | } else { | ||
307 | var newLabel = state == CKEDITOR.TRISTATE_ON ? | ||
308 | this._.editor.lang.button.selectedLabel.replace( /%1/g, this.label ) : this.label; | ||
309 | CKEDITOR.document.getById( this._.id + '_label' ).setText( newLabel ); | ||
310 | } | ||
311 | |||
312 | return true; | ||
313 | } else { | ||
314 | return false; | ||
315 | } | ||
316 | }, | ||
317 | |||
318 | /** | ||
319 | * Gets the button state. | ||
320 | * | ||
321 | * @returns {Number} The button state. One of {@link CKEDITOR#TRISTATE_ON}, | ||
322 | * {@link CKEDITOR#TRISTATE_OFF}, or {@link CKEDITOR#TRISTATE_DISABLED}. | ||
323 | */ | ||
324 | getState: function() { | ||
325 | return this._.state; | ||
326 | }, | ||
327 | |||
328 | /** | ||
329 | * Returns this button's {@link CKEDITOR.feature} instance. | ||
330 | * | ||
331 | * It may be this button instance if it has at least one of | ||
332 | * `allowedContent` and `requiredContent` properties. Otherwise, | ||
333 | * if a command is bound to this button by the `command` property, then | ||
334 | * that command will be returned. | ||
335 | * | ||
336 | * This method implements the {@link CKEDITOR.feature#toFeature} interface method. | ||
337 | * | ||
338 | * @since 4.1 | ||
339 | * @param {CKEDITOR.editor} Editor instance. | ||
340 | * @returns {CKEDITOR.feature} The feature. | ||
341 | */ | ||
342 | toFeature: function( editor ) { | ||
343 | if ( this._.feature ) | ||
344 | return this._.feature; | ||
345 | |||
346 | var feature = this; | ||
347 | |||
348 | // If button isn't a feature, return command if is bound. | ||
349 | if ( !this.allowedContent && !this.requiredContent && this.command ) | ||
350 | feature = editor.getCommand( this.command ) || feature; | ||
351 | |||
352 | return this._.feature = feature; | ||
353 | } | ||
354 | }; | ||
355 | |||
356 | /** | ||
357 | * Adds a button definition to the UI elements list. | ||
358 | * | ||
359 | * editorInstance.ui.addButton( 'MyBold', { | ||
360 | * label: 'My Bold', | ||
361 | * command: 'bold', | ||
362 | * toolbar: 'basicstyles,1' | ||
363 | * } ); | ||
364 | * | ||
365 | * @member CKEDITOR.ui | ||
366 | * @param {String} name The button name. | ||
367 | * @param {Object} definition The button definition. | ||
368 | * @param {String} definition.label The textual part of the button (if visible) and its tooltip. | ||
369 | * @param {String} definition.command The command to be executed once the button is activated. | ||
370 | * @param {String} definition.toolbar The {@link CKEDITOR.config#toolbarGroups toolbar group} into which | ||
371 | * the button will be added. An optional index value (separated by a comma) determines the button position within the group. | ||
372 | */ | ||
373 | CKEDITOR.ui.prototype.addButton = function( name, definition ) { | ||
374 | this.add( name, CKEDITOR.UI_BUTTON, definition ); | ||
375 | }; | ||
376 | |||
377 | } )(); | ||
diff --git a/sources/plugins/contextmenu/lang/af.js b/sources/plugins/contextmenu/lang/af.js new file mode 100644 index 0000000..bf849cc --- /dev/null +++ b/sources/plugins/contextmenu/lang/af.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'af', { | ||
6 | options: 'Konteks Spyskaart-opsies' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/ar.js b/sources/plugins/contextmenu/lang/ar.js new file mode 100644 index 0000000..6f4b9cd --- /dev/null +++ b/sources/plugins/contextmenu/lang/ar.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'ar', { | ||
6 | options: 'خصائص قائمة السياق' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/bg.js b/sources/plugins/contextmenu/lang/bg.js new file mode 100644 index 0000000..7e37b2e --- /dev/null +++ b/sources/plugins/contextmenu/lang/bg.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'bg', { | ||
6 | options: 'Опции на контекстното меню' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/bn.js b/sources/plugins/contextmenu/lang/bn.js new file mode 100644 index 0000000..e18bb70 --- /dev/null +++ b/sources/plugins/contextmenu/lang/bn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'bn', { | ||
6 | options: 'Context Menu Options' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/bs.js b/sources/plugins/contextmenu/lang/bs.js new file mode 100644 index 0000000..22cade1 --- /dev/null +++ b/sources/plugins/contextmenu/lang/bs.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'bs', { | ||
6 | options: 'Context Menu Options' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/ca.js b/sources/plugins/contextmenu/lang/ca.js new file mode 100644 index 0000000..d9c157a --- /dev/null +++ b/sources/plugins/contextmenu/lang/ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'ca', { | ||
6 | options: 'Opcions del menú contextual' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/cs.js b/sources/plugins/contextmenu/lang/cs.js new file mode 100644 index 0000000..49ba461 --- /dev/null +++ b/sources/plugins/contextmenu/lang/cs.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'cs', { | ||
6 | options: 'Nastavení kontextové nabídky' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/cy.js b/sources/plugins/contextmenu/lang/cy.js new file mode 100644 index 0000000..2bb01d9 --- /dev/null +++ b/sources/plugins/contextmenu/lang/cy.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'cy', { | ||
6 | options: 'Opsiynau Dewislen Cyd-destun' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/da.js b/sources/plugins/contextmenu/lang/da.js new file mode 100644 index 0000000..3e73bd8 --- /dev/null +++ b/sources/plugins/contextmenu/lang/da.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'da', { | ||
6 | options: 'Muligheder for hjælpemenu' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/de-ch.js b/sources/plugins/contextmenu/lang/de-ch.js new file mode 100644 index 0000000..606c5e5 --- /dev/null +++ b/sources/plugins/contextmenu/lang/de-ch.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'de-ch', { | ||
6 | options: 'Kontextmenüoptionen' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/de.js b/sources/plugins/contextmenu/lang/de.js new file mode 100644 index 0000000..af3d94f --- /dev/null +++ b/sources/plugins/contextmenu/lang/de.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'de', { | ||
6 | options: 'Kontextmenüoptionen' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/el.js b/sources/plugins/contextmenu/lang/el.js new file mode 100644 index 0000000..5641cc2 --- /dev/null +++ b/sources/plugins/contextmenu/lang/el.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'el', { | ||
6 | options: 'Επιλογές Αναδυόμενου Μενού' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/en-au.js b/sources/plugins/contextmenu/lang/en-au.js new file mode 100644 index 0000000..2cfb13e --- /dev/null +++ b/sources/plugins/contextmenu/lang/en-au.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'en-au', { | ||
6 | options: 'Context Menu Options' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/en-ca.js b/sources/plugins/contextmenu/lang/en-ca.js new file mode 100644 index 0000000..f5fff30 --- /dev/null +++ b/sources/plugins/contextmenu/lang/en-ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'en-ca', { | ||
6 | options: 'Context Menu Options' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/en-gb.js b/sources/plugins/contextmenu/lang/en-gb.js new file mode 100644 index 0000000..25b6dfa --- /dev/null +++ b/sources/plugins/contextmenu/lang/en-gb.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'en-gb', { | ||
6 | options: 'Context Menu Options' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/en.js b/sources/plugins/contextmenu/lang/en.js new file mode 100644 index 0000000..59343e3 --- /dev/null +++ b/sources/plugins/contextmenu/lang/en.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'en', { | ||
6 | options: 'Context Menu Options' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/eo.js b/sources/plugins/contextmenu/lang/eo.js new file mode 100644 index 0000000..8782e56 --- /dev/null +++ b/sources/plugins/contextmenu/lang/eo.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'eo', { | ||
6 | options: 'Opcioj de Kunteksta Menuo' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/es.js b/sources/plugins/contextmenu/lang/es.js new file mode 100644 index 0000000..7eed8ab --- /dev/null +++ b/sources/plugins/contextmenu/lang/es.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'es', { | ||
6 | options: 'Opciones del menú contextual' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/et.js b/sources/plugins/contextmenu/lang/et.js new file mode 100644 index 0000000..7e34fbb --- /dev/null +++ b/sources/plugins/contextmenu/lang/et.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'et', { | ||
6 | options: 'Kontekstimenüü valikud' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/eu.js b/sources/plugins/contextmenu/lang/eu.js new file mode 100644 index 0000000..f04ae72 --- /dev/null +++ b/sources/plugins/contextmenu/lang/eu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'eu', { | ||
6 | options: 'Testuinguru-menuaren aukerak' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/fa.js b/sources/plugins/contextmenu/lang/fa.js new file mode 100644 index 0000000..6ba8b7c --- /dev/null +++ b/sources/plugins/contextmenu/lang/fa.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'fa', { | ||
6 | options: 'گزینههای منوی زمینه' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/fi.js b/sources/plugins/contextmenu/lang/fi.js new file mode 100644 index 0000000..920c494 --- /dev/null +++ b/sources/plugins/contextmenu/lang/fi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'fi', { | ||
6 | options: 'Pikavalikon ominaisuudet' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/fo.js b/sources/plugins/contextmenu/lang/fo.js new file mode 100644 index 0000000..6e71076 --- /dev/null +++ b/sources/plugins/contextmenu/lang/fo.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'fo', { | ||
6 | options: 'Context Menu Options' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/fr-ca.js b/sources/plugins/contextmenu/lang/fr-ca.js new file mode 100644 index 0000000..c9ffdc1 --- /dev/null +++ b/sources/plugins/contextmenu/lang/fr-ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'fr-ca', { | ||
6 | options: 'Options du menu contextuel' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/fr.js b/sources/plugins/contextmenu/lang/fr.js new file mode 100644 index 0000000..9205c52 --- /dev/null +++ b/sources/plugins/contextmenu/lang/fr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'fr', { | ||
6 | options: 'Options du menu contextuel' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/gl.js b/sources/plugins/contextmenu/lang/gl.js new file mode 100644 index 0000000..92561cc --- /dev/null +++ b/sources/plugins/contextmenu/lang/gl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'gl', { | ||
6 | options: 'Opcións do menú contextual' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/gu.js b/sources/plugins/contextmenu/lang/gu.js new file mode 100644 index 0000000..f2065ee --- /dev/null +++ b/sources/plugins/contextmenu/lang/gu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'gu', { | ||
6 | options: 'કોન્તેક્ષ્ત્ મેનુના વિકલ્પો' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/he.js b/sources/plugins/contextmenu/lang/he.js new file mode 100644 index 0000000..71d3bd9 --- /dev/null +++ b/sources/plugins/contextmenu/lang/he.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'he', { | ||
6 | options: 'אפשרויות תפריט ההקשר' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/hi.js b/sources/plugins/contextmenu/lang/hi.js new file mode 100644 index 0000000..9181aca --- /dev/null +++ b/sources/plugins/contextmenu/lang/hi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'hi', { | ||
6 | options: 'Context Menu Options' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/hr.js b/sources/plugins/contextmenu/lang/hr.js new file mode 100644 index 0000000..335215d --- /dev/null +++ b/sources/plugins/contextmenu/lang/hr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'hr', { | ||
6 | options: 'Opcije izbornika' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/hu.js b/sources/plugins/contextmenu/lang/hu.js new file mode 100644 index 0000000..f80d0ae --- /dev/null +++ b/sources/plugins/contextmenu/lang/hu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'hu', { | ||
6 | options: 'Helyi menü opciók' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/id.js b/sources/plugins/contextmenu/lang/id.js new file mode 100644 index 0000000..0278f79 --- /dev/null +++ b/sources/plugins/contextmenu/lang/id.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'id', { | ||
6 | options: 'Opsi Konteks Pilihan' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/is.js b/sources/plugins/contextmenu/lang/is.js new file mode 100644 index 0000000..6d208f1 --- /dev/null +++ b/sources/plugins/contextmenu/lang/is.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'is', { | ||
6 | options: 'Context Menu Options' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/it.js b/sources/plugins/contextmenu/lang/it.js new file mode 100644 index 0000000..dc206c9 --- /dev/null +++ b/sources/plugins/contextmenu/lang/it.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'it', { | ||
6 | options: 'Opzioni del menù contestuale' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/ja.js b/sources/plugins/contextmenu/lang/ja.js new file mode 100644 index 0000000..939486f --- /dev/null +++ b/sources/plugins/contextmenu/lang/ja.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'ja', { | ||
6 | options: 'コンテキストメニューオプション' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/ka.js b/sources/plugins/contextmenu/lang/ka.js new file mode 100644 index 0000000..b7c553b --- /dev/null +++ b/sources/plugins/contextmenu/lang/ka.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'ka', { | ||
6 | options: 'კონტექსტური მენიუს პარამეტრები' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/km.js b/sources/plugins/contextmenu/lang/km.js new file mode 100644 index 0000000..967e4fe --- /dev/null +++ b/sources/plugins/contextmenu/lang/km.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'km', { | ||
6 | options: 'ជម្រើសម៉ឺនុយបរិបទ' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/ko.js b/sources/plugins/contextmenu/lang/ko.js new file mode 100644 index 0000000..8f873fe --- /dev/null +++ b/sources/plugins/contextmenu/lang/ko.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'ko', { | ||
6 | options: '컨텍스트 메뉴 옵션' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/ku.js b/sources/plugins/contextmenu/lang/ku.js new file mode 100644 index 0000000..f49b18b --- /dev/null +++ b/sources/plugins/contextmenu/lang/ku.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'ku', { | ||
6 | options: 'هەڵبژاردەی لیستەی کلیکی دەستی ڕاست' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/lt.js b/sources/plugins/contextmenu/lang/lt.js new file mode 100644 index 0000000..e50e8a4 --- /dev/null +++ b/sources/plugins/contextmenu/lang/lt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'lt', { | ||
6 | options: 'Kontekstinio meniu parametrai' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/lv.js b/sources/plugins/contextmenu/lang/lv.js new file mode 100644 index 0000000..fad495a --- /dev/null +++ b/sources/plugins/contextmenu/lang/lv.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'lv', { | ||
6 | options: 'Uznirstošās izvēlnes uzstādījumi' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/mk.js b/sources/plugins/contextmenu/lang/mk.js new file mode 100644 index 0000000..c00cebb --- /dev/null +++ b/sources/plugins/contextmenu/lang/mk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'mk', { | ||
6 | options: 'Контекст-мени опции' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/mn.js b/sources/plugins/contextmenu/lang/mn.js new file mode 100644 index 0000000..0745938 --- /dev/null +++ b/sources/plugins/contextmenu/lang/mn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'mn', { | ||
6 | options: 'Context Menu Options' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/ms.js b/sources/plugins/contextmenu/lang/ms.js new file mode 100644 index 0000000..870cbac --- /dev/null +++ b/sources/plugins/contextmenu/lang/ms.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'ms', { | ||
6 | options: 'Context Menu Options' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/nb.js b/sources/plugins/contextmenu/lang/nb.js new file mode 100644 index 0000000..cc31945 --- /dev/null +++ b/sources/plugins/contextmenu/lang/nb.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'nb', { | ||
6 | options: 'Alternativer for høyreklikkmeny' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/nl.js b/sources/plugins/contextmenu/lang/nl.js new file mode 100644 index 0000000..baa8eb2 --- /dev/null +++ b/sources/plugins/contextmenu/lang/nl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'nl', { | ||
6 | options: 'Contextmenu opties' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/no.js b/sources/plugins/contextmenu/lang/no.js new file mode 100644 index 0000000..8885d40 --- /dev/null +++ b/sources/plugins/contextmenu/lang/no.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'no', { | ||
6 | options: 'Alternativer for høyreklikkmeny' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/pl.js b/sources/plugins/contextmenu/lang/pl.js new file mode 100644 index 0000000..47de98d --- /dev/null +++ b/sources/plugins/contextmenu/lang/pl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'pl', { | ||
6 | options: 'Opcje menu kontekstowego' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/pt-br.js b/sources/plugins/contextmenu/lang/pt-br.js new file mode 100644 index 0000000..8cf3255 --- /dev/null +++ b/sources/plugins/contextmenu/lang/pt-br.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'pt-br', { | ||
6 | options: 'Opções Menu de Contexto' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/pt.js b/sources/plugins/contextmenu/lang/pt.js new file mode 100644 index 0000000..31c027f --- /dev/null +++ b/sources/plugins/contextmenu/lang/pt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'pt', { | ||
6 | options: 'Menu de opções de contexto' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/ro.js b/sources/plugins/contextmenu/lang/ro.js new file mode 100644 index 0000000..b9c0077 --- /dev/null +++ b/sources/plugins/contextmenu/lang/ro.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'ro', { | ||
6 | options: 'Opțiuni Meniu Contextual' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/ru.js b/sources/plugins/contextmenu/lang/ru.js new file mode 100644 index 0000000..330afbe --- /dev/null +++ b/sources/plugins/contextmenu/lang/ru.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'ru', { | ||
6 | options: 'Параметры контекстного меню' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/si.js b/sources/plugins/contextmenu/lang/si.js new file mode 100644 index 0000000..8b3eda0 --- /dev/null +++ b/sources/plugins/contextmenu/lang/si.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'si', { | ||
6 | options: 'අනතර්ග ලේඛණ විකල්ප' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/sk.js b/sources/plugins/contextmenu/lang/sk.js new file mode 100644 index 0000000..34d64ac --- /dev/null +++ b/sources/plugins/contextmenu/lang/sk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'sk', { | ||
6 | options: 'Možnosti kontextového menu' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/sl.js b/sources/plugins/contextmenu/lang/sl.js new file mode 100644 index 0000000..e823bb6 --- /dev/null +++ b/sources/plugins/contextmenu/lang/sl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'sl', { | ||
6 | options: 'Možnosti Kontekstnega Menija' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/sq.js b/sources/plugins/contextmenu/lang/sq.js new file mode 100644 index 0000000..e1d40dc --- /dev/null +++ b/sources/plugins/contextmenu/lang/sq.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'sq', { | ||
6 | options: 'Mundësitë e Menysë së Kontekstit' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/sr-latn.js b/sources/plugins/contextmenu/lang/sr-latn.js new file mode 100644 index 0000000..a63e783 --- /dev/null +++ b/sources/plugins/contextmenu/lang/sr-latn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'sr-latn', { | ||
6 | options: 'Context Menu Options' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/sr.js b/sources/plugins/contextmenu/lang/sr.js new file mode 100644 index 0000000..ec79a0c --- /dev/null +++ b/sources/plugins/contextmenu/lang/sr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'sr', { | ||
6 | options: 'Context Menu Options' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/sv.js b/sources/plugins/contextmenu/lang/sv.js new file mode 100644 index 0000000..69fa7b9 --- /dev/null +++ b/sources/plugins/contextmenu/lang/sv.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'sv', { | ||
6 | options: 'Context Menu Options' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/th.js b/sources/plugins/contextmenu/lang/th.js new file mode 100644 index 0000000..c17f20f --- /dev/null +++ b/sources/plugins/contextmenu/lang/th.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'th', { | ||
6 | options: 'Context Menu Options' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/tr.js b/sources/plugins/contextmenu/lang/tr.js new file mode 100644 index 0000000..c31e6f3 --- /dev/null +++ b/sources/plugins/contextmenu/lang/tr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'tr', { | ||
6 | options: 'İçerik Menüsü Seçenekleri' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/tt.js b/sources/plugins/contextmenu/lang/tt.js new file mode 100644 index 0000000..514a35f --- /dev/null +++ b/sources/plugins/contextmenu/lang/tt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'tt', { | ||
6 | options: 'Контекст меню үзлекләре' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/ug.js b/sources/plugins/contextmenu/lang/ug.js new file mode 100644 index 0000000..b52e259 --- /dev/null +++ b/sources/plugins/contextmenu/lang/ug.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'ug', { | ||
6 | options: 'قىسقا يول تىزىملىك تاللانمىسى' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/uk.js b/sources/plugins/contextmenu/lang/uk.js new file mode 100644 index 0000000..97b514a --- /dev/null +++ b/sources/plugins/contextmenu/lang/uk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'uk', { | ||
6 | options: 'Опції контекстного меню' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/vi.js b/sources/plugins/contextmenu/lang/vi.js new file mode 100644 index 0000000..91fc97c --- /dev/null +++ b/sources/plugins/contextmenu/lang/vi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'vi', { | ||
6 | options: 'Tùy chọn menu bổ xung' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/zh-cn.js b/sources/plugins/contextmenu/lang/zh-cn.js new file mode 100644 index 0000000..9ee2213 --- /dev/null +++ b/sources/plugins/contextmenu/lang/zh-cn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'zh-cn', { | ||
6 | options: '快捷菜单选项' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/lang/zh.js b/sources/plugins/contextmenu/lang/zh.js new file mode 100644 index 0000000..b451c7f --- /dev/null +++ b/sources/plugins/contextmenu/lang/zh.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'contextmenu', 'zh', { | ||
6 | options: '內容功能表選項' | ||
7 | } ); | ||
diff --git a/sources/plugins/contextmenu/plugin.js b/sources/plugins/contextmenu/plugin.js new file mode 100644 index 0000000..09d7f25 --- /dev/null +++ b/sources/plugins/contextmenu/plugin.js | |||
@@ -0,0 +1,159 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.add( 'contextmenu', { | ||
7 | requires: 'menu', | ||
8 | |||
9 | // jscs:disable maximumLineLength | ||
10 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
11 | // jscs:enable maximumLineLength | ||
12 | |||
13 | // Make sure the base class (CKEDITOR.menu) is loaded before it (#3318). | ||
14 | onLoad: function() { | ||
15 | /** | ||
16 | * Class replacing the non-configurable native context menu with a configurable CKEditor's equivalent. | ||
17 | * | ||
18 | * @class | ||
19 | * @extends CKEDITOR.menu | ||
20 | */ | ||
21 | CKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass( { | ||
22 | base: CKEDITOR.menu, | ||
23 | |||
24 | /** | ||
25 | * Creates the CKEDITOR.plugins.contextMenu class instance. | ||
26 | * | ||
27 | * @constructor | ||
28 | * @param {CKEDITOR.editor} editor | ||
29 | */ | ||
30 | $: function( editor ) { | ||
31 | this.base.call( this, editor, { | ||
32 | panel: { | ||
33 | className: 'cke_menu_panel', | ||
34 | attributes: { | ||
35 | 'aria-label': editor.lang.contextmenu.options | ||
36 | } | ||
37 | } | ||
38 | } ); | ||
39 | }, | ||
40 | |||
41 | proto: { | ||
42 | /** | ||
43 | * Starts watching on native context menu triggers (<kbd>Option</kbd> key, right click) on the given element. | ||
44 | * | ||
45 | * @param {CKEDITOR.dom.element} element | ||
46 | * @param {Boolean} [nativeContextMenuOnCtrl] Whether to open native context menu if the | ||
47 | * <kbd>Ctrl</kbd> key is held on opening the context menu. See {@link CKEDITOR.config#browserContextMenuOnCtrl}. | ||
48 | */ | ||
49 | addTarget: function( element, nativeContextMenuOnCtrl ) { | ||
50 | element.on( 'contextmenu', function( event ) { | ||
51 | var domEvent = event.data, | ||
52 | isCtrlKeyDown = | ||
53 | // Safari on Windows always show 'ctrlKey' as true in 'contextmenu' event, | ||
54 | // which make this property unreliable. (#4826) | ||
55 | ( CKEDITOR.env.webkit ? holdCtrlKey : ( CKEDITOR.env.mac ? domEvent.$.metaKey : domEvent.$.ctrlKey ) ); | ||
56 | |||
57 | if ( nativeContextMenuOnCtrl && isCtrlKeyDown ) | ||
58 | return; | ||
59 | |||
60 | // Cancel the browser context menu. | ||
61 | domEvent.preventDefault(); | ||
62 | |||
63 | // Fix selection when non-editable element in Webkit/Blink (Mac) (#11306). | ||
64 | if ( CKEDITOR.env.mac && CKEDITOR.env.webkit ) { | ||
65 | var editor = this.editor, | ||
66 | contentEditableParent = new CKEDITOR.dom.elementPath( domEvent.getTarget(), editor.editable() ).contains( function( el ) { | ||
67 | // Return when non-editable or nested editable element is found. | ||
68 | return el.hasAttribute( 'contenteditable' ); | ||
69 | }, true ); // Exclude editor's editable. | ||
70 | |||
71 | // Fake selection for non-editables only (to exclude nested editables). | ||
72 | if ( contentEditableParent && contentEditableParent.getAttribute( 'contenteditable' ) == 'false' ) | ||
73 | editor.getSelection().fake( contentEditableParent ); | ||
74 | } | ||
75 | |||
76 | var doc = domEvent.getTarget().getDocument(), | ||
77 | offsetParent = domEvent.getTarget().getDocument().getDocumentElement(), | ||
78 | fromFrame = !doc.equals( CKEDITOR.document ), | ||
79 | scroll = doc.getWindow().getScrollPosition(), | ||
80 | offsetX = fromFrame ? domEvent.$.clientX : domEvent.$.pageX || scroll.x + domEvent.$.clientX, | ||
81 | offsetY = fromFrame ? domEvent.$.clientY : domEvent.$.pageY || scroll.y + domEvent.$.clientY; | ||
82 | |||
83 | CKEDITOR.tools.setTimeout( function() { | ||
84 | this.open( offsetParent, null, offsetX, offsetY ); | ||
85 | |||
86 | // IE needs a short while to allow selection change before opening menu. (#7908) | ||
87 | }, CKEDITOR.env.ie ? 200 : 0, this ); | ||
88 | }, this ); | ||
89 | |||
90 | if ( CKEDITOR.env.webkit ) { | ||
91 | var holdCtrlKey, | ||
92 | onKeyDown = function( event ) { | ||
93 | holdCtrlKey = CKEDITOR.env.mac ? event.data.$.metaKey : event.data.$.ctrlKey; | ||
94 | }, | ||
95 | resetOnKeyUp = function() { | ||
96 | holdCtrlKey = 0; | ||
97 | }; | ||
98 | |||
99 | element.on( 'keydown', onKeyDown ); | ||
100 | element.on( 'keyup', resetOnKeyUp ); | ||
101 | element.on( 'contextmenu', resetOnKeyUp ); | ||
102 | } | ||
103 | }, | ||
104 | |||
105 | /** | ||
106 | * Opens the context menu in the given location. See the {@link CKEDITOR.menu#show} method. | ||
107 | * | ||
108 | * @param {CKEDITOR.dom.element} offsetParent | ||
109 | * @param {Number} [corner] | ||
110 | * @param {Number} [offsetX] | ||
111 | * @param {Number} [offsetY] | ||
112 | */ | ||
113 | open: function( offsetParent, corner, offsetX, offsetY ) { | ||
114 | this.editor.focus(); | ||
115 | offsetParent = offsetParent || CKEDITOR.document.getDocumentElement(); | ||
116 | |||
117 | // #9362: Force selection check to update commands' states in the new context. | ||
118 | this.editor.selectionChange( 1 ); | ||
119 | |||
120 | this.show( offsetParent, corner, offsetX, offsetY ); | ||
121 | } | ||
122 | } | ||
123 | } ); | ||
124 | }, | ||
125 | |||
126 | beforeInit: function( editor ) { | ||
127 | /** | ||
128 | * @readonly | ||
129 | * @property {CKEDITOR.plugins.contextMenu} contextMenu | ||
130 | * @member CKEDITOR.editor | ||
131 | */ | ||
132 | var contextMenu = editor.contextMenu = new CKEDITOR.plugins.contextMenu( editor ); | ||
133 | |||
134 | editor.on( 'contentDom', function() { | ||
135 | contextMenu.addTarget( editor.editable(), editor.config.browserContextMenuOnCtrl !== false ); | ||
136 | } ); | ||
137 | |||
138 | editor.addCommand( 'contextMenu', { | ||
139 | exec: function() { | ||
140 | editor.contextMenu.open( editor.document.getBody() ); | ||
141 | } | ||
142 | } ); | ||
143 | |||
144 | editor.setKeystroke( CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' ); | ||
145 | editor.setKeystroke( CKEDITOR.CTRL + CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' ); | ||
146 | } | ||
147 | } ); | ||
148 | |||
149 | /** | ||
150 | * Whether to show the browser native context menu when the <kbd>Ctrl</kbd> or | ||
151 | * <kbd>Meta</kbd> (Mac) key is pressed on opening the context menu with the | ||
152 | * right mouse button click or the <kbd>Menu</kbd> key. | ||
153 | * | ||
154 | * config.browserContextMenuOnCtrl = false; | ||
155 | * | ||
156 | * @since 3.0.2 | ||
157 | * @cfg {Boolean} [browserContextMenuOnCtrl=true] | ||
158 | * @member CKEDITOR.config | ||
159 | */ | ||
diff --git a/sources/plugins/dialog/dialogDefinition.js b/sources/plugins/dialog/dialogDefinition.js new file mode 100644 index 0000000..df5870c --- /dev/null +++ b/sources/plugins/dialog/dialogDefinition.js | |||
@@ -0,0 +1,1032 @@ | |||
1 | // jscs:disable disallowMixedSpacesAndTabs | ||
2 | /** | ||
3 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
4 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
5 | */ | ||
6 | |||
7 | /** | ||
8 | * @fileOverview Defines the "virtual" dialog, dialog content and dialog button | ||
9 | * definition classes. | ||
10 | */ | ||
11 | |||
12 | /** | ||
13 | * The definition of a dialog window. | ||
14 | * | ||
15 | * This class is not really part of the API. It just illustrates the properties | ||
16 | * that developers can use to define and create dialogs. | ||
17 | * | ||
18 | * // There is no constructor for this class, the user just has to define an | ||
19 | * // object with the appropriate properties. | ||
20 | * | ||
21 | * CKEDITOR.dialog.add( 'testOnly', function( editor ) { | ||
22 | * return { | ||
23 | * title: 'Test Dialog', | ||
24 | * resizable: CKEDITOR.DIALOG_RESIZE_BOTH, | ||
25 | * minWidth: 500, | ||
26 | * minHeight: 400, | ||
27 | * contents: [ | ||
28 | * { | ||
29 | * id: 'tab1', | ||
30 | * label: 'First Tab', | ||
31 | * title: 'First Tab Title', | ||
32 | * accessKey: 'Q', | ||
33 | * elements: [ | ||
34 | * { | ||
35 | * type: 'text', | ||
36 | * label: 'Test Text 1', | ||
37 | * id: 'testText1', | ||
38 | * 'default': 'hello world!' | ||
39 | * } | ||
40 | * ] | ||
41 | * } | ||
42 | * ] | ||
43 | * }; | ||
44 | * } ); | ||
45 | * | ||
46 | * @class CKEDITOR.dialog.definition | ||
47 | */ | ||
48 | |||
49 | /** | ||
50 | * The dialog title, displayed in the dialog's header. Required. | ||
51 | * | ||
52 | * @property {String} title | ||
53 | */ | ||
54 | |||
55 | /** | ||
56 | * How the dialog can be resized, must be one of the four contents defined below. | ||
57 | * | ||
58 | * * {@link CKEDITOR#DIALOG_RESIZE_NONE} | ||
59 | * * {@link CKEDITOR#DIALOG_RESIZE_WIDTH} | ||
60 | * * {@link CKEDITOR#DIALOG_RESIZE_HEIGHT} | ||
61 | * * {@link CKEDITOR#DIALOG_RESIZE_BOTH} | ||
62 | * | ||
63 | * @property {Number} [resizable=CKEDITOR.DIALOG_RESIZE_NONE] | ||
64 | */ | ||
65 | |||
66 | /** | ||
67 | * The minimum width of the dialog, in pixels. | ||
68 | * | ||
69 | * @property {Number} [minWidth=600] | ||
70 | */ | ||
71 | |||
72 | /** | ||
73 | * The minimum height of the dialog, in pixels. | ||
74 | * | ||
75 | * @property {Number} [minHeight=400] | ||
76 | */ | ||
77 | |||
78 | |||
79 | /** | ||
80 | * The initial width of the dialog, in pixels. | ||
81 | * | ||
82 | * @since 3.5.3 | ||
83 | * @property {Number} [width=CKEDITOR.dialog.definition#minWidth] | ||
84 | */ | ||
85 | |||
86 | /** | ||
87 | * The initial height of the dialog, in pixels. | ||
88 | * | ||
89 | * @since 3.5.3 | ||
90 | * @property {Number} [height=CKEDITOR.dialog.definition.minHeight] | ||
91 | */ | ||
92 | |||
93 | /** | ||
94 | * The buttons in the dialog, defined as an array of | ||
95 | * {@link CKEDITOR.dialog.definition.button} objects. | ||
96 | * | ||
97 | * @property {Array} [buttons=[ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ]] | ||
98 | */ | ||
99 | |||
100 | /** | ||
101 | * The contents in the dialog, defined as an array of | ||
102 | * {@link CKEDITOR.dialog.definition.content} objects. Required. | ||
103 | * | ||
104 | * @property {Array} contents | ||
105 | */ | ||
106 | |||
107 | /** | ||
108 | * The function to execute when OK is pressed. | ||
109 | * | ||
110 | * @property {Function} onOk | ||
111 | */ | ||
112 | |||
113 | /** | ||
114 | * The function to execute when Cancel is pressed. | ||
115 | * | ||
116 | * @property {Function} onCancel | ||
117 | */ | ||
118 | |||
119 | /** | ||
120 | * The function to execute when the dialog is displayed for the first time. | ||
121 | * | ||
122 | * @property {Function} onLoad | ||
123 | */ | ||
124 | |||
125 | /** | ||
126 | * The function to execute when the dialog is loaded (executed every time the dialog is opened). | ||
127 | * | ||
128 | * @property {Function} onShow | ||
129 | */ | ||
130 | |||
131 | /** | ||
132 | * This class is not really part of the API. It just illustrates the properties | ||
133 | * that developers can use to define and create dialog content pages. | ||
134 | * | ||
135 | * @class CKEDITOR.dialog.definition.content. | ||
136 | */ | ||
137 | |||
138 | /** | ||
139 | * The id of the content page. | ||
140 | * | ||
141 | * @property {String} id | ||
142 | */ | ||
143 | |||
144 | /** | ||
145 | * The tab label of the content page. | ||
146 | * | ||
147 | * @property {String} label | ||
148 | */ | ||
149 | |||
150 | /** | ||
151 | * The popup message of the tab label. | ||
152 | * | ||
153 | * @property {String} title | ||
154 | */ | ||
155 | |||
156 | /** | ||
157 | * The CTRL hotkey for switching to the tab. | ||
158 | * | ||
159 | * contentDefinition.accessKey = 'Q'; // Switch to this page when CTRL-Q is pressed. | ||
160 | * | ||
161 | * @property {String} accessKey | ||
162 | */ | ||
163 | |||
164 | /** | ||
165 | * The UI elements contained in this content page, defined as an array of | ||
166 | * {@link CKEDITOR.dialog.definition.uiElement} objects. | ||
167 | * | ||
168 | * @property {Array} elements | ||
169 | */ | ||
170 | |||
171 | /** | ||
172 | * The definition of user interface element (textarea, radio etc). | ||
173 | * | ||
174 | * This class is not really part of the API. It just illustrates the properties | ||
175 | * that developers can use to define and create dialog UI elements. | ||
176 | * | ||
177 | * @class CKEDITOR.dialog.definition.uiElement | ||
178 | * @see CKEDITOR.ui.dialog.uiElement | ||
179 | */ | ||
180 | |||
181 | /** | ||
182 | * The id of the UI element. | ||
183 | * | ||
184 | * @property {String} id | ||
185 | */ | ||
186 | |||
187 | /** | ||
188 | * The type of the UI element. Required. | ||
189 | * | ||
190 | * @property {String} type | ||
191 | */ | ||
192 | |||
193 | /** | ||
194 | * The popup label of the UI element. | ||
195 | * | ||
196 | * @property {String} title | ||
197 | */ | ||
198 | |||
199 | /** | ||
200 | * The content that needs to be allowed to enable this UI element. | ||
201 | * All formats accepted by {@link CKEDITOR.filter#check} may be used. | ||
202 | * | ||
203 | * When all UI elements in a tab are disabled, this tab will be disabled automatically. | ||
204 | * | ||
205 | * @property {String/Object/CKEDITOR.style} requiredContent | ||
206 | */ | ||
207 | |||
208 | /** | ||
209 | * CSS class names to append to the UI element. | ||
210 | * | ||
211 | * @property {String} className | ||
212 | */ | ||
213 | |||
214 | /** | ||
215 | * Inline CSS classes to append to the UI element. | ||
216 | * | ||
217 | * @property {String} style | ||
218 | */ | ||
219 | |||
220 | /** | ||
221 | * Horizontal alignment (in container) of the UI element. | ||
222 | * | ||
223 | * @property {String} align | ||
224 | */ | ||
225 | |||
226 | /** | ||
227 | * Function to execute the first time the UI element is displayed. | ||
228 | * | ||
229 | * @property {Function} onLoad | ||
230 | */ | ||
231 | |||
232 | /** | ||
233 | * Function to execute whenever the UI element's parent dialog is displayed. | ||
234 | * | ||
235 | * @property {Function} onShow | ||
236 | */ | ||
237 | |||
238 | /** | ||
239 | * Function to execute whenever the UI element's parent dialog is closed. | ||
240 | * | ||
241 | * @property {Function} onHide | ||
242 | */ | ||
243 | |||
244 | /** | ||
245 | * Function to execute whenever the UI element's parent | ||
246 | * dialog's {@link CKEDITOR.dialog#setupContent} method is executed. | ||
247 | * It usually takes care of the respective UI element as a standalone element. | ||
248 | * | ||
249 | * @property {Function} setup | ||
250 | */ | ||
251 | |||
252 | /** | ||
253 | * Function to execute whenever the UI element's parent | ||
254 | * dialog's {@link CKEDITOR.dialog#commitContent} method is executed. | ||
255 | * It usually takes care of the respective UI element as a standalone element. | ||
256 | * | ||
257 | * @property {Function} commit | ||
258 | */ | ||
259 | |||
260 | // ----- hbox ----------------------------------------------------------------- | ||
261 | |||
262 | /** | ||
263 | * Horizontal layout box for dialog UI elements, auto-expends to available width of container. | ||
264 | * | ||
265 | * This class is not really part of the API. It just illustrates the properties | ||
266 | * that developers can use to define and create horizontal layouts. | ||
267 | * | ||
268 | * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.hbox} object and can be accessed with {@link CKEDITOR.dialog#getContentElement}. | ||
269 | * | ||
270 | * // There is no constructor for this class, the user just has to define an | ||
271 | * // object with the appropriate properties. | ||
272 | * | ||
273 | * // Example: | ||
274 | * { | ||
275 | * type: 'hbox', | ||
276 | * widths: [ '25%', '25%', '50%' ], | ||
277 | * children: [ | ||
278 | * { | ||
279 | * type: 'text', | ||
280 | * id: 'id1', | ||
281 | * width: '40px', | ||
282 | * }, | ||
283 | * { | ||
284 | * type: 'text', | ||
285 | * id: 'id2', | ||
286 | * width: '40px', | ||
287 | * }, | ||
288 | * { | ||
289 | * type: 'text', | ||
290 | * id: 'id3' | ||
291 | * } | ||
292 | * ] | ||
293 | * } | ||
294 | * | ||
295 | * @class CKEDITOR.dialog.definition.hbox | ||
296 | * @extends CKEDITOR.dialog.definition.uiElement | ||
297 | */ | ||
298 | |||
299 | /** | ||
300 | * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. | ||
301 | * | ||
302 | * @property {Array} children | ||
303 | */ | ||
304 | |||
305 | /** | ||
306 | * (Optional) The widths of child cells. | ||
307 | * | ||
308 | * @property {Array} widths | ||
309 | */ | ||
310 | |||
311 | /** | ||
312 | * (Optional) The height of the layout. | ||
313 | * | ||
314 | * @property {Number} height | ||
315 | */ | ||
316 | |||
317 | /** | ||
318 | * The CSS styles to apply to this element. | ||
319 | * | ||
320 | * @property {String} styles | ||
321 | */ | ||
322 | |||
323 | /** | ||
324 | * (Optional) The padding width inside child cells. Example: 0, 1. | ||
325 | * | ||
326 | * @property {Number} padding | ||
327 | */ | ||
328 | |||
329 | /** | ||
330 | * (Optional) The alignment of the whole layout. Example: center, top. | ||
331 | * | ||
332 | * @property {String} align | ||
333 | */ | ||
334 | |||
335 | // ----- vbox ----------------------------------------------------------------- | ||
336 | |||
337 | /** | ||
338 | * Vertical layout box for dialog UI elements. | ||
339 | * | ||
340 | * This class is not really part of the API. It just illustrates the properties | ||
341 | * that developers can use to define and create vertical layouts. | ||
342 | * | ||
343 | * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.vbox} object and can | ||
344 | * be accessed with {@link CKEDITOR.dialog#getContentElement}. | ||
345 | * | ||
346 | * // There is no constructor for this class, the user just has to define an | ||
347 | * // object with the appropriate properties. | ||
348 | * | ||
349 | * // Example: | ||
350 | * { | ||
351 | * type: 'vbox', | ||
352 | * align: 'right', | ||
353 | * width: '200px', | ||
354 | * children: [ | ||
355 | * { | ||
356 | * type: 'text', | ||
357 | * id: 'age', | ||
358 | * label: 'Age' | ||
359 | * }, | ||
360 | * { | ||
361 | * type: 'text', | ||
362 | * id: 'sex', | ||
363 | * label: 'Sex' | ||
364 | * }, | ||
365 | * { | ||
366 | * type: 'text', | ||
367 | * id: 'nationality', | ||
368 | * label: 'Nationality' | ||
369 | * } | ||
370 | * ] | ||
371 | * } | ||
372 | * | ||
373 | * @class CKEDITOR.dialog.definition.vbox | ||
374 | * @extends CKEDITOR.dialog.definition.uiElement | ||
375 | */ | ||
376 | |||
377 | /** | ||
378 | * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. | ||
379 | * | ||
380 | * @property {Array} children | ||
381 | */ | ||
382 | |||
383 | /** | ||
384 | * (Optional) The width of the layout. | ||
385 | * | ||
386 | * @property {Array} width | ||
387 | */ | ||
388 | |||
389 | /** | ||
390 | * (Optional) The heights of individual cells. | ||
391 | * | ||
392 | * @property {Number} heights | ||
393 | */ | ||
394 | |||
395 | /** | ||
396 | * The CSS styles to apply to this element. | ||
397 | * | ||
398 | * @property {String} styles | ||
399 | */ | ||
400 | |||
401 | /** | ||
402 | * (Optional) The padding width inside child cells. Example: 0, 1. | ||
403 | * | ||
404 | * @property {Number} padding | ||
405 | */ | ||
406 | |||
407 | /** | ||
408 | * (Optional) The alignment of the whole layout. Example: center, top. | ||
409 | * | ||
410 | * @property {String} align | ||
411 | */ | ||
412 | |||
413 | /** | ||
414 | * (Optional) Whether the layout should expand vertically to fill its container. | ||
415 | * | ||
416 | * @property {Boolean} expand | ||
417 | */ | ||
418 | |||
419 | // ----- labeled element ------------------------------------------------------ | ||
420 | |||
421 | /** | ||
422 | * The definition of labeled user interface element (textarea, textInput etc). | ||
423 | * | ||
424 | * This class is not really part of the API. It just illustrates the properties | ||
425 | * that developers can use to define and create dialog UI elements. | ||
426 | * | ||
427 | * @class CKEDITOR.dialog.definition.labeledElement | ||
428 | * @extends CKEDITOR.dialog.definition.uiElement | ||
429 | * @see CKEDITOR.ui.dialog.labeledElement | ||
430 | */ | ||
431 | |||
432 | /** | ||
433 | * The label of the UI element. | ||
434 | * | ||
435 | * { | ||
436 | * type: 'text', | ||
437 | * label: 'My Label' | ||
438 | * } | ||
439 | * | ||
440 | * @property {String} label | ||
441 | */ | ||
442 | |||
443 | /** | ||
444 | * (Optional) Specify the layout of the label. Set to `'horizontal'` for horizontal layout. | ||
445 | * The default layout is vertical. | ||
446 | * | ||
447 | * { | ||
448 | * type: 'text', | ||
449 | * label: 'My Label', | ||
450 | * labelLayout: 'horizontal' | ||
451 | * } | ||
452 | * | ||
453 | * @property {String} labelLayout | ||
454 | */ | ||
455 | |||
456 | /** | ||
457 | * (Optional) Applies only to horizontal layouts: a two elements array of lengths to specify the widths of the | ||
458 | * label and the content element. See also {@link CKEDITOR.dialog.definition.labeledElement#labelLayout}. | ||
459 | * | ||
460 | * { | ||
461 | * type: 'text', | ||
462 | * label: 'My Label', | ||
463 | * labelLayout: 'horizontal', | ||
464 | * widths: [100, 200] | ||
465 | * } | ||
466 | * | ||
467 | * @property {Array} widths | ||
468 | */ | ||
469 | |||
470 | /** | ||
471 | * Specify the inline style of the uiElement label. | ||
472 | * | ||
473 | * { | ||
474 | * type: 'text', | ||
475 | * label: 'My Label', | ||
476 | * labelStyle: 'color: red' | ||
477 | * } | ||
478 | * | ||
479 | * @property {String} labelStyle | ||
480 | */ | ||
481 | |||
482 | |||
483 | /** | ||
484 | * Specify the inline style of the input element. | ||
485 | * | ||
486 | * { | ||
487 | * type: 'text', | ||
488 | * label: 'My Label', | ||
489 | * inputStyle: 'text-align: center' | ||
490 | * } | ||
491 | * | ||
492 | * @since 3.6.1 | ||
493 | * @property {String} inputStyle | ||
494 | */ | ||
495 | |||
496 | /** | ||
497 | * Specify the inline style of the input element container. | ||
498 | * | ||
499 | * { | ||
500 | * type: 'text', | ||
501 | * label: 'My Label', | ||
502 | * controlStyle: 'width: 3em' | ||
503 | * } | ||
504 | * | ||
505 | * @since 3.6.1 | ||
506 | * @property {String} controlStyle | ||
507 | */ | ||
508 | |||
509 | // ----- button --------------------------------------------------------------- | ||
510 | |||
511 | /** | ||
512 | * The definition of a button. | ||
513 | * | ||
514 | * This class is not really part of the API. It just illustrates the properties | ||
515 | * that developers can use to define and create buttons. | ||
516 | * | ||
517 | * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.button} object | ||
518 | * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. | ||
519 | * | ||
520 | * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. | ||
521 | * | ||
522 | * // There is no constructor for this class, the user just has to define an | ||
523 | * // object with the appropriate properties. | ||
524 | * | ||
525 | * // Example: | ||
526 | * { | ||
527 | * type: 'button', | ||
528 | * id: 'buttonId', | ||
529 | * label: 'Click me', | ||
530 | * title: 'My title', | ||
531 | * onClick: function() { | ||
532 | * // this = CKEDITOR.ui.dialog.button | ||
533 | * alert( 'Clicked: ' + this.id ); | ||
534 | * } | ||
535 | * } | ||
536 | * | ||
537 | * @class CKEDITOR.dialog.definition.button | ||
538 | * @extends CKEDITOR.dialog.definition.uiElement | ||
539 | */ | ||
540 | |||
541 | /** | ||
542 | * Whether the button is disabled. | ||
543 | * | ||
544 | * @property {Boolean} disabled | ||
545 | */ | ||
546 | |||
547 | /** | ||
548 | * The label of the UI element. | ||
549 | * | ||
550 | * @property {String} label | ||
551 | */ | ||
552 | |||
553 | // ----- checkbox ------ | ||
554 | /** | ||
555 | * The definition of a checkbox element. | ||
556 | * | ||
557 | * This class is not really part of the API. It just illustrates the properties | ||
558 | * that developers can use to define and create groups of checkbox buttons. | ||
559 | * | ||
560 | * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.checkbox} object | ||
561 | * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. | ||
562 | * | ||
563 | * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. | ||
564 | * | ||
565 | * // There is no constructor for this class, the user just has to define an | ||
566 | * // object with the appropriate properties. | ||
567 | * | ||
568 | * // Example: | ||
569 | * { | ||
570 | * type: 'checkbox', | ||
571 | * id: 'agree', | ||
572 | * label: 'I agree', | ||
573 | * 'default': 'checked', | ||
574 | * onClick: function() { | ||
575 | * // this = CKEDITOR.ui.dialog.checkbox | ||
576 | * alert( 'Checked: ' + this.getValue() ); | ||
577 | * } | ||
578 | * } | ||
579 | * | ||
580 | * @class CKEDITOR.dialog.definition.checkbox | ||
581 | * @extends CKEDITOR.dialog.definition.uiElement | ||
582 | */ | ||
583 | |||
584 | /** | ||
585 | * (Optional) The validation function. | ||
586 | * | ||
587 | * @property {Function} validate | ||
588 | */ | ||
589 | |||
590 | /** | ||
591 | * The label of the UI element. | ||
592 | * | ||
593 | * @property {String} label | ||
594 | */ | ||
595 | |||
596 | /** | ||
597 | * The default state. | ||
598 | * | ||
599 | * @property {String} [default='' (unchecked)] | ||
600 | */ | ||
601 | |||
602 | // ----- file ----------------------------------------------------------------- | ||
603 | |||
604 | /** | ||
605 | * The definition of a file upload input. | ||
606 | * | ||
607 | * This class is not really part of the API. It just illustrates the properties | ||
608 | * that developers can use to define and create file upload elements. | ||
609 | * | ||
610 | * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.file} object | ||
611 | * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. | ||
612 | * | ||
613 | * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. | ||
614 | * | ||
615 | * // There is no constructor for this class, the user just has to define an | ||
616 | * // object with the appropriate properties. | ||
617 | * | ||
618 | * // Example: | ||
619 | * { | ||
620 | * type: 'file', | ||
621 | * id: 'upload', | ||
622 | * label: 'Select file from your computer', | ||
623 | * size: 38 | ||
624 | * }, | ||
625 | * { | ||
626 | * type: 'fileButton', | ||
627 | * id: 'fileId', | ||
628 | * label: 'Upload file', | ||
629 | * 'for': [ 'tab1', 'upload' ], | ||
630 | * filebrowser: { | ||
631 | * onSelect: function( fileUrl, data ) { | ||
632 | * alert( 'Successfully uploaded: ' + fileUrl ); | ||
633 | * } | ||
634 | * } | ||
635 | * } | ||
636 | * | ||
637 | * @class CKEDITOR.dialog.definition.file | ||
638 | * @extends CKEDITOR.dialog.definition.labeledElement | ||
639 | */ | ||
640 | |||
641 | /** | ||
642 | * (Optional) The validation function. | ||
643 | * | ||
644 | * @property {Function} validate | ||
645 | */ | ||
646 | |||
647 | /** | ||
648 | * (Optional) The action attribute of the form element associated with this file upload input. | ||
649 | * If empty, CKEditor will use path to server connector for currently opened folder. | ||
650 | * | ||
651 | * @property {String} action | ||
652 | */ | ||
653 | |||
654 | /** | ||
655 | * The size of the UI element. | ||
656 | * | ||
657 | * @property {Number} size | ||
658 | */ | ||
659 | |||
660 | // ----- fileButton ----------------------------------------------------------- | ||
661 | |||
662 | /** | ||
663 | * The definition of a button for submitting the file in a file upload input. | ||
664 | * | ||
665 | * This class is not really part of the API. It just illustrates the properties | ||
666 | * that developers can use to define and create a button for submitting the file in a file upload input. | ||
667 | * | ||
668 | * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.fileButton} object | ||
669 | * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. | ||
670 | * | ||
671 | * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. | ||
672 | * | ||
673 | * @class CKEDITOR.dialog.definition.fileButton | ||
674 | * @extends CKEDITOR.dialog.definition.uiElement | ||
675 | */ | ||
676 | |||
677 | /** | ||
678 | * (Optional) The validation function. | ||
679 | * | ||
680 | * @property {Function} validate | ||
681 | */ | ||
682 | |||
683 | /** | ||
684 | * The label of the UI element. | ||
685 | * | ||
686 | * @property {String} label | ||
687 | */ | ||
688 | |||
689 | /** | ||
690 | * The instruction for CKEditor how to deal with file upload. | ||
691 | * By default, the file and fileButton elements will not work "as expected" if this attribute is not set. | ||
692 | * | ||
693 | * // Update field with id 'txtUrl' in the 'tab1' tab when file is uploaded. | ||
694 | * filebrowser: 'tab1:txtUrl' | ||
695 | * | ||
696 | * // Call custom onSelect function when file is successfully uploaded. | ||
697 | * filebrowser: { | ||
698 | * onSelect: function( fileUrl, data ) { | ||
699 | * alert( 'Successfully uploaded: ' + fileUrl ); | ||
700 | * } | ||
701 | * } | ||
702 | * | ||
703 | * @property {String} filebrowser/Object | ||
704 | */ | ||
705 | |||
706 | /** | ||
707 | * An array that contains pageId and elementId of the file upload input element for which this button is created. | ||
708 | * | ||
709 | * [ pageId, elementId ] | ||
710 | * | ||
711 | * @property {String} for | ||
712 | */ | ||
713 | |||
714 | // ----- html ----------------------------------------------------------------- | ||
715 | |||
716 | /** | ||
717 | * The definition of a raw HTML element. | ||
718 | * | ||
719 | * This class is not really part of the API. It just illustrates the properties | ||
720 | * that developers can use to define and create elements made from raw HTML code. | ||
721 | * | ||
722 | * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.html} object | ||
723 | * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. | ||
724 | * | ||
725 | * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. | ||
726 | * To access HTML elements use {@link CKEDITOR.dom.document#getById}. | ||
727 | * | ||
728 | * // There is no constructor for this class, the user just has to define an | ||
729 | * // object with the appropriate properties. | ||
730 | * | ||
731 | * // Example 1: | ||
732 | * { | ||
733 | * type: 'html', | ||
734 | * html: '<h3>This is some sample HTML content.</h3>' | ||
735 | * } | ||
736 | * | ||
737 | * // Example 2: | ||
738 | * // Complete sample with document.getById() call when the "Ok" button is clicked. | ||
739 | * var dialogDefinition = { | ||
740 | * title: 'Sample dialog', | ||
741 | * minWidth: 300, | ||
742 | * minHeight: 200, | ||
743 | * onOk: function() { | ||
744 | * // "this" is now a CKEDITOR.dialog object. | ||
745 | * var document = this.getElement().getDocument(); | ||
746 | * // document = CKEDITOR.dom.document | ||
747 | * var element = <b>document.getById( 'myDiv' );</b> | ||
748 | * if ( element ) | ||
749 | * alert( element.getHtml() ); | ||
750 | * }, | ||
751 | * contents: [ | ||
752 | * { | ||
753 | * id: 'tab1', | ||
754 | * label: '', | ||
755 | * title: '', | ||
756 | * elements: [ | ||
757 | * { | ||
758 | * type: 'html', | ||
759 | * html: '<div id="myDiv">Sample <b>text</b>.</div><div id="otherId">Another div.</div>' | ||
760 | * } | ||
761 | * ] | ||
762 | * } | ||
763 | * ], | ||
764 | * buttons: [ CKEDITOR.dialog.cancelButton, CKEDITOR.dialog.okButton ] | ||
765 | * }; | ||
766 | * | ||
767 | * @class CKEDITOR.dialog.definition.html | ||
768 | * @extends CKEDITOR.dialog.definition.uiElement | ||
769 | */ | ||
770 | |||
771 | /** | ||
772 | * (Required) HTML code of this element. | ||
773 | * | ||
774 | * @property {String} html | ||
775 | */ | ||
776 | |||
777 | // ----- radio ---------------------------------------------------------------- | ||
778 | |||
779 | /** | ||
780 | * The definition of a radio group. | ||
781 | * | ||
782 | * This class is not really part of the API. It just illustrates the properties | ||
783 | * that developers can use to define and create groups of radio buttons. | ||
784 | * | ||
785 | * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.radio} object | ||
786 | * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. | ||
787 | * | ||
788 | * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. | ||
789 | * | ||
790 | * // There is no constructor for this class, the user just has to define an | ||
791 | * // object with the appropriate properties. | ||
792 | * | ||
793 | * // Example: | ||
794 | * { | ||
795 | * type: 'radio', | ||
796 | * id: 'country', | ||
797 | * label: 'Which country is bigger', | ||
798 | * items: [ [ 'France', 'FR' ], [ 'Germany', 'DE' ] ], | ||
799 | * style: 'color: green', | ||
800 | * 'default': 'DE', | ||
801 | * onClick: function() { | ||
802 | * // this = CKEDITOR.ui.dialog.radio | ||
803 | * alert( 'Current value: ' + this.getValue() ); | ||
804 | * } | ||
805 | * } | ||
806 | * | ||
807 | * @class CKEDITOR.dialog.definition.radio | ||
808 | * @extends CKEDITOR.dialog.definition.labeledElement | ||
809 | */ | ||
810 | |||
811 | /** | ||
812 | * The default value. | ||
813 | * | ||
814 | * @property {String} default | ||
815 | */ | ||
816 | |||
817 | /** | ||
818 | * (Optional) The validation function. | ||
819 | * | ||
820 | * @property {Function} validate | ||
821 | */ | ||
822 | |||
823 | /** | ||
824 | * An array of options. Each option is a 1- or 2-item array of format `[ 'Description', 'Value' ]`. | ||
825 | * If `'Value'` is missing, then the value would be assumed to be the same as the description. | ||
826 | * | ||
827 | * @property {Array} items | ||
828 | */ | ||
829 | |||
830 | // ----- selectElement -------------------------------------------------------- | ||
831 | |||
832 | /** | ||
833 | * The definition of a select element. | ||
834 | * | ||
835 | * This class is not really part of the API. It just illustrates the properties | ||
836 | * that developers can use to define and create select elements. | ||
837 | * | ||
838 | * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.select} object | ||
839 | * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. | ||
840 | * | ||
841 | * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. | ||
842 | * | ||
843 | * // There is no constructor for this class, the user just has to define an | ||
844 | * // object with the appropriate properties. | ||
845 | * | ||
846 | * // Example: | ||
847 | * { | ||
848 | * type: 'select', | ||
849 | * id: 'sport', | ||
850 | * label: 'Select your favourite sport', | ||
851 | * items: [ [ 'Basketball' ], [ 'Baseball' ], [ 'Hockey' ], [ 'Football' ] ], | ||
852 | * 'default': 'Football', | ||
853 | * onChange: function( api ) { | ||
854 | * // this = CKEDITOR.ui.dialog.select | ||
855 | * alert( 'Current value: ' + this.getValue() ); | ||
856 | * } | ||
857 | * } | ||
858 | * | ||
859 | * @class CKEDITOR.dialog.definition.select | ||
860 | * @extends CKEDITOR.dialog.definition.labeledElement | ||
861 | */ | ||
862 | |||
863 | /** | ||
864 | * The default value. | ||
865 | * | ||
866 | * @property {String} default | ||
867 | */ | ||
868 | |||
869 | /** | ||
870 | * (Optional) The validation function. | ||
871 | * | ||
872 | * @property {Function} validate | ||
873 | */ | ||
874 | |||
875 | /** | ||
876 | * An array of options. Each option is a 1- or 2-item array of format `[ 'Description', 'Value' ]`. | ||
877 | * If `'Value'` is missing, then the value would be assumed to be the same as the description. | ||
878 | * | ||
879 | * @property {Array} items | ||
880 | */ | ||
881 | |||
882 | /** | ||
883 | * (Optional) Set this to true if you'd like to have a multiple-choice select box. | ||
884 | * | ||
885 | * @property {Boolean} [multiple=false] | ||
886 | */ | ||
887 | |||
888 | /** | ||
889 | * (Optional) The number of items to display in the select box. | ||
890 | * | ||
891 | * @property {Number} size | ||
892 | */ | ||
893 | |||
894 | // ----- textInput ------------------------------------------------------------ | ||
895 | |||
896 | /** | ||
897 | * The definition of a text field (single line). | ||
898 | * | ||
899 | * This class is not really part of the API. It just illustrates the properties | ||
900 | * that developers can use to define and create text fields. | ||
901 | * | ||
902 | * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.textInput} object | ||
903 | * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. | ||
904 | * | ||
905 | * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. | ||
906 | * | ||
907 | * // There is no constructor for this class, the user just has to define an | ||
908 | * // object with the appropriate properties. | ||
909 | * | ||
910 | * { | ||
911 | * type: 'text', | ||
912 | * id: 'name', | ||
913 | * label: 'Your name', | ||
914 | * 'default': '', | ||
915 | * validate: function() { | ||
916 | * if ( !this.getValue() ) { | ||
917 | * api.openMsgDialog( '', 'Name cannot be empty.' ); | ||
918 | * return false; | ||
919 | * } | ||
920 | * } | ||
921 | * } | ||
922 | * | ||
923 | * @class CKEDITOR.dialog.definition.textInput | ||
924 | * @extends CKEDITOR.dialog.definition.labeledElement | ||
925 | */ | ||
926 | |||
927 | /** | ||
928 | * The default value. | ||
929 | * | ||
930 | * @property {String} default | ||
931 | */ | ||
932 | |||
933 | /** | ||
934 | * (Optional) The maximum length. | ||
935 | * | ||
936 | * @property {Number} maxLength | ||
937 | */ | ||
938 | |||
939 | /** | ||
940 | * (Optional) The size of the input field. | ||
941 | * | ||
942 | * @property {Number} size | ||
943 | */ | ||
944 | |||
945 | /** | ||
946 | * (Optional) The validation function. | ||
947 | * | ||
948 | * @property {Function} validate | ||
949 | */ | ||
950 | |||
951 | /** | ||
952 | * @property bidi | ||
953 | * @inheritdoc CKEDITOR.dialog.definition.textarea#bidi | ||
954 | */ | ||
955 | |||
956 | // ----- textarea ------------------------------------------------------------- | ||
957 | |||
958 | /** | ||
959 | * The definition of a text field (multiple lines). | ||
960 | * | ||
961 | * This class is not really part of the API. It just illustrates the properties | ||
962 | * that developers can use to define and create textarea. | ||
963 | * | ||
964 | * Once the dialog is opened, the created element becomes a {@link CKEDITOR.ui.dialog.textarea} object | ||
965 | * and can be accessed with {@link CKEDITOR.dialog#getContentElement}. | ||
966 | * | ||
967 | * For a complete example of dialog definition, please check {@link CKEDITOR.dialog#add}. | ||
968 | * | ||
969 | * // There is no constructor for this class, the user just has to define an | ||
970 | * // object with the appropriate properties. | ||
971 | * | ||
972 | * // Example: | ||
973 | * { | ||
974 | * type: 'textarea', | ||
975 | * id: 'message', | ||
976 | * label: 'Your comment', | ||
977 | * 'default': '', | ||
978 | * validate: function() { | ||
979 | * if ( this.getValue().length < 5 ) { | ||
980 | * api.openMsgDialog( 'The comment is too short.' ); | ||
981 | * return false; | ||
982 | * } | ||
983 | * } | ||
984 | * } | ||
985 | * | ||
986 | * @class CKEDITOR.dialog.definition.textarea | ||
987 | * @extends CKEDITOR.dialog.definition.labeledElement | ||
988 | */ | ||
989 | |||
990 | /** | ||
991 | * The number of rows. | ||
992 | * | ||
993 | * @property {Number} rows | ||
994 | */ | ||
995 | |||
996 | /** | ||
997 | * The number of columns. | ||
998 | * | ||
999 | * @property {Number} cols | ||
1000 | */ | ||
1001 | |||
1002 | /** | ||
1003 | * (Optional) The validation function. | ||
1004 | * | ||
1005 | * @property {Function} validate | ||
1006 | */ | ||
1007 | |||
1008 | /** | ||
1009 | * The default value. | ||
1010 | * | ||
1011 | * @property {String} default | ||
1012 | */ | ||
1013 | |||
1014 | /** | ||
1015 | * Whether the text direction of this input should be togglable using the following keystrokes: | ||
1016 | * | ||
1017 | * * *Shift+Alt+End* – switch to Right-To-Left, | ||
1018 | * * *Shift+Alt+Home* – switch to Left-To-Right. | ||
1019 | * | ||
1020 | * By default the input will be loaded without any text direction set, which means that | ||
1021 | * the direction will be inherited from the editor's text direction. | ||
1022 | * | ||
1023 | * If the direction was set, a marker will be prepended to every non-empty value of this input: | ||
1024 | * | ||
1025 | * * [`\u202A`](http://unicode.org/cldr/utility/character.jsp?a=202A) – for Right-To-Left, | ||
1026 | * * [`\u202B`](http://unicode.org/cldr/utility/character.jsp?a=202B) – for Left-To-Right. | ||
1027 | * | ||
1028 | * This marker allows for restoring the same text direction upon the next dialog opening. | ||
1029 | * | ||
1030 | * @since 4.5 | ||
1031 | * @property {Boolean} bidi | ||
1032 | */ | ||
diff --git a/sources/plugins/dialog/plugin.js b/sources/plugins/dialog/plugin.js new file mode 100644 index 0000000..3afe887 --- /dev/null +++ b/sources/plugins/dialog/plugin.js | |||
@@ -0,0 +1,3398 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview The floating dialog plugin. | ||
8 | */ | ||
9 | |||
10 | /** | ||
11 | * No resize for this dialog. | ||
12 | * | ||
13 | * @readonly | ||
14 | * @property {Number} [=0] | ||
15 | * @member CKEDITOR | ||
16 | */ | ||
17 | CKEDITOR.DIALOG_RESIZE_NONE = 0; | ||
18 | |||
19 | /** | ||
20 | * Only allow horizontal resizing for this dialog, disable vertical resizing. | ||
21 | * | ||
22 | * @readonly | ||
23 | * @property {Number} [=1] | ||
24 | * @member CKEDITOR | ||
25 | */ | ||
26 | CKEDITOR.DIALOG_RESIZE_WIDTH = 1; | ||
27 | |||
28 | /** | ||
29 | * Only allow vertical resizing for this dialog, disable horizontal resizing. | ||
30 | * | ||
31 | * @readonly | ||
32 | * @property {Number} [=2] | ||
33 | * @member CKEDITOR | ||
34 | */ | ||
35 | CKEDITOR.DIALOG_RESIZE_HEIGHT = 2; | ||
36 | |||
37 | /** | ||
38 | * Allow the dialog to be resized in both directions. | ||
39 | * | ||
40 | * @readonly | ||
41 | * @property {Number} [=3] | ||
42 | * @member CKEDITOR | ||
43 | */ | ||
44 | CKEDITOR.DIALOG_RESIZE_BOTH = 3; | ||
45 | |||
46 | /** | ||
47 | * Dialog state when idle. | ||
48 | * | ||
49 | * @readonly | ||
50 | * @property {Number} [=1] | ||
51 | * @member CKEDITOR | ||
52 | */ | ||
53 | CKEDITOR.DIALOG_STATE_IDLE = 1; | ||
54 | |||
55 | /** | ||
56 | * Dialog state when busy. | ||
57 | * | ||
58 | * @readonly | ||
59 | * @property {Number} [=2] | ||
60 | * @member CKEDITOR | ||
61 | */ | ||
62 | CKEDITOR.DIALOG_STATE_BUSY = 2; | ||
63 | |||
64 | ( function() { | ||
65 | var cssLength = CKEDITOR.tools.cssLength; | ||
66 | |||
67 | function isTabVisible( tabId ) { | ||
68 | return !!this._.tabs[ tabId ][ 0 ].$.offsetHeight; | ||
69 | } | ||
70 | |||
71 | function getPreviousVisibleTab() { | ||
72 | var tabId = this._.currentTabId, | ||
73 | length = this._.tabIdList.length, | ||
74 | tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId ) + length; | ||
75 | |||
76 | for ( var i = tabIndex - 1; i > tabIndex - length; i-- ) { | ||
77 | if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) ) | ||
78 | return this._.tabIdList[ i % length ]; | ||
79 | } | ||
80 | |||
81 | return null; | ||
82 | } | ||
83 | |||
84 | function getNextVisibleTab() { | ||
85 | var tabId = this._.currentTabId, | ||
86 | length = this._.tabIdList.length, | ||
87 | tabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, tabId ); | ||
88 | |||
89 | for ( var i = tabIndex + 1; i < tabIndex + length; i++ ) { | ||
90 | if ( isTabVisible.call( this, this._.tabIdList[ i % length ] ) ) | ||
91 | return this._.tabIdList[ i % length ]; | ||
92 | } | ||
93 | |||
94 | return null; | ||
95 | } | ||
96 | |||
97 | |||
98 | function clearOrRecoverTextInputValue( container, isRecover ) { | ||
99 | var inputs = container.$.getElementsByTagName( 'input' ); | ||
100 | for ( var i = 0, length = inputs.length; i < length; i++ ) { | ||
101 | var item = new CKEDITOR.dom.element( inputs[ i ] ); | ||
102 | |||
103 | if ( item.getAttribute( 'type' ).toLowerCase() == 'text' ) { | ||
104 | if ( isRecover ) { | ||
105 | item.setAttribute( 'value', item.getCustomData( 'fake_value' ) || '' ); | ||
106 | item.removeCustomData( 'fake_value' ); | ||
107 | } else { | ||
108 | item.setCustomData( 'fake_value', item.getAttribute( 'value' ) ); | ||
109 | item.setAttribute( 'value', '' ); | ||
110 | } | ||
111 | } | ||
112 | } | ||
113 | } | ||
114 | |||
115 | // Handle dialog element validation state UI changes. | ||
116 | function handleFieldValidated( isValid, msg ) { | ||
117 | var input = this.getInputElement(); | ||
118 | if ( input ) | ||
119 | isValid ? input.removeAttribute( 'aria-invalid' ) : input.setAttribute( 'aria-invalid', true ); | ||
120 | |||
121 | if ( !isValid ) { | ||
122 | if ( this.select ) | ||
123 | this.select(); | ||
124 | else | ||
125 | this.focus(); | ||
126 | } | ||
127 | |||
128 | msg && alert( msg ); // jshint ignore:line | ||
129 | |||
130 | this.fire( 'validated', { valid: isValid, msg: msg } ); | ||
131 | } | ||
132 | |||
133 | function resetField() { | ||
134 | var input = this.getInputElement(); | ||
135 | input && input.removeAttribute( 'aria-invalid' ); | ||
136 | } | ||
137 | |||
138 | var templateSource = '<div class="cke_reset_all {editorId} {editorDialogClass} {hidpi}' + | ||
139 | '" dir="{langDir}"' + | ||
140 | ' lang="{langCode}"' + | ||
141 | ' role="dialog"' + | ||
142 | ' aria-labelledby="cke_dialog_title_{id}"' + | ||
143 | '>' + | ||
144 | '<table class="cke_dialog ' + CKEDITOR.env.cssClass + ' cke_{langDir}"' + | ||
145 | ' style="position:absolute" role="presentation">' + | ||
146 | '<tr><td role="presentation">' + | ||
147 | '<div class="cke_dialog_body" role="presentation">' + | ||
148 | '<div id="cke_dialog_title_{id}" class="cke_dialog_title" role="presentation"></div>' + | ||
149 | '<a id="cke_dialog_close_button_{id}" class="cke_dialog_close_button" href="javascript:void(0)" title="{closeTitle}" role="button"><span class="cke_label">X</span></a>' + | ||
150 | '<div id="cke_dialog_tabs_{id}" class="cke_dialog_tabs" role="tablist"></div>' + | ||
151 | '<table class="cke_dialog_contents" role="presentation">' + | ||
152 | '<tr>' + | ||
153 | '<td id="cke_dialog_contents_{id}" class="cke_dialog_contents_body" role="presentation"></td>' + | ||
154 | '</tr>' + | ||
155 | '<tr>' + | ||
156 | '<td id="cke_dialog_footer_{id}" class="cke_dialog_footer" role="presentation"></td>' + | ||
157 | '</tr>' + | ||
158 | '</table>' + | ||
159 | '</div>' + | ||
160 | '</td></tr>' + | ||
161 | '</table>' + | ||
162 | '</div>'; | ||
163 | |||
164 | function buildDialog( editor ) { | ||
165 | var element = CKEDITOR.dom.element.createFromHtml( CKEDITOR.addTemplate( 'dialog', templateSource ).output( { | ||
166 | id: CKEDITOR.tools.getNextNumber(), | ||
167 | editorId: editor.id, | ||
168 | langDir: editor.lang.dir, | ||
169 | langCode: editor.langCode, | ||
170 | editorDialogClass: 'cke_editor_' + editor.name.replace( /\./g, '\\.' ) + '_dialog', | ||
171 | closeTitle: editor.lang.common.close, | ||
172 | hidpi: CKEDITOR.env.hidpi ? 'cke_hidpi' : '' | ||
173 | } ) ); | ||
174 | |||
175 | // TODO: Change this to getById(), so it'll support custom templates. | ||
176 | var body = element.getChild( [ 0, 0, 0, 0, 0 ] ), | ||
177 | title = body.getChild( 0 ), | ||
178 | close = body.getChild( 1 ); | ||
179 | |||
180 | // Don't allow dragging on dialog (#13184). | ||
181 | editor.plugins.clipboard && CKEDITOR.plugins.clipboard.preventDefaultDropOnElement( body ); | ||
182 | |||
183 | // IFrame shim for dialog that masks activeX in IE. (#7619) | ||
184 | if ( CKEDITOR.env.ie && !CKEDITOR.env.quirks && !CKEDITOR.env.edge ) { | ||
185 | var src = 'javascript:void(function(){' + encodeURIComponent( 'document.open();(' + CKEDITOR.tools.fixDomain + ')();document.close();' ) + '}())', // jshint ignore:line | ||
186 | iframe = CKEDITOR.dom.element.createFromHtml( '<iframe' + | ||
187 | ' frameBorder="0"' + | ||
188 | ' class="cke_iframe_shim"' + | ||
189 | ' src="' + src + '"' + | ||
190 | ' tabIndex="-1"' + | ||
191 | '></iframe>' ); | ||
192 | iframe.appendTo( body.getParent() ); | ||
193 | } | ||
194 | |||
195 | // Make the Title and Close Button unselectable. | ||
196 | title.unselectable(); | ||
197 | close.unselectable(); | ||
198 | |||
199 | return { | ||
200 | element: element, | ||
201 | parts: { | ||
202 | dialog: element.getChild( 0 ), | ||
203 | title: title, | ||
204 | close: close, | ||
205 | tabs: body.getChild( 2 ), | ||
206 | contents: body.getChild( [ 3, 0, 0, 0 ] ), | ||
207 | footer: body.getChild( [ 3, 0, 1, 0 ] ) | ||
208 | } | ||
209 | }; | ||
210 | } | ||
211 | |||
212 | /** | ||
213 | * This is the base class for runtime dialog objects. An instance of this | ||
214 | * class represents a single named dialog for a single editor instance. | ||
215 | * | ||
216 | * var dialogObj = new CKEDITOR.dialog( editor, 'smiley' ); | ||
217 | * | ||
218 | * @class | ||
219 | * @constructor Creates a dialog class instance. | ||
220 | * @param {Object} editor The editor which created the dialog. | ||
221 | * @param {String} dialogName The dialog's registered name. | ||
222 | */ | ||
223 | CKEDITOR.dialog = function( editor, dialogName ) { | ||
224 | // Load the dialog definition. | ||
225 | var definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ], | ||
226 | defaultDefinition = CKEDITOR.tools.clone( defaultDialogDefinition ), | ||
227 | buttonsOrder = editor.config.dialog_buttonsOrder || 'OS', | ||
228 | dir = editor.lang.dir, | ||
229 | tabsToRemove = {}, | ||
230 | i, processed, stopPropagation; | ||
231 | |||
232 | if ( ( buttonsOrder == 'OS' && CKEDITOR.env.mac ) || // The buttons in MacOS Apps are in reverse order (#4750) | ||
233 | ( buttonsOrder == 'rtl' && dir == 'ltr' ) || ( buttonsOrder == 'ltr' && dir == 'rtl' ) ) | ||
234 | defaultDefinition.buttons.reverse(); | ||
235 | |||
236 | |||
237 | // Completes the definition with the default values. | ||
238 | definition = CKEDITOR.tools.extend( definition( editor ), defaultDefinition ); | ||
239 | |||
240 | // Clone a functionally independent copy for this dialog. | ||
241 | definition = CKEDITOR.tools.clone( definition ); | ||
242 | |||
243 | // Create a complex definition object, extending it with the API | ||
244 | // functions. | ||
245 | definition = new definitionObject( this, definition ); | ||
246 | |||
247 | var themeBuilt = buildDialog( editor ); | ||
248 | |||
249 | // Initialize some basic parameters. | ||
250 | this._ = { | ||
251 | editor: editor, | ||
252 | element: themeBuilt.element, | ||
253 | name: dialogName, | ||
254 | contentSize: { width: 0, height: 0 }, | ||
255 | size: { width: 0, height: 0 }, | ||
256 | contents: {}, | ||
257 | buttons: {}, | ||
258 | accessKeyMap: {}, | ||
259 | |||
260 | // Initialize the tab and page map. | ||
261 | tabs: {}, | ||
262 | tabIdList: [], | ||
263 | currentTabId: null, | ||
264 | currentTabIndex: null, | ||
265 | pageCount: 0, | ||
266 | lastTab: null, | ||
267 | tabBarMode: false, | ||
268 | |||
269 | // Initialize the tab order array for input widgets. | ||
270 | focusList: [], | ||
271 | currentFocusIndex: 0, | ||
272 | hasFocus: false | ||
273 | }; | ||
274 | |||
275 | this.parts = themeBuilt.parts; | ||
276 | |||
277 | CKEDITOR.tools.setTimeout( function() { | ||
278 | editor.fire( 'ariaWidget', this.parts.contents ); | ||
279 | }, 0, this ); | ||
280 | |||
281 | // Set the startup styles for the dialog, avoiding it enlarging the | ||
282 | // page size on the dialog creation. | ||
283 | var startStyles = { | ||
284 | position: CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed', | ||
285 | top: 0, | ||
286 | visibility: 'hidden' | ||
287 | }; | ||
288 | |||
289 | startStyles[ dir == 'rtl' ? 'right' : 'left' ] = 0; | ||
290 | this.parts.dialog.setStyles( startStyles ); | ||
291 | |||
292 | |||
293 | // Call the CKEDITOR.event constructor to initialize this instance. | ||
294 | CKEDITOR.event.call( this ); | ||
295 | |||
296 | // Fire the "dialogDefinition" event, making it possible to customize | ||
297 | // the dialog definition. | ||
298 | this.definition = definition = CKEDITOR.fire( 'dialogDefinition', { | ||
299 | name: dialogName, | ||
300 | definition: definition | ||
301 | }, editor ).definition; | ||
302 | |||
303 | // Cache tabs that should be removed. | ||
304 | if ( !( 'removeDialogTabs' in editor._ ) && editor.config.removeDialogTabs ) { | ||
305 | var removeContents = editor.config.removeDialogTabs.split( ';' ); | ||
306 | |||
307 | for ( i = 0; i < removeContents.length; i++ ) { | ||
308 | var parts = removeContents[ i ].split( ':' ); | ||
309 | if ( parts.length == 2 ) { | ||
310 | var removeDialogName = parts[ 0 ]; | ||
311 | if ( !tabsToRemove[ removeDialogName ] ) | ||
312 | tabsToRemove[ removeDialogName ] = []; | ||
313 | tabsToRemove[ removeDialogName ].push( parts[ 1 ] ); | ||
314 | } | ||
315 | } | ||
316 | editor._.removeDialogTabs = tabsToRemove; | ||
317 | } | ||
318 | |||
319 | // Remove tabs of this dialog. | ||
320 | if ( editor._.removeDialogTabs && ( tabsToRemove = editor._.removeDialogTabs[ dialogName ] ) ) { | ||
321 | for ( i = 0; i < tabsToRemove.length; i++ ) | ||
322 | definition.removeContents( tabsToRemove[ i ] ); | ||
323 | } | ||
324 | |||
325 | // Initialize load, show, hide, ok and cancel events. | ||
326 | if ( definition.onLoad ) | ||
327 | this.on( 'load', definition.onLoad ); | ||
328 | |||
329 | if ( definition.onShow ) | ||
330 | this.on( 'show', definition.onShow ); | ||
331 | |||
332 | if ( definition.onHide ) | ||
333 | this.on( 'hide', definition.onHide ); | ||
334 | |||
335 | if ( definition.onOk ) { | ||
336 | this.on( 'ok', function( evt ) { | ||
337 | // Dialog confirm might probably introduce content changes (#5415). | ||
338 | editor.fire( 'saveSnapshot' ); | ||
339 | setTimeout( function() { | ||
340 | editor.fire( 'saveSnapshot' ); | ||
341 | }, 0 ); | ||
342 | if ( definition.onOk.call( this, evt ) === false ) | ||
343 | evt.data.hide = false; | ||
344 | } ); | ||
345 | } | ||
346 | |||
347 | // Set default dialog state. | ||
348 | this.state = CKEDITOR.DIALOG_STATE_IDLE; | ||
349 | |||
350 | if ( definition.onCancel ) { | ||
351 | this.on( 'cancel', function( evt ) { | ||
352 | if ( definition.onCancel.call( this, evt ) === false ) | ||
353 | evt.data.hide = false; | ||
354 | } ); | ||
355 | } | ||
356 | |||
357 | var me = this; | ||
358 | |||
359 | // Iterates over all items inside all content in the dialog, calling a | ||
360 | // function for each of them. | ||
361 | var iterContents = function( func ) { | ||
362 | var contents = me._.contents, | ||
363 | stop = false; | ||
364 | |||
365 | for ( var i in contents ) { | ||
366 | for ( var j in contents[ i ] ) { | ||
367 | stop = func.call( this, contents[ i ][ j ] ); | ||
368 | if ( stop ) | ||
369 | return; | ||
370 | } | ||
371 | } | ||
372 | }; | ||
373 | |||
374 | this.on( 'ok', function( evt ) { | ||
375 | iterContents( function( item ) { | ||
376 | if ( item.validate ) { | ||
377 | var retval = item.validate( this ), | ||
378 | invalid = ( typeof retval == 'string' ) || retval === false; | ||
379 | |||
380 | if ( invalid ) { | ||
381 | evt.data.hide = false; | ||
382 | evt.stop(); | ||
383 | } | ||
384 | |||
385 | handleFieldValidated.call( item, !invalid, typeof retval == 'string' ? retval : undefined ); | ||
386 | return invalid; | ||
387 | } | ||
388 | } ); | ||
389 | }, this, null, 0 ); | ||
390 | |||
391 | this.on( 'cancel', function( evt ) { | ||
392 | iterContents( function( item ) { | ||
393 | if ( item.isChanged() ) { | ||
394 | if ( !editor.config.dialog_noConfirmCancel && !confirm( editor.lang.common.confirmCancel ) ) // jshint ignore:line | ||
395 | evt.data.hide = false; | ||
396 | return true; | ||
397 | } | ||
398 | } ); | ||
399 | }, this, null, 0 ); | ||
400 | |||
401 | this.parts.close.on( 'click', function( evt ) { | ||
402 | if ( this.fire( 'cancel', { hide: true } ).hide !== false ) | ||
403 | this.hide(); | ||
404 | evt.data.preventDefault(); | ||
405 | }, this ); | ||
406 | |||
407 | // Sort focus list according to tab order definitions. | ||
408 | function setupFocus() { | ||
409 | var focusList = me._.focusList; | ||
410 | focusList.sort( function( a, b ) { | ||
411 | // Mimics browser tab order logics; | ||
412 | if ( a.tabIndex != b.tabIndex ) | ||
413 | return b.tabIndex - a.tabIndex; | ||
414 | // Sort is not stable in some browsers, | ||
415 | // fall-back the comparator to 'focusIndex'; | ||
416 | else | ||
417 | return a.focusIndex - b.focusIndex; | ||
418 | } ); | ||
419 | |||
420 | var size = focusList.length; | ||
421 | for ( var i = 0; i < size; i++ ) | ||
422 | focusList[ i ].focusIndex = i; | ||
423 | } | ||
424 | |||
425 | // Expects 1 or -1 as an offset, meaning direction of the offset change. | ||
426 | function changeFocus( offset ) { | ||
427 | var focusList = me._.focusList; | ||
428 | offset = offset || 0; | ||
429 | |||
430 | if ( focusList.length < 1 ) | ||
431 | return; | ||
432 | |||
433 | var startIndex = me._.currentFocusIndex; | ||
434 | |||
435 | if ( me._.tabBarMode && offset < 0 ) { | ||
436 | // If we are in tab mode, we need to mimic that we started tabbing back from the first | ||
437 | // focusList (so it will go to the last one). | ||
438 | startIndex = 0; | ||
439 | } | ||
440 | |||
441 | // Trigger the 'blur' event of any input element before anything, | ||
442 | // since certain UI updates may depend on it. | ||
443 | try { | ||
444 | focusList[ startIndex ].getInputElement().$.blur(); | ||
445 | } catch ( e ) {} | ||
446 | |||
447 | var currentIndex = startIndex, | ||
448 | hasTabs = me._.pageCount > 1; | ||
449 | |||
450 | do { | ||
451 | currentIndex = currentIndex + offset; | ||
452 | |||
453 | if ( hasTabs && !me._.tabBarMode && ( currentIndex == focusList.length || currentIndex == -1 ) ) { | ||
454 | // If the dialog was not in tab mode, then focus the first tab (#13027). | ||
455 | me._.tabBarMode = true; | ||
456 | me._.tabs[ me._.currentTabId ][ 0 ].focus(); | ||
457 | me._.currentFocusIndex = -1; | ||
458 | |||
459 | // Early return, in order to avoid accessing focusList[ -1 ]. | ||
460 | return; | ||
461 | } | ||
462 | |||
463 | currentIndex = ( currentIndex + focusList.length ) % focusList.length; | ||
464 | |||
465 | if ( currentIndex == startIndex ) { | ||
466 | break; | ||
467 | } | ||
468 | } while ( offset && !focusList[ currentIndex ].isFocusable() ); | ||
469 | |||
470 | focusList[ currentIndex ].focus(); | ||
471 | |||
472 | // Select whole field content. | ||
473 | if ( focusList[ currentIndex ].type == 'text' ) | ||
474 | focusList[ currentIndex ].select(); | ||
475 | } | ||
476 | |||
477 | this.changeFocus = changeFocus; | ||
478 | |||
479 | |||
480 | function keydownHandler( evt ) { | ||
481 | // If I'm not the top dialog, ignore. | ||
482 | if ( me != CKEDITOR.dialog._.currentTop ) | ||
483 | return; | ||
484 | |||
485 | var keystroke = evt.data.getKeystroke(), | ||
486 | rtl = editor.lang.dir == 'rtl', | ||
487 | arrowKeys = [ 37, 38, 39, 40 ], | ||
488 | button; | ||
489 | |||
490 | processed = stopPropagation = 0; | ||
491 | |||
492 | if ( keystroke == 9 || keystroke == CKEDITOR.SHIFT + 9 ) { | ||
493 | var shiftPressed = ( keystroke == CKEDITOR.SHIFT + 9 ); | ||
494 | changeFocus( shiftPressed ? -1 : 1 ); | ||
495 | processed = 1; | ||
496 | } else if ( keystroke == CKEDITOR.ALT + 121 && !me._.tabBarMode && me.getPageCount() > 1 ) { | ||
497 | // Alt-F10 puts focus into the current tab item in the tab bar. | ||
498 | me._.tabBarMode = true; | ||
499 | me._.tabs[ me._.currentTabId ][ 0 ].focus(); | ||
500 | me._.currentFocusIndex = -1; | ||
501 | processed = 1; | ||
502 | } else if ( CKEDITOR.tools.indexOf( arrowKeys, keystroke ) != -1 && me._.tabBarMode ) { | ||
503 | // Array with key codes that activate previous tab. | ||
504 | var prevKeyCodes = [ | ||
505 | // Depending on the lang dir: right or left key | ||
506 | rtl ? 39 : 37, | ||
507 | // Top/bot arrow: actually for both cases it's the same. | ||
508 | 38 | ||
509 | ], | ||
510 | nextId = CKEDITOR.tools.indexOf( prevKeyCodes, keystroke ) != -1 ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me ); | ||
511 | |||
512 | me.selectPage( nextId ); | ||
513 | me._.tabs[ nextId ][ 0 ].focus(); | ||
514 | processed = 1; | ||
515 | } else if ( ( keystroke == 13 || keystroke == 32 ) && me._.tabBarMode ) { | ||
516 | this.selectPage( this._.currentTabId ); | ||
517 | this._.tabBarMode = false; | ||
518 | this._.currentFocusIndex = -1; | ||
519 | changeFocus( 1 ); | ||
520 | processed = 1; | ||
521 | } | ||
522 | // If user presses enter key in a text box, it implies clicking OK for the dialog. | ||
523 | else if ( keystroke == 13 /*ENTER*/ ) { | ||
524 | // Don't do that for a target that handles ENTER. | ||
525 | var target = evt.data.getTarget(); | ||
526 | if ( !target.is( 'a', 'button', 'select', 'textarea' ) && ( !target.is( 'input' ) || target.$.type != 'button' ) ) { | ||
527 | button = this.getButton( 'ok' ); | ||
528 | button && CKEDITOR.tools.setTimeout( button.click, 0, button ); | ||
529 | processed = 1; | ||
530 | } | ||
531 | stopPropagation = 1; // Always block the propagation (#4269) | ||
532 | } else if ( keystroke == 27 /*ESC*/ ) { | ||
533 | button = this.getButton( 'cancel' ); | ||
534 | |||
535 | // If there's a Cancel button, click it, else just fire the cancel event and hide the dialog. | ||
536 | if ( button ) | ||
537 | CKEDITOR.tools.setTimeout( button.click, 0, button ); | ||
538 | else { | ||
539 | if ( this.fire( 'cancel', { hide: true } ).hide !== false ) | ||
540 | this.hide(); | ||
541 | } | ||
542 | stopPropagation = 1; // Always block the propagation (#4269) | ||
543 | } else { | ||
544 | return; | ||
545 | } | ||
546 | |||
547 | keypressHandler( evt ); | ||
548 | } | ||
549 | |||
550 | function keypressHandler( evt ) { | ||
551 | if ( processed ) | ||
552 | evt.data.preventDefault( 1 ); | ||
553 | else if ( stopPropagation ) | ||
554 | evt.data.stopPropagation(); | ||
555 | } | ||
556 | |||
557 | var dialogElement = this._.element; | ||
558 | |||
559 | editor.focusManager.add( dialogElement, 1 ); | ||
560 | |||
561 | // Add the dialog keyboard handlers. | ||
562 | this.on( 'show', function() { | ||
563 | dialogElement.on( 'keydown', keydownHandler, this ); | ||
564 | |||
565 | // Some browsers instead, don't cancel key events in the keydown, but in the | ||
566 | // keypress. So we must do a longer trip in those cases. (#4531,#8985) | ||
567 | if ( CKEDITOR.env.gecko ) | ||
568 | dialogElement.on( 'keypress', keypressHandler, this ); | ||
569 | |||
570 | } ); | ||
571 | this.on( 'hide', function() { | ||
572 | dialogElement.removeListener( 'keydown', keydownHandler ); | ||
573 | if ( CKEDITOR.env.gecko ) | ||
574 | dialogElement.removeListener( 'keypress', keypressHandler ); | ||
575 | |||
576 | // Reset fields state when closing dialog. | ||
577 | iterContents( function( item ) { | ||
578 | resetField.apply( item ); | ||
579 | } ); | ||
580 | } ); | ||
581 | this.on( 'iframeAdded', function( evt ) { | ||
582 | var doc = new CKEDITOR.dom.document( evt.data.iframe.$.contentWindow.document ); | ||
583 | doc.on( 'keydown', keydownHandler, this, null, 0 ); | ||
584 | } ); | ||
585 | |||
586 | // Auto-focus logic in dialog. | ||
587 | this.on( 'show', function() { | ||
588 | // Setup tabIndex on showing the dialog instead of on loading | ||
589 | // to allow dynamic tab order happen in dialog definition. | ||
590 | setupFocus(); | ||
591 | |||
592 | var hasTabs = me._.pageCount > 1; | ||
593 | |||
594 | if ( editor.config.dialog_startupFocusTab && hasTabs ) { | ||
595 | me._.tabBarMode = true; | ||
596 | me._.tabs[ me._.currentTabId ][ 0 ].focus(); | ||
597 | me._.currentFocusIndex = -1; | ||
598 | } else if ( !this._.hasFocus ) { | ||
599 | // http://dev.ckeditor.com/ticket/13114#comment:4. | ||
600 | this._.currentFocusIndex = hasTabs ? -1 : this._.focusList.length - 1; | ||
601 | |||
602 | // Decide where to put the initial focus. | ||
603 | if ( definition.onFocus ) { | ||
604 | var initialFocus = definition.onFocus.call( this ); | ||
605 | // Focus the field that the user specified. | ||
606 | initialFocus && initialFocus.focus(); | ||
607 | } | ||
608 | // Focus the first field in layout order. | ||
609 | else { | ||
610 | changeFocus( 1 ); | ||
611 | } | ||
612 | } | ||
613 | }, this, null, 0xffffffff ); | ||
614 | |||
615 | // IE6 BUG: Text fields and text areas are only half-rendered the first time the dialog appears in IE6 (#2661). | ||
616 | // This is still needed after [2708] and [2709] because text fields in hidden TR tags are still broken. | ||
617 | if ( CKEDITOR.env.ie6Compat ) { | ||
618 | this.on( 'load', function() { | ||
619 | var outer = this.getElement(), | ||
620 | inner = outer.getFirst(); | ||
621 | inner.remove(); | ||
622 | inner.appendTo( outer ); | ||
623 | }, this ); | ||
624 | } | ||
625 | |||
626 | initDragAndDrop( this ); | ||
627 | initResizeHandles( this ); | ||
628 | |||
629 | // Insert the title. | ||
630 | ( new CKEDITOR.dom.text( definition.title, CKEDITOR.document ) ).appendTo( this.parts.title ); | ||
631 | |||
632 | // Insert the tabs and contents. | ||
633 | for ( i = 0; i < definition.contents.length; i++ ) { | ||
634 | var page = definition.contents[ i ]; | ||
635 | page && this.addPage( page ); | ||
636 | } | ||
637 | |||
638 | this.parts.tabs.on( 'click', function( evt ) { | ||
639 | var target = evt.data.getTarget(); | ||
640 | // If we aren't inside a tab, bail out. | ||
641 | if ( target.hasClass( 'cke_dialog_tab' ) ) { | ||
642 | // Get the ID of the tab, without the 'cke_' prefix and the unique number suffix. | ||
643 | var id = target.$.id; | ||
644 | this.selectPage( id.substring( 4, id.lastIndexOf( '_' ) ) ); | ||
645 | |||
646 | if ( this._.tabBarMode ) { | ||
647 | this._.tabBarMode = false; | ||
648 | this._.currentFocusIndex = -1; | ||
649 | changeFocus( 1 ); | ||
650 | } | ||
651 | evt.data.preventDefault(); | ||
652 | } | ||
653 | }, this ); | ||
654 | |||
655 | // Insert buttons. | ||
656 | var buttonsHtml = [], | ||
657 | buttons = CKEDITOR.dialog._.uiElementBuilders.hbox.build( this, { | ||
658 | type: 'hbox', | ||
659 | className: 'cke_dialog_footer_buttons', | ||
660 | widths: [], | ||
661 | children: definition.buttons | ||
662 | }, buttonsHtml ).getChild(); | ||
663 | this.parts.footer.setHtml( buttonsHtml.join( '' ) ); | ||
664 | |||
665 | for ( i = 0; i < buttons.length; i++ ) | ||
666 | this._.buttons[ buttons[ i ].id ] = buttons[ i ]; | ||
667 | |||
668 | /** | ||
669 | * Current state of the dialog. Use the {@link #setState} method to update it. | ||
670 | * See the {@link #event-state} event to know more. | ||
671 | * | ||
672 | * @readonly | ||
673 | * @property {Number} [state=CKEDITOR.DIALOG_STATE_IDLE] | ||
674 | */ | ||
675 | }; | ||
676 | |||
677 | // Focusable interface. Use it via dialog.addFocusable. | ||
678 | function Focusable( dialog, element, index ) { | ||
679 | this.element = element; | ||
680 | this.focusIndex = index; | ||
681 | // TODO: support tabIndex for focusables. | ||
682 | this.tabIndex = 0; | ||
683 | this.isFocusable = function() { | ||
684 | return !element.getAttribute( 'disabled' ) && element.isVisible(); | ||
685 | }; | ||
686 | this.focus = function() { | ||
687 | dialog._.currentFocusIndex = this.focusIndex; | ||
688 | this.element.focus(); | ||
689 | }; | ||
690 | // Bind events | ||
691 | element.on( 'keydown', function( e ) { | ||
692 | if ( e.data.getKeystroke() in { 32: 1, 13: 1 } ) | ||
693 | this.fire( 'click' ); | ||
694 | } ); | ||
695 | element.on( 'focus', function() { | ||
696 | this.fire( 'mouseover' ); | ||
697 | } ); | ||
698 | element.on( 'blur', function() { | ||
699 | this.fire( 'mouseout' ); | ||
700 | } ); | ||
701 | } | ||
702 | |||
703 | // Re-layout the dialog on window resize. | ||
704 | function resizeWithWindow( dialog ) { | ||
705 | var win = CKEDITOR.document.getWindow(); | ||
706 | function resizeHandler() { | ||
707 | dialog.layout(); | ||
708 | } | ||
709 | win.on( 'resize', resizeHandler ); | ||
710 | dialog.on( 'hide', function() { | ||
711 | win.removeListener( 'resize', resizeHandler ); | ||
712 | } ); | ||
713 | } | ||
714 | |||
715 | CKEDITOR.dialog.prototype = { | ||
716 | destroy: function() { | ||
717 | this.hide(); | ||
718 | this._.element.remove(); | ||
719 | }, | ||
720 | |||
721 | /** | ||
722 | * Resizes the dialog. | ||
723 | * | ||
724 | * dialogObj.resize( 800, 640 ); | ||
725 | * | ||
726 | * @method | ||
727 | * @param {Number} width The width of the dialog in pixels. | ||
728 | * @param {Number} height The height of the dialog in pixels. | ||
729 | */ | ||
730 | resize: ( function() { | ||
731 | return function( width, height ) { | ||
732 | if ( this._.contentSize && this._.contentSize.width == width && this._.contentSize.height == height ) | ||
733 | return; | ||
734 | |||
735 | CKEDITOR.dialog.fire( 'resize', { | ||
736 | dialog: this, | ||
737 | width: width, | ||
738 | height: height | ||
739 | }, this._.editor ); | ||
740 | |||
741 | this.fire( 'resize', { | ||
742 | width: width, | ||
743 | height: height | ||
744 | }, this._.editor ); | ||
745 | |||
746 | var contents = this.parts.contents; | ||
747 | contents.setStyles( { | ||
748 | width: width + 'px', | ||
749 | height: height + 'px' | ||
750 | } ); | ||
751 | |||
752 | // Update dialog position when dimension get changed in RTL. | ||
753 | if ( this._.editor.lang.dir == 'rtl' && this._.position ) | ||
754 | this._.position.x = CKEDITOR.document.getWindow().getViewPaneSize().width - this._.contentSize.width - parseInt( this._.element.getFirst().getStyle( 'right' ), 10 ); | ||
755 | |||
756 | this._.contentSize = { width: width, height: height }; | ||
757 | }; | ||
758 | } )(), | ||
759 | |||
760 | /** | ||
761 | * Gets the current size of the dialog in pixels. | ||
762 | * | ||
763 | * var width = dialogObj.getSize().width; | ||
764 | * | ||
765 | * @returns {Object} | ||
766 | * @returns {Number} return.width | ||
767 | * @returns {Number} return.height | ||
768 | */ | ||
769 | getSize: function() { | ||
770 | var element = this._.element.getFirst(); | ||
771 | return { width: element.$.offsetWidth || 0, height: element.$.offsetHeight || 0 }; | ||
772 | }, | ||
773 | |||
774 | /** | ||
775 | * Moves the dialog to an `(x, y)` coordinate relative to the window. | ||
776 | * | ||
777 | * dialogObj.move( 10, 40 ); | ||
778 | * | ||
779 | * @method | ||
780 | * @param {Number} x The target x-coordinate. | ||
781 | * @param {Number} y The target y-coordinate. | ||
782 | * @param {Boolean} save Flag indicate whether the dialog position should be remembered on next open up. | ||
783 | */ | ||
784 | move: function( x, y, save ) { | ||
785 | |||
786 | // The dialog may be fixed positioned or absolute positioned. Ask the | ||
787 | // browser what is the current situation first. | ||
788 | var element = this._.element.getFirst(), rtl = this._.editor.lang.dir == 'rtl'; | ||
789 | var isFixed = element.getComputedStyle( 'position' ) == 'fixed'; | ||
790 | |||
791 | // (#8888) In some cases of a very small viewport, dialog is incorrectly | ||
792 | // positioned in IE7. It also happens that it remains sticky and user cannot | ||
793 | // scroll down/up to reveal dialog's content below/above the viewport; this is | ||
794 | // cumbersome. | ||
795 | // The only way to fix this is to move mouse out of the browser and | ||
796 | // go back to see that dialog position is automagically fixed. No events, | ||
797 | // no style change - pure magic. This is a IE7 rendering issue, which can be | ||
798 | // fixed with dummy style redraw on each move. | ||
799 | if ( CKEDITOR.env.ie ) | ||
800 | element.setStyle( 'zoom', '100%' ); | ||
801 | |||
802 | if ( isFixed && this._.position && this._.position.x == x && this._.position.y == y ) | ||
803 | return; | ||
804 | |||
805 | // Save the current position. | ||
806 | this._.position = { x: x, y: y }; | ||
807 | |||
808 | // If not fixed positioned, add scroll position to the coordinates. | ||
809 | if ( !isFixed ) { | ||
810 | var scrollPosition = CKEDITOR.document.getWindow().getScrollPosition(); | ||
811 | x += scrollPosition.x; | ||
812 | y += scrollPosition.y; | ||
813 | } | ||
814 | |||
815 | // Translate coordinate for RTL. | ||
816 | if ( rtl ) { | ||
817 | var dialogSize = this.getSize(), viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(); | ||
818 | x = viewPaneSize.width - dialogSize.width - x; | ||
819 | } | ||
820 | |||
821 | var styles = { 'top': ( y > 0 ? y : 0 ) + 'px' }; | ||
822 | styles[ rtl ? 'right' : 'left' ] = ( x > 0 ? x : 0 ) + 'px'; | ||
823 | |||
824 | element.setStyles( styles ); | ||
825 | |||
826 | save && ( this._.moved = 1 ); | ||
827 | }, | ||
828 | |||
829 | /** | ||
830 | * Gets the dialog's position in the window. | ||
831 | * | ||
832 | * var dialogX = dialogObj.getPosition().x; | ||
833 | * | ||
834 | * @returns {Object} | ||
835 | * @returns {Number} return.x | ||
836 | * @returns {Number} return.y | ||
837 | */ | ||
838 | getPosition: function() { | ||
839 | return CKEDITOR.tools.extend( {}, this._.position ); | ||
840 | }, | ||
841 | |||
842 | /** | ||
843 | * Shows the dialog box. | ||
844 | * | ||
845 | * dialogObj.show(); | ||
846 | */ | ||
847 | show: function() { | ||
848 | // Insert the dialog's element to the root document. | ||
849 | var element = this._.element; | ||
850 | var definition = this.definition; | ||
851 | if ( !( element.getParent() && element.getParent().equals( CKEDITOR.document.getBody() ) ) ) | ||
852 | element.appendTo( CKEDITOR.document.getBody() ); | ||
853 | else | ||
854 | element.setStyle( 'display', 'block' ); | ||
855 | |||
856 | // First, set the dialog to an appropriate size. | ||
857 | this.resize( | ||
858 | this._.contentSize && this._.contentSize.width || definition.width || definition.minWidth, | ||
859 | this._.contentSize && this._.contentSize.height || definition.height || definition.minHeight | ||
860 | ); | ||
861 | |||
862 | // Reset all inputs back to their default value. | ||
863 | this.reset(); | ||
864 | |||
865 | // Select the first tab by default. | ||
866 | this.selectPage( this.definition.contents[ 0 ].id ); | ||
867 | |||
868 | // Set z-index. | ||
869 | if ( CKEDITOR.dialog._.currentZIndex === null ) | ||
870 | CKEDITOR.dialog._.currentZIndex = this._.editor.config.baseFloatZIndex; | ||
871 | this._.element.getFirst().setStyle( 'z-index', CKEDITOR.dialog._.currentZIndex += 10 ); | ||
872 | |||
873 | // Maintain the dialog ordering and dialog cover. | ||
874 | if ( CKEDITOR.dialog._.currentTop === null ) { | ||
875 | CKEDITOR.dialog._.currentTop = this; | ||
876 | this._.parentDialog = null; | ||
877 | showCover( this._.editor ); | ||
878 | |||
879 | } else { | ||
880 | this._.parentDialog = CKEDITOR.dialog._.currentTop; | ||
881 | var parentElement = this._.parentDialog.getElement().getFirst(); | ||
882 | parentElement.$.style.zIndex -= Math.floor( this._.editor.config.baseFloatZIndex / 2 ); | ||
883 | CKEDITOR.dialog._.currentTop = this; | ||
884 | } | ||
885 | |||
886 | element.on( 'keydown', accessKeyDownHandler ); | ||
887 | element.on( 'keyup', accessKeyUpHandler ); | ||
888 | |||
889 | // Reset the hasFocus state. | ||
890 | this._.hasFocus = false; | ||
891 | |||
892 | for ( var i in definition.contents ) { | ||
893 | if ( !definition.contents[ i ] ) | ||
894 | continue; | ||
895 | |||
896 | var content = definition.contents[ i ], | ||
897 | tab = this._.tabs[ content.id ], | ||
898 | requiredContent = content.requiredContent, | ||
899 | enableElements = 0; | ||
900 | |||
901 | if ( !tab ) | ||
902 | continue; | ||
903 | |||
904 | for ( var j in this._.contents[ content.id ] ) { | ||
905 | var elem = this._.contents[ content.id ][ j ]; | ||
906 | |||
907 | if ( elem.type == 'hbox' || elem.type == 'vbox' || !elem.getInputElement() ) | ||
908 | continue; | ||
909 | |||
910 | if ( elem.requiredContent && !this._.editor.activeFilter.check( elem.requiredContent ) ) | ||
911 | elem.disable(); | ||
912 | else { | ||
913 | elem.enable(); | ||
914 | enableElements++; | ||
915 | } | ||
916 | } | ||
917 | |||
918 | if ( !enableElements || ( requiredContent && !this._.editor.activeFilter.check( requiredContent ) ) ) | ||
919 | tab[ 0 ].addClass( 'cke_dialog_tab_disabled' ); | ||
920 | else | ||
921 | tab[ 0 ].removeClass( 'cke_dialog_tab_disabled' ); | ||
922 | } | ||
923 | |||
924 | CKEDITOR.tools.setTimeout( function() { | ||
925 | this.layout(); | ||
926 | resizeWithWindow( this ); | ||
927 | |||
928 | this.parts.dialog.setStyle( 'visibility', '' ); | ||
929 | |||
930 | // Execute onLoad for the first show. | ||
931 | this.fireOnce( 'load', {} ); | ||
932 | CKEDITOR.ui.fire( 'ready', this ); | ||
933 | |||
934 | this.fire( 'show', {} ); | ||
935 | this._.editor.fire( 'dialogShow', this ); | ||
936 | |||
937 | if ( !this._.parentDialog ) | ||
938 | this._.editor.focusManager.lock(); | ||
939 | |||
940 | // Save the initial values of the dialog. | ||
941 | this.foreach( function( contentObj ) { | ||
942 | contentObj.setInitValue && contentObj.setInitValue(); | ||
943 | } ); | ||
944 | |||
945 | }, 100, this ); | ||
946 | }, | ||
947 | |||
948 | /** | ||
949 | * Rearrange the dialog to its previous position or the middle of the window. | ||
950 | * | ||
951 | * @since 3.5 | ||
952 | */ | ||
953 | layout: function() { | ||
954 | var el = this.parts.dialog; | ||
955 | var dialogSize = this.getSize(); | ||
956 | var win = CKEDITOR.document.getWindow(), | ||
957 | viewSize = win.getViewPaneSize(); | ||
958 | |||
959 | var posX = ( viewSize.width - dialogSize.width ) / 2, | ||
960 | posY = ( viewSize.height - dialogSize.height ) / 2; | ||
961 | |||
962 | // Switch to absolute position when viewport is smaller than dialog size. | ||
963 | if ( !CKEDITOR.env.ie6Compat ) { | ||
964 | if ( dialogSize.height + ( posY > 0 ? posY : 0 ) > viewSize.height || dialogSize.width + ( posX > 0 ? posX : 0 ) > viewSize.width ) { | ||
965 | el.setStyle( 'position', 'absolute' ); | ||
966 | } else { | ||
967 | el.setStyle( 'position', 'fixed' ); | ||
968 | } | ||
969 | } | ||
970 | |||
971 | this.move( this._.moved ? this._.position.x : posX, this._.moved ? this._.position.y : posY ); | ||
972 | }, | ||
973 | |||
974 | /** | ||
975 | * Executes a function for each UI element. | ||
976 | * | ||
977 | * @param {Function} fn Function to execute for each UI element. | ||
978 | * @returns {CKEDITOR.dialog} The current dialog object. | ||
979 | */ | ||
980 | foreach: function( fn ) { | ||
981 | for ( var i in this._.contents ) { | ||
982 | for ( var j in this._.contents[ i ] ) { | ||
983 | fn.call( this, this._.contents[i][j] ); | ||
984 | } | ||
985 | } | ||
986 | |||
987 | return this; | ||
988 | }, | ||
989 | |||
990 | /** | ||
991 | * Resets all input values in the dialog. | ||
992 | * | ||
993 | * dialogObj.reset(); | ||
994 | * | ||
995 | * @method | ||
996 | * @chainable | ||
997 | */ | ||
998 | reset: ( function() { | ||
999 | var fn = function( widget ) { | ||
1000 | if ( widget.reset ) | ||
1001 | widget.reset( 1 ); | ||
1002 | }; | ||
1003 | return function() { | ||
1004 | this.foreach( fn ); | ||
1005 | return this; | ||
1006 | }; | ||
1007 | } )(), | ||
1008 | |||
1009 | |||
1010 | /** | ||
1011 | * Calls the {@link CKEDITOR.dialog.definition.uiElement#setup} method of each | ||
1012 | * of the UI elements, with the arguments passed through it. | ||
1013 | * It is usually being called when the dialog is opened, to put the initial value inside the field. | ||
1014 | * | ||
1015 | * dialogObj.setupContent(); | ||
1016 | * | ||
1017 | * var timestamp = ( new Date() ).valueOf(); | ||
1018 | * dialogObj.setupContent( timestamp ); | ||
1019 | */ | ||
1020 | setupContent: function() { | ||
1021 | var args = arguments; | ||
1022 | this.foreach( function( widget ) { | ||
1023 | if ( widget.setup ) | ||
1024 | widget.setup.apply( widget, args ); | ||
1025 | } ); | ||
1026 | }, | ||
1027 | |||
1028 | /** | ||
1029 | * Calls the {@link CKEDITOR.dialog.definition.uiElement#commit} method of each | ||
1030 | * of the UI elements, with the arguments passed through it. | ||
1031 | * It is usually being called when the user confirms the dialog, to process the values. | ||
1032 | * | ||
1033 | * dialogObj.commitContent(); | ||
1034 | * | ||
1035 | * var timestamp = ( new Date() ).valueOf(); | ||
1036 | * dialogObj.commitContent( timestamp ); | ||
1037 | */ | ||
1038 | commitContent: function() { | ||
1039 | var args = arguments; | ||
1040 | this.foreach( function( widget ) { | ||
1041 | // Make sure IE triggers "change" event on last focused input before closing the dialog. (#7915) | ||
1042 | if ( CKEDITOR.env.ie && this._.currentFocusIndex == widget.focusIndex ) | ||
1043 | widget.getInputElement().$.blur(); | ||
1044 | |||
1045 | if ( widget.commit ) | ||
1046 | widget.commit.apply( widget, args ); | ||
1047 | } ); | ||
1048 | }, | ||
1049 | |||
1050 | /** | ||
1051 | * Hides the dialog box. | ||
1052 | * | ||
1053 | * dialogObj.hide(); | ||
1054 | */ | ||
1055 | hide: function() { | ||
1056 | if ( !this.parts.dialog.isVisible() ) | ||
1057 | return; | ||
1058 | |||
1059 | this.fire( 'hide', {} ); | ||
1060 | this._.editor.fire( 'dialogHide', this ); | ||
1061 | // Reset the tab page. | ||
1062 | this.selectPage( this._.tabIdList[ 0 ] ); | ||
1063 | var element = this._.element; | ||
1064 | element.setStyle( 'display', 'none' ); | ||
1065 | this.parts.dialog.setStyle( 'visibility', 'hidden' ); | ||
1066 | // Unregister all access keys associated with this dialog. | ||
1067 | unregisterAccessKey( this ); | ||
1068 | |||
1069 | // Close any child(top) dialogs first. | ||
1070 | while ( CKEDITOR.dialog._.currentTop != this ) | ||
1071 | CKEDITOR.dialog._.currentTop.hide(); | ||
1072 | |||
1073 | // Maintain dialog ordering and remove cover if needed. | ||
1074 | if ( !this._.parentDialog ) | ||
1075 | hideCover( this._.editor ); | ||
1076 | else { | ||
1077 | var parentElement = this._.parentDialog.getElement().getFirst(); | ||
1078 | parentElement.setStyle( 'z-index', parseInt( parentElement.$.style.zIndex, 10 ) + Math.floor( this._.editor.config.baseFloatZIndex / 2 ) ); | ||
1079 | } | ||
1080 | CKEDITOR.dialog._.currentTop = this._.parentDialog; | ||
1081 | |||
1082 | // Deduct or clear the z-index. | ||
1083 | if ( !this._.parentDialog ) { | ||
1084 | CKEDITOR.dialog._.currentZIndex = null; | ||
1085 | |||
1086 | // Remove access key handlers. | ||
1087 | element.removeListener( 'keydown', accessKeyDownHandler ); | ||
1088 | element.removeListener( 'keyup', accessKeyUpHandler ); | ||
1089 | |||
1090 | var editor = this._.editor; | ||
1091 | editor.focus(); | ||
1092 | |||
1093 | // Give a while before unlock, waiting for focus to return to the editable. (#172) | ||
1094 | setTimeout( function() { | ||
1095 | editor.focusManager.unlock(); | ||
1096 | |||
1097 | // Fixed iOS focus issue (#12381). | ||
1098 | // Keep in mind that editor.focus() does not work in this case. | ||
1099 | if ( CKEDITOR.env.iOS ) { | ||
1100 | editor.window.focus(); | ||
1101 | } | ||
1102 | }, 0 ); | ||
1103 | |||
1104 | } else { | ||
1105 | CKEDITOR.dialog._.currentZIndex -= 10; | ||
1106 | } | ||
1107 | |||
1108 | delete this._.parentDialog; | ||
1109 | // Reset the initial values of the dialog. | ||
1110 | this.foreach( function( contentObj ) { | ||
1111 | contentObj.resetInitValue && contentObj.resetInitValue(); | ||
1112 | } ); | ||
1113 | |||
1114 | // Reset dialog state back to IDLE, if busy (#13213). | ||
1115 | this.setState( CKEDITOR.DIALOG_STATE_IDLE ); | ||
1116 | }, | ||
1117 | |||
1118 | /** | ||
1119 | * Adds a tabbed page into the dialog. | ||
1120 | * | ||
1121 | * @param {Object} contents Content definition. | ||
1122 | */ | ||
1123 | addPage: function( contents ) { | ||
1124 | if ( contents.requiredContent && !this._.editor.filter.check( contents.requiredContent ) ) | ||
1125 | return; | ||
1126 | |||
1127 | var pageHtml = [], | ||
1128 | titleHtml = contents.label ? ' title="' + CKEDITOR.tools.htmlEncode( contents.label ) + '"' : '', | ||
1129 | vbox = CKEDITOR.dialog._.uiElementBuilders.vbox.build( this, { | ||
1130 | type: 'vbox', | ||
1131 | className: 'cke_dialog_page_contents', | ||
1132 | children: contents.elements, | ||
1133 | expand: !!contents.expand, | ||
1134 | padding: contents.padding, | ||
1135 | style: contents.style || 'width: 100%;' | ||
1136 | }, pageHtml ); | ||
1137 | |||
1138 | var contentMap = this._.contents[ contents.id ] = {}, | ||
1139 | cursor, | ||
1140 | children = vbox.getChild(), | ||
1141 | enabledFields = 0; | ||
1142 | |||
1143 | while ( ( cursor = children.shift() ) ) { | ||
1144 | // Count all allowed fields. | ||
1145 | if ( !cursor.notAllowed && cursor.type != 'hbox' && cursor.type != 'vbox' ) | ||
1146 | enabledFields++; | ||
1147 | |||
1148 | contentMap[ cursor.id ] = cursor; | ||
1149 | if ( typeof cursor.getChild == 'function' ) | ||
1150 | children.push.apply( children, cursor.getChild() ); | ||
1151 | } | ||
1152 | |||
1153 | // If all fields are disabled (because they are not allowed) hide this tab. | ||
1154 | if ( !enabledFields ) | ||
1155 | contents.hidden = true; | ||
1156 | |||
1157 | // Create the HTML for the tab and the content block. | ||
1158 | var page = CKEDITOR.dom.element.createFromHtml( pageHtml.join( '' ) ); | ||
1159 | page.setAttribute( 'role', 'tabpanel' ); | ||
1160 | |||
1161 | var env = CKEDITOR.env; | ||
1162 | var tabId = 'cke_' + contents.id + '_' + CKEDITOR.tools.getNextNumber(), | ||
1163 | tab = CKEDITOR.dom.element.createFromHtml( [ | ||
1164 | '<a class="cke_dialog_tab"', | ||
1165 | ( this._.pageCount > 0 ? ' cke_last' : 'cke_first' ), | ||
1166 | titleHtml, | ||
1167 | ( !!contents.hidden ? ' style="display:none"' : '' ), | ||
1168 | ' id="', tabId, '"', | ||
1169 | env.gecko && !env.hc ? '' : ' href="javascript:void(0)"', | ||
1170 | ' tabIndex="-1"', | ||
1171 | ' hidefocus="true"', | ||
1172 | ' role="tab">', | ||
1173 | contents.label, | ||
1174 | '</a>' | ||
1175 | ].join( '' ) ); | ||
1176 | |||
1177 | page.setAttribute( 'aria-labelledby', tabId ); | ||
1178 | |||
1179 | // Take records for the tabs and elements created. | ||
1180 | this._.tabs[ contents.id ] = [ tab, page ]; | ||
1181 | this._.tabIdList.push( contents.id ); | ||
1182 | !contents.hidden && this._.pageCount++; | ||
1183 | this._.lastTab = tab; | ||
1184 | this.updateStyle(); | ||
1185 | |||
1186 | // Attach the DOM nodes. | ||
1187 | |||
1188 | page.setAttribute( 'name', contents.id ); | ||
1189 | page.appendTo( this.parts.contents ); | ||
1190 | |||
1191 | tab.unselectable(); | ||
1192 | this.parts.tabs.append( tab ); | ||
1193 | |||
1194 | // Add access key handlers if access key is defined. | ||
1195 | if ( contents.accessKey ) { | ||
1196 | registerAccessKey( this, this, 'CTRL+' + contents.accessKey, tabAccessKeyDown, tabAccessKeyUp ); | ||
1197 | this._.accessKeyMap[ 'CTRL+' + contents.accessKey ] = contents.id; | ||
1198 | } | ||
1199 | }, | ||
1200 | |||
1201 | /** | ||
1202 | * Activates a tab page in the dialog by its id. | ||
1203 | * | ||
1204 | * dialogObj.selectPage( 'tab_1' ); | ||
1205 | * | ||
1206 | * @param {String} id The id of the dialog tab to be activated. | ||
1207 | */ | ||
1208 | selectPage: function( id ) { | ||
1209 | if ( this._.currentTabId == id ) | ||
1210 | return; | ||
1211 | |||
1212 | if ( this._.tabs[ id ][ 0 ].hasClass( 'cke_dialog_tab_disabled' ) ) | ||
1213 | return; | ||
1214 | |||
1215 | // If event was canceled - do nothing. | ||
1216 | if ( this.fire( 'selectPage', { page: id, currentPage: this._.currentTabId } ) === false ) | ||
1217 | return; | ||
1218 | |||
1219 | // Hide the non-selected tabs and pages. | ||
1220 | for ( var i in this._.tabs ) { | ||
1221 | var tab = this._.tabs[ i ][ 0 ], | ||
1222 | page = this._.tabs[ i ][ 1 ]; | ||
1223 | if ( i != id ) { | ||
1224 | tab.removeClass( 'cke_dialog_tab_selected' ); | ||
1225 | page.hide(); | ||
1226 | } | ||
1227 | page.setAttribute( 'aria-hidden', i != id ); | ||
1228 | } | ||
1229 | |||
1230 | var selected = this._.tabs[ id ]; | ||
1231 | selected[ 0 ].addClass( 'cke_dialog_tab_selected' ); | ||
1232 | |||
1233 | // [IE] an invisible input[type='text'] will enlarge it's width | ||
1234 | // if it's value is long when it shows, so we clear it's value | ||
1235 | // before it shows and then recover it (#5649) | ||
1236 | if ( CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat ) { | ||
1237 | clearOrRecoverTextInputValue( selected[ 1 ] ); | ||
1238 | selected[ 1 ].show(); | ||
1239 | setTimeout( function() { | ||
1240 | clearOrRecoverTextInputValue( selected[ 1 ], 1 ); | ||
1241 | }, 0 ); | ||
1242 | } else { | ||
1243 | selected[ 1 ].show(); | ||
1244 | } | ||
1245 | |||
1246 | this._.currentTabId = id; | ||
1247 | this._.currentTabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, id ); | ||
1248 | }, | ||
1249 | |||
1250 | /** | ||
1251 | * Dialog state-specific style updates. | ||
1252 | */ | ||
1253 | updateStyle: function() { | ||
1254 | // If only a single page shown, a different style is used in the central pane. | ||
1255 | this.parts.dialog[ ( this._.pageCount === 1 ? 'add' : 'remove' ) + 'Class' ]( 'cke_single_page' ); | ||
1256 | }, | ||
1257 | |||
1258 | /** | ||
1259 | * Hides a page's tab away from the dialog. | ||
1260 | * | ||
1261 | * dialog.hidePage( 'tab_3' ); | ||
1262 | * | ||
1263 | * @param {String} id The page's Id. | ||
1264 | */ | ||
1265 | hidePage: function( id ) { | ||
1266 | var tab = this._.tabs[ id ] && this._.tabs[ id ][ 0 ]; | ||
1267 | if ( !tab || this._.pageCount == 1 || !tab.isVisible() ) | ||
1268 | return; | ||
1269 | // Switch to other tab first when we're hiding the active tab. | ||
1270 | else if ( id == this._.currentTabId ) | ||
1271 | this.selectPage( getPreviousVisibleTab.call( this ) ); | ||
1272 | |||
1273 | tab.hide(); | ||
1274 | this._.pageCount--; | ||
1275 | this.updateStyle(); | ||
1276 | }, | ||
1277 | |||
1278 | /** | ||
1279 | * Unhides a page's tab. | ||
1280 | * | ||
1281 | * dialog.showPage( 'tab_2' ); | ||
1282 | * | ||
1283 | * @param {String} id The page's Id. | ||
1284 | */ | ||
1285 | showPage: function( id ) { | ||
1286 | var tab = this._.tabs[ id ] && this._.tabs[ id ][ 0 ]; | ||
1287 | if ( !tab ) | ||
1288 | return; | ||
1289 | tab.show(); | ||
1290 | this._.pageCount++; | ||
1291 | this.updateStyle(); | ||
1292 | }, | ||
1293 | |||
1294 | /** | ||
1295 | * Gets the root DOM element of the dialog. | ||
1296 | * | ||
1297 | * var dialogElement = dialogObj.getElement().getFirst(); | ||
1298 | * dialogElement.setStyle( 'padding', '5px' ); | ||
1299 | * | ||
1300 | * @returns {CKEDITOR.dom.element} The `<span>` element containing this dialog. | ||
1301 | */ | ||
1302 | getElement: function() { | ||
1303 | return this._.element; | ||
1304 | }, | ||
1305 | |||
1306 | /** | ||
1307 | * Gets the name of the dialog. | ||
1308 | * | ||
1309 | * var dialogName = dialogObj.getName(); | ||
1310 | * | ||
1311 | * @returns {String} The name of this dialog. | ||
1312 | */ | ||
1313 | getName: function() { | ||
1314 | return this._.name; | ||
1315 | }, | ||
1316 | |||
1317 | /** | ||
1318 | * Gets a dialog UI element object from a dialog page. | ||
1319 | * | ||
1320 | * dialogObj.getContentElement( 'tabId', 'elementId' ).setValue( 'Example' ); | ||
1321 | * | ||
1322 | * @param {String} pageId id of dialog page. | ||
1323 | * @param {String} elementId id of UI element. | ||
1324 | * @returns {CKEDITOR.ui.dialog.uiElement} The dialog UI element. | ||
1325 | */ | ||
1326 | getContentElement: function( pageId, elementId ) { | ||
1327 | var page = this._.contents[ pageId ]; | ||
1328 | return page && page[ elementId ]; | ||
1329 | }, | ||
1330 | |||
1331 | /** | ||
1332 | * Gets the value of a dialog UI element. | ||
1333 | * | ||
1334 | * alert( dialogObj.getValueOf( 'tabId', 'elementId' ) ); | ||
1335 | * | ||
1336 | * @param {String} pageId id of dialog page. | ||
1337 | * @param {String} elementId id of UI element. | ||
1338 | * @returns {Object} The value of the UI element. | ||
1339 | */ | ||
1340 | getValueOf: function( pageId, elementId ) { | ||
1341 | return this.getContentElement( pageId, elementId ).getValue(); | ||
1342 | }, | ||
1343 | |||
1344 | /** | ||
1345 | * Sets the value of a dialog UI element. | ||
1346 | * | ||
1347 | * dialogObj.setValueOf( 'tabId', 'elementId', 'Example' ); | ||
1348 | * | ||
1349 | * @param {String} pageId id of the dialog page. | ||
1350 | * @param {String} elementId id of the UI element. | ||
1351 | * @param {Object} value The new value of the UI element. | ||
1352 | */ | ||
1353 | setValueOf: function( pageId, elementId, value ) { | ||
1354 | return this.getContentElement( pageId, elementId ).setValue( value ); | ||
1355 | }, | ||
1356 | |||
1357 | /** | ||
1358 | * Gets the UI element of a button in the dialog's button row. | ||
1359 | * | ||
1360 | * @returns {CKEDITOR.ui.dialog.button} The button object. | ||
1361 | * | ||
1362 | * @param {String} id The id of the button. | ||
1363 | */ | ||
1364 | getButton: function( id ) { | ||
1365 | return this._.buttons[ id ]; | ||
1366 | }, | ||
1367 | |||
1368 | /** | ||
1369 | * Simulates a click to a dialog button in the dialog's button row. | ||
1370 | * | ||
1371 | * @returns The return value of the dialog's `click` event. | ||
1372 | * | ||
1373 | * @param {String} id The id of the button. | ||
1374 | */ | ||
1375 | click: function( id ) { | ||
1376 | return this._.buttons[ id ].click(); | ||
1377 | }, | ||
1378 | |||
1379 | /** | ||
1380 | * Disables a dialog button. | ||
1381 | * | ||
1382 | * @param {String} id The id of the button. | ||
1383 | */ | ||
1384 | disableButton: function( id ) { | ||
1385 | return this._.buttons[ id ].disable(); | ||
1386 | }, | ||
1387 | |||
1388 | /** | ||
1389 | * Enables a dialog button. | ||
1390 | * | ||
1391 | * @param {String} id The id of the button. | ||
1392 | */ | ||
1393 | enableButton: function( id ) { | ||
1394 | return this._.buttons[ id ].enable(); | ||
1395 | }, | ||
1396 | |||
1397 | /** | ||
1398 | * Gets the number of pages in the dialog. | ||
1399 | * | ||
1400 | * @returns {Number} Page count. | ||
1401 | */ | ||
1402 | getPageCount: function() { | ||
1403 | return this._.pageCount; | ||
1404 | }, | ||
1405 | |||
1406 | /** | ||
1407 | * Gets the editor instance which opened this dialog. | ||
1408 | * | ||
1409 | * @returns {CKEDITOR.editor} Parent editor instances. | ||
1410 | */ | ||
1411 | getParentEditor: function() { | ||
1412 | return this._.editor; | ||
1413 | }, | ||
1414 | |||
1415 | /** | ||
1416 | * Gets the element that was selected when opening the dialog, if any. | ||
1417 | * | ||
1418 | * @returns {CKEDITOR.dom.element} The element that was selected, or `null`. | ||
1419 | */ | ||
1420 | getSelectedElement: function() { | ||
1421 | return this.getParentEditor().getSelection().getSelectedElement(); | ||
1422 | }, | ||
1423 | |||
1424 | /** | ||
1425 | * Adds element to dialog's focusable list. | ||
1426 | * | ||
1427 | * @param {CKEDITOR.dom.element} element | ||
1428 | * @param {Number} [index] | ||
1429 | */ | ||
1430 | addFocusable: function( element, index ) { | ||
1431 | if ( typeof index == 'undefined' ) { | ||
1432 | index = this._.focusList.length; | ||
1433 | this._.focusList.push( new Focusable( this, element, index ) ); | ||
1434 | } else { | ||
1435 | this._.focusList.splice( index, 0, new Focusable( this, element, index ) ); | ||
1436 | for ( var i = index + 1; i < this._.focusList.length; i++ ) | ||
1437 | this._.focusList[ i ].focusIndex++; | ||
1438 | } | ||
1439 | }, | ||
1440 | |||
1441 | /** | ||
1442 | * Sets the dialog {@link #property-state}. | ||
1443 | * | ||
1444 | * @since 4.5 | ||
1445 | * @param {Number} state Either {@link CKEDITOR#DIALOG_STATE_IDLE} or {@link CKEDITOR#DIALOG_STATE_BUSY}. | ||
1446 | */ | ||
1447 | setState: function( state ) { | ||
1448 | var oldState = this.state; | ||
1449 | |||
1450 | if ( oldState == state ) { | ||
1451 | return; | ||
1452 | } | ||
1453 | |||
1454 | this.state = state; | ||
1455 | |||
1456 | if ( state == CKEDITOR.DIALOG_STATE_BUSY ) { | ||
1457 | // Insert the spinner on demand. | ||
1458 | if ( !this.parts.spinner ) { | ||
1459 | var dir = this.getParentEditor().lang.dir, | ||
1460 | spinnerDef = { | ||
1461 | attributes: { | ||
1462 | 'class': 'cke_dialog_spinner' | ||
1463 | }, | ||
1464 | styles: { | ||
1465 | 'float': dir == 'rtl' ? 'right' : 'left' | ||
1466 | } | ||
1467 | }; | ||
1468 | |||
1469 | spinnerDef.styles[ 'margin-' + ( dir == 'rtl' ? 'left' : 'right' ) ] = '8px'; | ||
1470 | |||
1471 | this.parts.spinner = CKEDITOR.document.createElement( 'div', spinnerDef ); | ||
1472 | |||
1473 | this.parts.spinner.setHtml( '⌛' ); | ||
1474 | this.parts.spinner.appendTo( this.parts.title, 1 ); | ||
1475 | } | ||
1476 | |||
1477 | // Finally, show the spinner. | ||
1478 | this.parts.spinner.show(); | ||
1479 | |||
1480 | this.getButton( 'ok' ).disable(); | ||
1481 | } else if ( state == CKEDITOR.DIALOG_STATE_IDLE ) { | ||
1482 | // Hide the spinner. But don't do anything if there is no spinner yet. | ||
1483 | this.parts.spinner && this.parts.spinner.hide(); | ||
1484 | |||
1485 | this.getButton( 'ok' ).enable(); | ||
1486 | } | ||
1487 | |||
1488 | this.fire( 'state', state ); | ||
1489 | } | ||
1490 | }; | ||
1491 | |||
1492 | CKEDITOR.tools.extend( CKEDITOR.dialog, { | ||
1493 | /** | ||
1494 | * Registers a dialog. | ||
1495 | * | ||
1496 | * // Full sample plugin, which does not only register a dialog window but also adds an item to the context menu. | ||
1497 | * // To open the dialog window, choose "Open dialog" in the context menu. | ||
1498 | * CKEDITOR.plugins.add( 'myplugin', { | ||
1499 | * init: function( editor ) { | ||
1500 | * editor.addCommand( 'mydialog',new CKEDITOR.dialogCommand( 'mydialog' ) ); | ||
1501 | * | ||
1502 | * if ( editor.contextMenu ) { | ||
1503 | * editor.addMenuGroup( 'mygroup', 10 ); | ||
1504 | * editor.addMenuItem( 'My Dialog', { | ||
1505 | * label: 'Open dialog', | ||
1506 | * command: 'mydialog', | ||
1507 | * group: 'mygroup' | ||
1508 | * } ); | ||
1509 | * editor.contextMenu.addListener( function( element ) { | ||
1510 | * return { 'My Dialog': CKEDITOR.TRISTATE_OFF }; | ||
1511 | * } ); | ||
1512 | * } | ||
1513 | * | ||
1514 | * CKEDITOR.dialog.add( 'mydialog', function( api ) { | ||
1515 | * // CKEDITOR.dialog.definition | ||
1516 | * var dialogDefinition = { | ||
1517 | * title: 'Sample dialog', | ||
1518 | * minWidth: 390, | ||
1519 | * minHeight: 130, | ||
1520 | * contents: [ | ||
1521 | * { | ||
1522 | * id: 'tab1', | ||
1523 | * label: 'Label', | ||
1524 | * title: 'Title', | ||
1525 | * expand: true, | ||
1526 | * padding: 0, | ||
1527 | * elements: [ | ||
1528 | * { | ||
1529 | * type: 'html', | ||
1530 | * html: '<p>This is some sample HTML content.</p>' | ||
1531 | * }, | ||
1532 | * { | ||
1533 | * type: 'textarea', | ||
1534 | * id: 'textareaId', | ||
1535 | * rows: 4, | ||
1536 | * cols: 40 | ||
1537 | * } | ||
1538 | * ] | ||
1539 | * } | ||
1540 | * ], | ||
1541 | * buttons: [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ], | ||
1542 | * onOk: function() { | ||
1543 | * // "this" is now a CKEDITOR.dialog object. | ||
1544 | * // Accessing dialog elements: | ||
1545 | * var textareaObj = this.getContentElement( 'tab1', 'textareaId' ); | ||
1546 | * alert( "You have entered: " + textareaObj.getValue() ); | ||
1547 | * } | ||
1548 | * }; | ||
1549 | * | ||
1550 | * return dialogDefinition; | ||
1551 | * } ); | ||
1552 | * } | ||
1553 | * } ); | ||
1554 | * | ||
1555 | * CKEDITOR.replace( 'editor1', { extraPlugins: 'myplugin' } ); | ||
1556 | * | ||
1557 | * @static | ||
1558 | * @param {String} name The dialog's name. | ||
1559 | * @param {Function/String} dialogDefinition | ||
1560 | * A function returning the dialog's definition, or the URL to the `.js` file holding the function. | ||
1561 | * The function should accept an argument `editor` which is the current editor instance, and | ||
1562 | * return an object conforming to {@link CKEDITOR.dialog.definition}. | ||
1563 | * @see CKEDITOR.dialog.definition | ||
1564 | */ | ||
1565 | add: function( name, dialogDefinition ) { | ||
1566 | // Avoid path registration from multiple instances override definition. | ||
1567 | if ( !this._.dialogDefinitions[ name ] || typeof dialogDefinition == 'function' ) | ||
1568 | this._.dialogDefinitions[ name ] = dialogDefinition; | ||
1569 | }, | ||
1570 | |||
1571 | /** | ||
1572 | * @static | ||
1573 | * @todo | ||
1574 | */ | ||
1575 | exists: function( name ) { | ||
1576 | return !!this._.dialogDefinitions[ name ]; | ||
1577 | }, | ||
1578 | |||
1579 | /** | ||
1580 | * @static | ||
1581 | * @todo | ||
1582 | */ | ||
1583 | getCurrent: function() { | ||
1584 | return CKEDITOR.dialog._.currentTop; | ||
1585 | }, | ||
1586 | |||
1587 | /** | ||
1588 | * Check whether tab wasn't removed by {@link CKEDITOR.config#removeDialogTabs}. | ||
1589 | * | ||
1590 | * @since 4.1 | ||
1591 | * @static | ||
1592 | * @param {CKEDITOR.editor} editor | ||
1593 | * @param {String} dialogName | ||
1594 | * @param {String} tabName | ||
1595 | * @returns {Boolean} | ||
1596 | */ | ||
1597 | isTabEnabled: function( editor, dialogName, tabName ) { | ||
1598 | var cfg = editor.config.removeDialogTabs; | ||
1599 | |||
1600 | return !( cfg && cfg.match( new RegExp( '(?:^|;)' + dialogName + ':' + tabName + '(?:$|;)', 'i' ) ) ); | ||
1601 | }, | ||
1602 | |||
1603 | /** | ||
1604 | * The default OK button for dialogs. Fires the `ok` event and closes the dialog if the event succeeds. | ||
1605 | * | ||
1606 | * @static | ||
1607 | * @method | ||
1608 | */ | ||
1609 | okButton: ( function() { | ||
1610 | var retval = function( editor, override ) { | ||
1611 | override = override || {}; | ||
1612 | return CKEDITOR.tools.extend( { | ||
1613 | id: 'ok', | ||
1614 | type: 'button', | ||
1615 | label: editor.lang.common.ok, | ||
1616 | 'class': 'cke_dialog_ui_button_ok', | ||
1617 | onClick: function( evt ) { | ||
1618 | var dialog = evt.data.dialog; | ||
1619 | if ( dialog.fire( 'ok', { hide: true } ).hide !== false ) | ||
1620 | dialog.hide(); | ||
1621 | } | ||
1622 | }, override, true ); | ||
1623 | }; | ||
1624 | retval.type = 'button'; | ||
1625 | retval.override = function( override ) { | ||
1626 | return CKEDITOR.tools.extend( function( editor ) { | ||
1627 | return retval( editor, override ); | ||
1628 | }, { type: 'button' }, true ); | ||
1629 | }; | ||
1630 | return retval; | ||
1631 | } )(), | ||
1632 | |||
1633 | /** | ||
1634 | * The default cancel button for dialogs. Fires the `cancel` event and | ||
1635 | * closes the dialog if no UI element value changed. | ||
1636 | * | ||
1637 | * @static | ||
1638 | * @method | ||
1639 | */ | ||
1640 | cancelButton: ( function() { | ||
1641 | var retval = function( editor, override ) { | ||
1642 | override = override || {}; | ||
1643 | return CKEDITOR.tools.extend( { | ||
1644 | id: 'cancel', | ||
1645 | type: 'button', | ||
1646 | label: editor.lang.common.cancel, | ||
1647 | 'class': 'cke_dialog_ui_button_cancel', | ||
1648 | onClick: function( evt ) { | ||
1649 | var dialog = evt.data.dialog; | ||
1650 | if ( dialog.fire( 'cancel', { hide: true } ).hide !== false ) | ||
1651 | dialog.hide(); | ||
1652 | } | ||
1653 | }, override, true ); | ||
1654 | }; | ||
1655 | retval.type = 'button'; | ||
1656 | retval.override = function( override ) { | ||
1657 | return CKEDITOR.tools.extend( function( editor ) { | ||
1658 | return retval( editor, override ); | ||
1659 | }, { type: 'button' }, true ); | ||
1660 | }; | ||
1661 | return retval; | ||
1662 | } )(), | ||
1663 | |||
1664 | /** | ||
1665 | * Registers a dialog UI element. | ||
1666 | * | ||
1667 | * @static | ||
1668 | * @param {String} typeName The name of the UI element. | ||
1669 | * @param {Function} builder The function to build the UI element. | ||
1670 | */ | ||
1671 | addUIElement: function( typeName, builder ) { | ||
1672 | this._.uiElementBuilders[ typeName ] = builder; | ||
1673 | } | ||
1674 | } ); | ||
1675 | |||
1676 | CKEDITOR.dialog._ = { | ||
1677 | uiElementBuilders: {}, | ||
1678 | |||
1679 | dialogDefinitions: {}, | ||
1680 | |||
1681 | currentTop: null, | ||
1682 | |||
1683 | currentZIndex: null | ||
1684 | }; | ||
1685 | |||
1686 | // "Inherit" (copy actually) from CKEDITOR.event. | ||
1687 | CKEDITOR.event.implementOn( CKEDITOR.dialog ); | ||
1688 | CKEDITOR.event.implementOn( CKEDITOR.dialog.prototype ); | ||
1689 | |||
1690 | var defaultDialogDefinition = { | ||
1691 | resizable: CKEDITOR.DIALOG_RESIZE_BOTH, | ||
1692 | minWidth: 600, | ||
1693 | minHeight: 400, | ||
1694 | buttons: [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ] | ||
1695 | }; | ||
1696 | |||
1697 | // Tool function used to return an item from an array based on its id | ||
1698 | // property. | ||
1699 | var getById = function( array, id, recurse ) { | ||
1700 | for ( var i = 0, item; | ||
1701 | ( item = array[ i ] ); i++ ) { | ||
1702 | if ( item.id == id ) | ||
1703 | return item; | ||
1704 | if ( recurse && item[ recurse ] ) { | ||
1705 | var retval = getById( item[ recurse ], id, recurse ); | ||
1706 | if ( retval ) | ||
1707 | return retval; | ||
1708 | } | ||
1709 | } | ||
1710 | return null; | ||
1711 | }; | ||
1712 | |||
1713 | // Tool function used to add an item into an array. | ||
1714 | var addById = function( array, newItem, nextSiblingId, recurse, nullIfNotFound ) { | ||
1715 | if ( nextSiblingId ) { | ||
1716 | for ( var i = 0, item; | ||
1717 | ( item = array[ i ] ); i++ ) { | ||
1718 | if ( item.id == nextSiblingId ) { | ||
1719 | array.splice( i, 0, newItem ); | ||
1720 | return newItem; | ||
1721 | } | ||
1722 | |||
1723 | if ( recurse && item[ recurse ] ) { | ||
1724 | var retval = addById( item[ recurse ], newItem, nextSiblingId, recurse, true ); | ||
1725 | if ( retval ) | ||
1726 | return retval; | ||
1727 | } | ||
1728 | } | ||
1729 | |||
1730 | if ( nullIfNotFound ) | ||
1731 | return null; | ||
1732 | } | ||
1733 | |||
1734 | array.push( newItem ); | ||
1735 | return newItem; | ||
1736 | }; | ||
1737 | |||
1738 | // Tool function used to remove an item from an array based on its id. | ||
1739 | var removeById = function( array, id, recurse ) { | ||
1740 | for ( var i = 0, item; | ||
1741 | ( item = array[ i ] ); i++ ) { | ||
1742 | if ( item.id == id ) | ||
1743 | return array.splice( i, 1 ); | ||
1744 | if ( recurse && item[ recurse ] ) { | ||
1745 | var retval = removeById( item[ recurse ], id, recurse ); | ||
1746 | if ( retval ) | ||
1747 | return retval; | ||
1748 | } | ||
1749 | } | ||
1750 | return null; | ||
1751 | }; | ||
1752 | |||
1753 | /** | ||
1754 | * This class is not really part of the API. It is the `definition` property value | ||
1755 | * passed to `dialogDefinition` event handlers. | ||
1756 | * | ||
1757 | * CKEDITOR.on( 'dialogDefinition', function( evt ) { | ||
1758 | * var definition = evt.data.definition; | ||
1759 | * var content = definition.getContents( 'page1' ); | ||
1760 | * // ... | ||
1761 | * } ); | ||
1762 | * | ||
1763 | * @private | ||
1764 | * @class CKEDITOR.dialog.definitionObject | ||
1765 | * @extends CKEDITOR.dialog.definition | ||
1766 | * @constructor Creates a definitionObject class instance. | ||
1767 | */ | ||
1768 | var definitionObject = function( dialog, dialogDefinition ) { | ||
1769 | // TODO : Check if needed. | ||
1770 | this.dialog = dialog; | ||
1771 | |||
1772 | // Transform the contents entries in contentObjects. | ||
1773 | var contents = dialogDefinition.contents; | ||
1774 | for ( var i = 0, content; | ||
1775 | ( content = contents[ i ] ); i++ ) | ||
1776 | contents[ i ] = content && new contentObject( dialog, content ); | ||
1777 | |||
1778 | CKEDITOR.tools.extend( this, dialogDefinition ); | ||
1779 | }; | ||
1780 | |||
1781 | definitionObject.prototype = { | ||
1782 | /** | ||
1783 | * Gets a content definition. | ||
1784 | * | ||
1785 | * @param {String} id The id of the content definition. | ||
1786 | * @returns {CKEDITOR.dialog.definition.content} The content definition matching id. | ||
1787 | */ | ||
1788 | getContents: function( id ) { | ||
1789 | return getById( this.contents, id ); | ||
1790 | }, | ||
1791 | |||
1792 | /** | ||
1793 | * Gets a button definition. | ||
1794 | * | ||
1795 | * @param {String} id The id of the button definition. | ||
1796 | * @returns {CKEDITOR.dialog.definition.button} The button definition matching id. | ||
1797 | */ | ||
1798 | getButton: function( id ) { | ||
1799 | return getById( this.buttons, id ); | ||
1800 | }, | ||
1801 | |||
1802 | /** | ||
1803 | * Adds a content definition object under this dialog definition. | ||
1804 | * | ||
1805 | * @param {CKEDITOR.dialog.definition.content} contentDefinition The | ||
1806 | * content definition. | ||
1807 | * @param {String} [nextSiblingId] The id of an existing content | ||
1808 | * definition which the new content definition will be inserted | ||
1809 | * before. Omit if the new content definition is to be inserted as | ||
1810 | * the last item. | ||
1811 | * @returns {CKEDITOR.dialog.definition.content} The inserted content definition. | ||
1812 | */ | ||
1813 | addContents: function( contentDefinition, nextSiblingId ) { | ||
1814 | return addById( this.contents, contentDefinition, nextSiblingId ); | ||
1815 | }, | ||
1816 | |||
1817 | /** | ||
1818 | * Adds a button definition object under this dialog definition. | ||
1819 | * | ||
1820 | * @param {CKEDITOR.dialog.definition.button} buttonDefinition The | ||
1821 | * button definition. | ||
1822 | * @param {String} [nextSiblingId] The id of an existing button | ||
1823 | * definition which the new button definition will be inserted | ||
1824 | * before. Omit if the new button definition is to be inserted as | ||
1825 | * the last item. | ||
1826 | * @returns {CKEDITOR.dialog.definition.button} The inserted button definition. | ||
1827 | */ | ||
1828 | addButton: function( buttonDefinition, nextSiblingId ) { | ||
1829 | return addById( this.buttons, buttonDefinition, nextSiblingId ); | ||
1830 | }, | ||
1831 | |||
1832 | /** | ||
1833 | * Removes a content definition from this dialog definition. | ||
1834 | * | ||
1835 | * @param {String} id The id of the content definition to be removed. | ||
1836 | * @returns {CKEDITOR.dialog.definition.content} The removed content definition. | ||
1837 | */ | ||
1838 | removeContents: function( id ) { | ||
1839 | removeById( this.contents, id ); | ||
1840 | }, | ||
1841 | |||
1842 | /** | ||
1843 | * Removes a button definition from the dialog definition. | ||
1844 | * | ||
1845 | * @param {String} id The id of the button definition to be removed. | ||
1846 | * @returns {CKEDITOR.dialog.definition.button} The removed button definition. | ||
1847 | */ | ||
1848 | removeButton: function( id ) { | ||
1849 | removeById( this.buttons, id ); | ||
1850 | } | ||
1851 | }; | ||
1852 | |||
1853 | /** | ||
1854 | * This class is not really part of the API. It is the template of the | ||
1855 | * objects representing content pages inside the | ||
1856 | * CKEDITOR.dialog.definitionObject. | ||
1857 | * | ||
1858 | * CKEDITOR.on( 'dialogDefinition', function( evt ) { | ||
1859 | * var definition = evt.data.definition; | ||
1860 | * var content = definition.getContents( 'page1' ); | ||
1861 | * content.remove( 'textInput1' ); | ||
1862 | * // ... | ||
1863 | * } ); | ||
1864 | * | ||
1865 | * @private | ||
1866 | * @class CKEDITOR.dialog.definition.contentObject | ||
1867 | * @constructor Creates a contentObject class instance. | ||
1868 | */ | ||
1869 | function contentObject( dialog, contentDefinition ) { | ||
1870 | this._ = { | ||
1871 | dialog: dialog | ||
1872 | }; | ||
1873 | |||
1874 | CKEDITOR.tools.extend( this, contentDefinition ); | ||
1875 | } | ||
1876 | |||
1877 | contentObject.prototype = { | ||
1878 | /** | ||
1879 | * Gets a UI element definition under the content definition. | ||
1880 | * | ||
1881 | * @param {String} id The id of the UI element definition. | ||
1882 | * @returns {CKEDITOR.dialog.definition.uiElement} | ||
1883 | */ | ||
1884 | get: function( id ) { | ||
1885 | return getById( this.elements, id, 'children' ); | ||
1886 | }, | ||
1887 | |||
1888 | /** | ||
1889 | * Adds a UI element definition to the content definition. | ||
1890 | * | ||
1891 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition The | ||
1892 | * UI elemnet definition to be added. | ||
1893 | * @param {String} nextSiblingId The id of an existing UI element | ||
1894 | * definition which the new UI element definition will be inserted | ||
1895 | * before. Omit if the new button definition is to be inserted as | ||
1896 | * the last item. | ||
1897 | * @returns {CKEDITOR.dialog.definition.uiElement} The element definition inserted. | ||
1898 | */ | ||
1899 | add: function( elementDefinition, nextSiblingId ) { | ||
1900 | return addById( this.elements, elementDefinition, nextSiblingId, 'children' ); | ||
1901 | }, | ||
1902 | |||
1903 | /** | ||
1904 | * Removes a UI element definition from the content definition. | ||
1905 | * | ||
1906 | * @param {String} id The id of the UI element definition to be removed. | ||
1907 | * @returns {CKEDITOR.dialog.definition.uiElement} The element definition removed. | ||
1908 | */ | ||
1909 | remove: function( id ) { | ||
1910 | removeById( this.elements, id, 'children' ); | ||
1911 | } | ||
1912 | }; | ||
1913 | |||
1914 | function initDragAndDrop( dialog ) { | ||
1915 | var lastCoords = null, | ||
1916 | abstractDialogCoords = null, | ||
1917 | editor = dialog.getParentEditor(), | ||
1918 | magnetDistance = editor.config.dialog_magnetDistance, | ||
1919 | margins = CKEDITOR.skin.margins || [ 0, 0, 0, 0 ]; | ||
1920 | |||
1921 | if ( typeof magnetDistance == 'undefined' ) | ||
1922 | magnetDistance = 20; | ||
1923 | |||
1924 | function mouseMoveHandler( evt ) { | ||
1925 | var dialogSize = dialog.getSize(), | ||
1926 | viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(), | ||
1927 | x = evt.data.$.screenX, | ||
1928 | y = evt.data.$.screenY, | ||
1929 | dx = x - lastCoords.x, | ||
1930 | dy = y - lastCoords.y, | ||
1931 | realX, realY; | ||
1932 | |||
1933 | lastCoords = { x: x, y: y }; | ||
1934 | abstractDialogCoords.x += dx; | ||
1935 | abstractDialogCoords.y += dy; | ||
1936 | |||
1937 | if ( abstractDialogCoords.x + margins[ 3 ] < magnetDistance ) | ||
1938 | realX = -margins[ 3 ]; | ||
1939 | else if ( abstractDialogCoords.x - margins[ 1 ] > viewPaneSize.width - dialogSize.width - magnetDistance ) | ||
1940 | realX = viewPaneSize.width - dialogSize.width + ( editor.lang.dir == 'rtl' ? 0 : margins[ 1 ] ); | ||
1941 | else | ||
1942 | realX = abstractDialogCoords.x; | ||
1943 | |||
1944 | if ( abstractDialogCoords.y + margins[ 0 ] < magnetDistance ) | ||
1945 | realY = -margins[ 0 ]; | ||
1946 | else if ( abstractDialogCoords.y - margins[ 2 ] > viewPaneSize.height - dialogSize.height - magnetDistance ) | ||
1947 | realY = viewPaneSize.height - dialogSize.height + margins[ 2 ]; | ||
1948 | else | ||
1949 | realY = abstractDialogCoords.y; | ||
1950 | |||
1951 | dialog.move( realX, realY, 1 ); | ||
1952 | |||
1953 | evt.data.preventDefault(); | ||
1954 | } | ||
1955 | |||
1956 | function mouseUpHandler() { | ||
1957 | CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler ); | ||
1958 | CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler ); | ||
1959 | |||
1960 | if ( CKEDITOR.env.ie6Compat ) { | ||
1961 | var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); | ||
1962 | coverDoc.removeListener( 'mousemove', mouseMoveHandler ); | ||
1963 | coverDoc.removeListener( 'mouseup', mouseUpHandler ); | ||
1964 | } | ||
1965 | } | ||
1966 | |||
1967 | dialog.parts.title.on( 'mousedown', function( evt ) { | ||
1968 | lastCoords = { x: evt.data.$.screenX, y: evt.data.$.screenY }; | ||
1969 | |||
1970 | CKEDITOR.document.on( 'mousemove', mouseMoveHandler ); | ||
1971 | CKEDITOR.document.on( 'mouseup', mouseUpHandler ); | ||
1972 | abstractDialogCoords = dialog.getPosition(); | ||
1973 | |||
1974 | if ( CKEDITOR.env.ie6Compat ) { | ||
1975 | var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); | ||
1976 | coverDoc.on( 'mousemove', mouseMoveHandler ); | ||
1977 | coverDoc.on( 'mouseup', mouseUpHandler ); | ||
1978 | } | ||
1979 | |||
1980 | evt.data.preventDefault(); | ||
1981 | }, dialog ); | ||
1982 | } | ||
1983 | |||
1984 | function initResizeHandles( dialog ) { | ||
1985 | var def = dialog.definition, | ||
1986 | resizable = def.resizable; | ||
1987 | |||
1988 | if ( resizable == CKEDITOR.DIALOG_RESIZE_NONE ) | ||
1989 | return; | ||
1990 | |||
1991 | var editor = dialog.getParentEditor(); | ||
1992 | var wrapperWidth, wrapperHeight, viewSize, origin, startSize, dialogCover; | ||
1993 | |||
1994 | var mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) { | ||
1995 | startSize = dialog.getSize(); | ||
1996 | |||
1997 | var content = dialog.parts.contents, | ||
1998 | iframeDialog = content.$.getElementsByTagName( 'iframe' ).length; | ||
1999 | |||
2000 | // Shim to help capturing "mousemove" over iframe. | ||
2001 | if ( iframeDialog ) { | ||
2002 | dialogCover = CKEDITOR.dom.element.createFromHtml( '<div class="cke_dialog_resize_cover" style="height: 100%; position: absolute; width: 100%;"></div>' ); | ||
2003 | content.append( dialogCover ); | ||
2004 | } | ||
2005 | |||
2006 | // Calculate the offset between content and chrome size. | ||
2007 | wrapperHeight = startSize.height - dialog.parts.contents.getSize( 'height', !( CKEDITOR.env.gecko || CKEDITOR.env.ie && CKEDITOR.env.quirks ) ); | ||
2008 | wrapperWidth = startSize.width - dialog.parts.contents.getSize( 'width', 1 ); | ||
2009 | |||
2010 | origin = { x: $event.screenX, y: $event.screenY }; | ||
2011 | |||
2012 | viewSize = CKEDITOR.document.getWindow().getViewPaneSize(); | ||
2013 | |||
2014 | CKEDITOR.document.on( 'mousemove', mouseMoveHandler ); | ||
2015 | CKEDITOR.document.on( 'mouseup', mouseUpHandler ); | ||
2016 | |||
2017 | if ( CKEDITOR.env.ie6Compat ) { | ||
2018 | var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); | ||
2019 | coverDoc.on( 'mousemove', mouseMoveHandler ); | ||
2020 | coverDoc.on( 'mouseup', mouseUpHandler ); | ||
2021 | } | ||
2022 | |||
2023 | $event.preventDefault && $event.preventDefault(); | ||
2024 | } ); | ||
2025 | |||
2026 | // Prepend the grip to the dialog. | ||
2027 | dialog.on( 'load', function() { | ||
2028 | var direction = ''; | ||
2029 | if ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH ) | ||
2030 | direction = ' cke_resizer_horizontal'; | ||
2031 | else if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT ) | ||
2032 | direction = ' cke_resizer_vertical'; | ||
2033 | var resizer = CKEDITOR.dom.element.createFromHtml( | ||
2034 | '<div' + | ||
2035 | ' class="cke_resizer' + direction + ' cke_resizer_' + editor.lang.dir + '"' + | ||
2036 | ' title="' + CKEDITOR.tools.htmlEncode( editor.lang.common.resize ) + '"' + | ||
2037 | ' onmousedown="CKEDITOR.tools.callFunction(' + mouseDownFn + ', event )">' + | ||
2038 | // BLACK LOWER RIGHT TRIANGLE (ltr) | ||
2039 | // BLACK LOWER LEFT TRIANGLE (rtl) | ||
2040 | ( editor.lang.dir == 'ltr' ? '\u25E2' : '\u25E3' ) + | ||
2041 | '</div>' ); | ||
2042 | dialog.parts.footer.append( resizer, 1 ); | ||
2043 | } ); | ||
2044 | editor.on( 'destroy', function() { | ||
2045 | CKEDITOR.tools.removeFunction( mouseDownFn ); | ||
2046 | } ); | ||
2047 | |||
2048 | function mouseMoveHandler( evt ) { | ||
2049 | var rtl = editor.lang.dir == 'rtl', | ||
2050 | dx = ( evt.data.$.screenX - origin.x ) * ( rtl ? -1 : 1 ), | ||
2051 | dy = evt.data.$.screenY - origin.y, | ||
2052 | width = startSize.width, | ||
2053 | height = startSize.height, | ||
2054 | internalWidth = width + dx * ( dialog._.moved ? 1 : 2 ), | ||
2055 | internalHeight = height + dy * ( dialog._.moved ? 1 : 2 ), | ||
2056 | element = dialog._.element.getFirst(), | ||
2057 | right = rtl && element.getComputedStyle( 'right' ), | ||
2058 | position = dialog.getPosition(); | ||
2059 | |||
2060 | if ( position.y + internalHeight > viewSize.height ) | ||
2061 | internalHeight = viewSize.height - position.y; | ||
2062 | |||
2063 | if ( ( rtl ? right : position.x ) + internalWidth > viewSize.width ) | ||
2064 | internalWidth = viewSize.width - ( rtl ? right : position.x ); | ||
2065 | |||
2066 | // Make sure the dialog will not be resized to the wrong side when it's in the leftmost position for RTL. | ||
2067 | if ( ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) ) | ||
2068 | width = Math.max( def.minWidth || 0, internalWidth - wrapperWidth ); | ||
2069 | |||
2070 | if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) | ||
2071 | height = Math.max( def.minHeight || 0, internalHeight - wrapperHeight ); | ||
2072 | |||
2073 | dialog.resize( width, height ); | ||
2074 | |||
2075 | if ( !dialog._.moved ) | ||
2076 | dialog.layout(); | ||
2077 | |||
2078 | evt.data.preventDefault(); | ||
2079 | } | ||
2080 | |||
2081 | function mouseUpHandler() { | ||
2082 | CKEDITOR.document.removeListener( 'mouseup', mouseUpHandler ); | ||
2083 | CKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler ); | ||
2084 | |||
2085 | if ( dialogCover ) { | ||
2086 | dialogCover.remove(); | ||
2087 | dialogCover = null; | ||
2088 | } | ||
2089 | |||
2090 | if ( CKEDITOR.env.ie6Compat ) { | ||
2091 | var coverDoc = currentCover.getChild( 0 ).getFrameDocument(); | ||
2092 | coverDoc.removeListener( 'mouseup', mouseUpHandler ); | ||
2093 | coverDoc.removeListener( 'mousemove', mouseMoveHandler ); | ||
2094 | } | ||
2095 | } | ||
2096 | } | ||
2097 | |||
2098 | var resizeCover; | ||
2099 | // Caching resuable covers and allowing only one cover | ||
2100 | // on screen. | ||
2101 | var covers = {}, | ||
2102 | currentCover; | ||
2103 | |||
2104 | function cancelEvent( ev ) { | ||
2105 | ev.data.preventDefault( 1 ); | ||
2106 | } | ||
2107 | |||
2108 | function showCover( editor ) { | ||
2109 | var win = CKEDITOR.document.getWindow(); | ||
2110 | var config = editor.config, | ||
2111 | backgroundColorStyle = config.dialog_backgroundCoverColor || 'white', | ||
2112 | backgroundCoverOpacity = config.dialog_backgroundCoverOpacity, | ||
2113 | baseFloatZIndex = config.baseFloatZIndex, | ||
2114 | coverKey = CKEDITOR.tools.genKey( backgroundColorStyle, backgroundCoverOpacity, baseFloatZIndex ), | ||
2115 | coverElement = covers[ coverKey ]; | ||
2116 | |||
2117 | if ( !coverElement ) { | ||
2118 | var html = [ | ||
2119 | '<div tabIndex="-1" style="position: ', ( CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed' ), | ||
2120 | '; z-index: ', baseFloatZIndex, | ||
2121 | '; top: 0px; left: 0px; ', | ||
2122 | ( !CKEDITOR.env.ie6Compat ? 'background-color: ' + backgroundColorStyle : '' ), | ||
2123 | '" class="cke_dialog_background_cover">' | ||
2124 | ]; | ||
2125 | |||
2126 | if ( CKEDITOR.env.ie6Compat ) { | ||
2127 | // Support for custom document.domain in IE. | ||
2128 | var iframeHtml = '<html><body style=\\\'background-color:' + backgroundColorStyle + ';\\\'></body></html>'; | ||
2129 | |||
2130 | html.push( '<iframe' + | ||
2131 | ' hidefocus="true"' + | ||
2132 | ' frameborder="0"' + | ||
2133 | ' id="cke_dialog_background_iframe"' + | ||
2134 | ' src="javascript:' ); | ||
2135 | |||
2136 | html.push( 'void((function(){' + encodeURIComponent( | ||
2137 | 'document.open();' + | ||
2138 | // Support for custom document.domain in IE. | ||
2139 | '(' + CKEDITOR.tools.fixDomain + ')();' + | ||
2140 | 'document.write( \'' + iframeHtml + '\' );' + | ||
2141 | 'document.close();' | ||
2142 | ) + '})())' ); | ||
2143 | |||
2144 | html.push( '"' + | ||
2145 | ' style="' + | ||
2146 | 'position:absolute;' + | ||
2147 | 'left:0;' + | ||
2148 | 'top:0;' + | ||
2149 | 'width:100%;' + | ||
2150 | 'height: 100%;' + | ||
2151 | 'filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0)">' + | ||
2152 | '</iframe>' ); | ||
2153 | } | ||
2154 | |||
2155 | html.push( '</div>' ); | ||
2156 | |||
2157 | coverElement = CKEDITOR.dom.element.createFromHtml( html.join( '' ) ); | ||
2158 | coverElement.setOpacity( backgroundCoverOpacity !== undefined ? backgroundCoverOpacity : 0.5 ); | ||
2159 | |||
2160 | coverElement.on( 'keydown', cancelEvent ); | ||
2161 | coverElement.on( 'keypress', cancelEvent ); | ||
2162 | coverElement.on( 'keyup', cancelEvent ); | ||
2163 | |||
2164 | coverElement.appendTo( CKEDITOR.document.getBody() ); | ||
2165 | covers[ coverKey ] = coverElement; | ||
2166 | } else { | ||
2167 | coverElement.show(); | ||
2168 | } | ||
2169 | |||
2170 | // Makes the dialog cover a focus holder as well. | ||
2171 | editor.focusManager.add( coverElement ); | ||
2172 | |||
2173 | currentCover = coverElement; | ||
2174 | var resizeFunc = function() { | ||
2175 | var size = win.getViewPaneSize(); | ||
2176 | coverElement.setStyles( { | ||
2177 | width: size.width + 'px', | ||
2178 | height: size.height + 'px' | ||
2179 | } ); | ||
2180 | }; | ||
2181 | |||
2182 | var scrollFunc = function() { | ||
2183 | var pos = win.getScrollPosition(), | ||
2184 | cursor = CKEDITOR.dialog._.currentTop; | ||
2185 | coverElement.setStyles( { | ||
2186 | left: pos.x + 'px', | ||
2187 | top: pos.y + 'px' | ||
2188 | } ); | ||
2189 | |||
2190 | if ( cursor ) { | ||
2191 | do { | ||
2192 | var dialogPos = cursor.getPosition(); | ||
2193 | cursor.move( dialogPos.x, dialogPos.y ); | ||
2194 | } while ( ( cursor = cursor._.parentDialog ) ); | ||
2195 | } | ||
2196 | }; | ||
2197 | |||
2198 | resizeCover = resizeFunc; | ||
2199 | win.on( 'resize', resizeFunc ); | ||
2200 | resizeFunc(); | ||
2201 | // Using Safari/Mac, focus must be kept where it is (#7027) | ||
2202 | if ( !( CKEDITOR.env.mac && CKEDITOR.env.webkit ) ) | ||
2203 | coverElement.focus(); | ||
2204 | |||
2205 | if ( CKEDITOR.env.ie6Compat ) { | ||
2206 | // IE BUG: win.$.onscroll assignment doesn't work.. it must be window.onscroll. | ||
2207 | // So we need to invent a really funny way to make it work. | ||
2208 | var myScrollHandler = function() { | ||
2209 | scrollFunc(); | ||
2210 | arguments.callee.prevScrollHandler.apply( this, arguments ); | ||
2211 | }; | ||
2212 | win.$.setTimeout( function() { | ||
2213 | myScrollHandler.prevScrollHandler = window.onscroll || | ||
2214 | function() {}; | ||
2215 | window.onscroll = myScrollHandler; | ||
2216 | }, 0 ); | ||
2217 | scrollFunc(); | ||
2218 | } | ||
2219 | } | ||
2220 | |||
2221 | function hideCover( editor ) { | ||
2222 | if ( !currentCover ) | ||
2223 | return; | ||
2224 | |||
2225 | editor.focusManager.remove( currentCover ); | ||
2226 | var win = CKEDITOR.document.getWindow(); | ||
2227 | currentCover.hide(); | ||
2228 | win.removeListener( 'resize', resizeCover ); | ||
2229 | |||
2230 | if ( CKEDITOR.env.ie6Compat ) { | ||
2231 | win.$.setTimeout( function() { | ||
2232 | var prevScrollHandler = window.onscroll && window.onscroll.prevScrollHandler; | ||
2233 | window.onscroll = prevScrollHandler || null; | ||
2234 | }, 0 ); | ||
2235 | } | ||
2236 | resizeCover = null; | ||
2237 | } | ||
2238 | |||
2239 | function removeCovers() { | ||
2240 | for ( var coverId in covers ) | ||
2241 | covers[ coverId ].remove(); | ||
2242 | covers = {}; | ||
2243 | } | ||
2244 | |||
2245 | var accessKeyProcessors = {}; | ||
2246 | |||
2247 | var accessKeyDownHandler = function( evt ) { | ||
2248 | var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey, | ||
2249 | alt = evt.data.$.altKey, | ||
2250 | shift = evt.data.$.shiftKey, | ||
2251 | key = String.fromCharCode( evt.data.$.keyCode ), | ||
2252 | keyProcessor = accessKeyProcessors[ ( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '' ) + ( shift ? 'SHIFT+' : '' ) + key ]; | ||
2253 | |||
2254 | if ( !keyProcessor || !keyProcessor.length ) | ||
2255 | return; | ||
2256 | |||
2257 | keyProcessor = keyProcessor[ keyProcessor.length - 1 ]; | ||
2258 | keyProcessor.keydown && keyProcessor.keydown.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key ); | ||
2259 | evt.data.preventDefault(); | ||
2260 | }; | ||
2261 | |||
2262 | var accessKeyUpHandler = function( evt ) { | ||
2263 | var ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey, | ||
2264 | alt = evt.data.$.altKey, | ||
2265 | shift = evt.data.$.shiftKey, | ||
2266 | key = String.fromCharCode( evt.data.$.keyCode ), | ||
2267 | keyProcessor = accessKeyProcessors[ ( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '' ) + ( shift ? 'SHIFT+' : '' ) + key ]; | ||
2268 | |||
2269 | if ( !keyProcessor || !keyProcessor.length ) | ||
2270 | return; | ||
2271 | |||
2272 | keyProcessor = keyProcessor[ keyProcessor.length - 1 ]; | ||
2273 | if ( keyProcessor.keyup ) { | ||
2274 | keyProcessor.keyup.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key ); | ||
2275 | evt.data.preventDefault(); | ||
2276 | } | ||
2277 | }; | ||
2278 | |||
2279 | var registerAccessKey = function( uiElement, dialog, key, downFunc, upFunc ) { | ||
2280 | var procList = accessKeyProcessors[ key ] || ( accessKeyProcessors[ key ] = [] ); | ||
2281 | procList.push( { | ||
2282 | uiElement: uiElement, | ||
2283 | dialog: dialog, | ||
2284 | key: key, | ||
2285 | keyup: upFunc || uiElement.accessKeyUp, | ||
2286 | keydown: downFunc || uiElement.accessKeyDown | ||
2287 | } ); | ||
2288 | }; | ||
2289 | |||
2290 | var unregisterAccessKey = function( obj ) { | ||
2291 | for ( var i in accessKeyProcessors ) { | ||
2292 | var list = accessKeyProcessors[ i ]; | ||
2293 | for ( var j = list.length - 1; j >= 0; j-- ) { | ||
2294 | if ( list[ j ].dialog == obj || list[ j ].uiElement == obj ) | ||
2295 | list.splice( j, 1 ); | ||
2296 | } | ||
2297 | if ( list.length === 0 ) | ||
2298 | delete accessKeyProcessors[ i ]; | ||
2299 | } | ||
2300 | }; | ||
2301 | |||
2302 | var tabAccessKeyUp = function( dialog, key ) { | ||
2303 | if ( dialog._.accessKeyMap[ key ] ) | ||
2304 | dialog.selectPage( dialog._.accessKeyMap[ key ] ); | ||
2305 | }; | ||
2306 | |||
2307 | var tabAccessKeyDown = function() {}; | ||
2308 | |||
2309 | ( function() { | ||
2310 | CKEDITOR.ui.dialog = { | ||
2311 | /** | ||
2312 | * The base class of all dialog UI elements. | ||
2313 | * | ||
2314 | * @class CKEDITOR.ui.dialog.uiElement | ||
2315 | * @constructor Creates a uiElement class instance. | ||
2316 | * @param {CKEDITOR.dialog} dialog Parent dialog object. | ||
2317 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element | ||
2318 | * definition. | ||
2319 | * | ||
2320 | * Accepted fields: | ||
2321 | * | ||
2322 | * * `id` (Required) The id of the UI element. See {@link CKEDITOR.dialog#getContentElement}. | ||
2323 | * * `type` (Required) The type of the UI element. The | ||
2324 | * value to this field specifies which UI element class will be used to | ||
2325 | * generate the final widget. | ||
2326 | * * `title` (Optional) The popup tooltip for the UI | ||
2327 | * element. | ||
2328 | * * `hidden` (Optional) A flag that tells if the element | ||
2329 | * should be initially visible. | ||
2330 | * * `className` (Optional) Additional CSS class names | ||
2331 | * to add to the UI element. Separated by space. | ||
2332 | * * `style` (Optional) Additional CSS inline styles | ||
2333 | * to add to the UI element. A semicolon (;) is required after the last | ||
2334 | * style declaration. | ||
2335 | * * `accessKey` (Optional) The alphanumeric access key | ||
2336 | * for this element. Access keys are automatically prefixed by CTRL. | ||
2337 | * * `on*` (Optional) Any UI element definition field that | ||
2338 | * starts with `on` followed immediately by a capital letter and | ||
2339 | * probably more letters is an event handler. Event handlers may be further | ||
2340 | * divided into registered event handlers and DOM event handlers. Please | ||
2341 | * refer to {@link CKEDITOR.ui.dialog.uiElement#registerEvents} and | ||
2342 | * {@link CKEDITOR.ui.dialog.uiElement#eventProcessors} for more information. | ||
2343 | * | ||
2344 | * @param {Array} htmlList | ||
2345 | * List of HTML code to be added to the dialog's content area. | ||
2346 | * @param {Function/String} [nodeNameArg='div'] | ||
2347 | * A function returning a string, or a simple string for the node name for | ||
2348 | * the root DOM node. | ||
2349 | * @param {Function/Object} [stylesArg={}] | ||
2350 | * A function returning an object, or a simple object for CSS styles applied | ||
2351 | * to the DOM node. | ||
2352 | * @param {Function/Object} [attributesArg={}] | ||
2353 | * A fucntion returning an object, or a simple object for attributes applied | ||
2354 | * to the DOM node. | ||
2355 | * @param {Function/String} [contentsArg=''] | ||
2356 | * A function returning a string, or a simple string for the HTML code inside | ||
2357 | * the root DOM node. Default is empty string. | ||
2358 | */ | ||
2359 | uiElement: function( dialog, elementDefinition, htmlList, nodeNameArg, stylesArg, attributesArg, contentsArg ) { | ||
2360 | if ( arguments.length < 4 ) | ||
2361 | return; | ||
2362 | |||
2363 | var nodeName = ( nodeNameArg.call ? nodeNameArg( elementDefinition ) : nodeNameArg ) || 'div', | ||
2364 | html = [ '<', nodeName, ' ' ], | ||
2365 | styles = ( stylesArg && stylesArg.call ? stylesArg( elementDefinition ) : stylesArg ) || {}, | ||
2366 | attributes = ( attributesArg && attributesArg.call ? attributesArg( elementDefinition ) : attributesArg ) || {}, | ||
2367 | innerHTML = ( contentsArg && contentsArg.call ? contentsArg.call( this, dialog, elementDefinition ) : contentsArg ) || '', | ||
2368 | domId = this.domId = attributes.id || CKEDITOR.tools.getNextId() + '_uiElement', | ||
2369 | i; | ||
2370 | |||
2371 | if ( elementDefinition.requiredContent && !dialog.getParentEditor().filter.check( elementDefinition.requiredContent ) ) { | ||
2372 | styles.display = 'none'; | ||
2373 | this.notAllowed = true; | ||
2374 | } | ||
2375 | |||
2376 | // Set the id, a unique id is required for getElement() to work. | ||
2377 | attributes.id = domId; | ||
2378 | |||
2379 | // Set the type and definition CSS class names. | ||
2380 | var classes = {}; | ||
2381 | if ( elementDefinition.type ) | ||
2382 | classes[ 'cke_dialog_ui_' + elementDefinition.type ] = 1; | ||
2383 | if ( elementDefinition.className ) | ||
2384 | classes[ elementDefinition.className ] = 1; | ||
2385 | if ( elementDefinition.disabled ) | ||
2386 | classes.cke_disabled = 1; | ||
2387 | |||
2388 | var attributeClasses = ( attributes[ 'class' ] && attributes[ 'class' ].split ) ? attributes[ 'class' ].split( ' ' ) : []; | ||
2389 | for ( i = 0; i < attributeClasses.length; i++ ) { | ||
2390 | if ( attributeClasses[ i ] ) | ||
2391 | classes[ attributeClasses[ i ] ] = 1; | ||
2392 | } | ||
2393 | var finalClasses = []; | ||
2394 | for ( i in classes ) | ||
2395 | finalClasses.push( i ); | ||
2396 | attributes[ 'class' ] = finalClasses.join( ' ' ); | ||
2397 | |||
2398 | // Set the popup tooltop. | ||
2399 | if ( elementDefinition.title ) | ||
2400 | attributes.title = elementDefinition.title; | ||
2401 | |||
2402 | // Write the inline CSS styles. | ||
2403 | var styleStr = ( elementDefinition.style || '' ).split( ';' ); | ||
2404 | |||
2405 | // Element alignment support. | ||
2406 | if ( elementDefinition.align ) { | ||
2407 | var align = elementDefinition.align; | ||
2408 | styles[ 'margin-left' ] = align == 'left' ? 0 : 'auto'; | ||
2409 | styles[ 'margin-right' ] = align == 'right' ? 0 : 'auto'; | ||
2410 | } | ||
2411 | |||
2412 | for ( i in styles ) | ||
2413 | styleStr.push( i + ':' + styles[ i ] ); | ||
2414 | if ( elementDefinition.hidden ) | ||
2415 | styleStr.push( 'display:none' ); | ||
2416 | for ( i = styleStr.length - 1; i >= 0; i-- ) { | ||
2417 | if ( styleStr[ i ] === '' ) | ||
2418 | styleStr.splice( i, 1 ); | ||
2419 | } | ||
2420 | if ( styleStr.length > 0 ) | ||
2421 | attributes.style = ( attributes.style ? ( attributes.style + '; ' ) : '' ) + styleStr.join( '; ' ); | ||
2422 | |||
2423 | // Write the attributes. | ||
2424 | for ( i in attributes ) | ||
2425 | html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[ i ] ) + '" ' ); | ||
2426 | |||
2427 | // Write the content HTML. | ||
2428 | html.push( '>', innerHTML, '</', nodeName, '>' ); | ||
2429 | |||
2430 | // Add contents to the parent HTML array. | ||
2431 | htmlList.push( html.join( '' ) ); | ||
2432 | |||
2433 | ( this._ || ( this._ = {} ) ).dialog = dialog; | ||
2434 | |||
2435 | // Override isChanged if it is defined in element definition. | ||
2436 | if ( typeof elementDefinition.isChanged == 'boolean' ) | ||
2437 | this.isChanged = function() { | ||
2438 | return elementDefinition.isChanged; | ||
2439 | }; | ||
2440 | if ( typeof elementDefinition.isChanged == 'function' ) | ||
2441 | this.isChanged = elementDefinition.isChanged; | ||
2442 | |||
2443 | // Overload 'get(set)Value' on definition. | ||
2444 | if ( typeof elementDefinition.setValue == 'function' ) { | ||
2445 | this.setValue = CKEDITOR.tools.override( this.setValue, function( org ) { | ||
2446 | return function( val ) { | ||
2447 | org.call( this, elementDefinition.setValue.call( this, val ) ); | ||
2448 | }; | ||
2449 | } ); | ||
2450 | } | ||
2451 | |||
2452 | if ( typeof elementDefinition.getValue == 'function' ) { | ||
2453 | this.getValue = CKEDITOR.tools.override( this.getValue, function( org ) { | ||
2454 | return function() { | ||
2455 | return elementDefinition.getValue.call( this, org.call( this ) ); | ||
2456 | }; | ||
2457 | } ); | ||
2458 | } | ||
2459 | |||
2460 | // Add events. | ||
2461 | CKEDITOR.event.implementOn( this ); | ||
2462 | |||
2463 | this.registerEvents( elementDefinition ); | ||
2464 | if ( this.accessKeyUp && this.accessKeyDown && elementDefinition.accessKey ) | ||
2465 | registerAccessKey( this, dialog, 'CTRL+' + elementDefinition.accessKey ); | ||
2466 | |||
2467 | var me = this; | ||
2468 | dialog.on( 'load', function() { | ||
2469 | var input = me.getInputElement(); | ||
2470 | if ( input ) { | ||
2471 | var focusClass = me.type in { 'checkbox': 1, 'ratio': 1 } && CKEDITOR.env.ie && CKEDITOR.env.version < 8 ? 'cke_dialog_ui_focused' : ''; | ||
2472 | input.on( 'focus', function() { | ||
2473 | dialog._.tabBarMode = false; | ||
2474 | dialog._.hasFocus = true; | ||
2475 | me.fire( 'focus' ); | ||
2476 | focusClass && this.addClass( focusClass ); | ||
2477 | |||
2478 | } ); | ||
2479 | |||
2480 | input.on( 'blur', function() { | ||
2481 | me.fire( 'blur' ); | ||
2482 | focusClass && this.removeClass( focusClass ); | ||
2483 | } ); | ||
2484 | } | ||
2485 | } ); | ||
2486 | |||
2487 | // Completes this object with everything we have in the | ||
2488 | // definition. | ||
2489 | CKEDITOR.tools.extend( this, elementDefinition ); | ||
2490 | |||
2491 | // Register the object as a tab focus if it can be included. | ||
2492 | if ( this.keyboardFocusable ) { | ||
2493 | this.tabIndex = elementDefinition.tabIndex || 0; | ||
2494 | |||
2495 | this.focusIndex = dialog._.focusList.push( this ) - 1; | ||
2496 | this.on( 'focus', function() { | ||
2497 | dialog._.currentFocusIndex = me.focusIndex; | ||
2498 | } ); | ||
2499 | } | ||
2500 | }, | ||
2501 | |||
2502 | /** | ||
2503 | * Horizontal layout box for dialog UI elements, auto-expends to available width of container. | ||
2504 | * | ||
2505 | * @class CKEDITOR.ui.dialog.hbox | ||
2506 | * @extends CKEDITOR.ui.dialog.uiElement | ||
2507 | * @constructor Creates a hbox class instance. | ||
2508 | * @param {CKEDITOR.dialog} dialog Parent dialog object. | ||
2509 | * @param {Array} childObjList | ||
2510 | * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. | ||
2511 | * @param {Array} childHtmlList | ||
2512 | * Array of HTML code that correspond to the HTML output of all the | ||
2513 | * objects in childObjList. | ||
2514 | * @param {Array} htmlList | ||
2515 | * Array of HTML code that this element will output to. | ||
2516 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
2517 | * The element definition. Accepted fields: | ||
2518 | * | ||
2519 | * * `widths` (Optional) The widths of child cells. | ||
2520 | * * `height` (Optional) The height of the layout. | ||
2521 | * * `padding` (Optional) The padding width inside child cells. | ||
2522 | * * `align` (Optional) The alignment of the whole layout. | ||
2523 | */ | ||
2524 | hbox: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { | ||
2525 | if ( arguments.length < 4 ) | ||
2526 | return; | ||
2527 | |||
2528 | this._ || ( this._ = {} ); | ||
2529 | |||
2530 | var children = this._.children = childObjList, | ||
2531 | widths = elementDefinition && elementDefinition.widths || null, | ||
2532 | height = elementDefinition && elementDefinition.height || null, | ||
2533 | styles = {}, | ||
2534 | i; | ||
2535 | /** @ignore */ | ||
2536 | var innerHTML = function() { | ||
2537 | var html = [ '<tbody><tr class="cke_dialog_ui_hbox">' ]; | ||
2538 | for ( i = 0; i < childHtmlList.length; i++ ) { | ||
2539 | var className = 'cke_dialog_ui_hbox_child', | ||
2540 | styles = []; | ||
2541 | if ( i === 0 ) { | ||
2542 | className = 'cke_dialog_ui_hbox_first'; | ||
2543 | } | ||
2544 | if ( i == childHtmlList.length - 1 ) { | ||
2545 | className = 'cke_dialog_ui_hbox_last'; | ||
2546 | } | ||
2547 | |||
2548 | html.push( '<td class="', className, '" role="presentation" ' ); | ||
2549 | if ( widths ) { | ||
2550 | if ( widths[ i ] ) { | ||
2551 | styles.push( 'width:' + cssLength( widths[i] ) ); | ||
2552 | } | ||
2553 | } else { | ||
2554 | styles.push( 'width:' + Math.floor( 100 / childHtmlList.length ) + '%' ); | ||
2555 | } | ||
2556 | if ( height ) { | ||
2557 | styles.push( 'height:' + cssLength( height ) ); | ||
2558 | } | ||
2559 | if ( elementDefinition && elementDefinition.padding !== undefined ) { | ||
2560 | styles.push( 'padding:' + cssLength( elementDefinition.padding ) ); | ||
2561 | } | ||
2562 | // In IE Quirks alignment has to be done on table cells. (#7324) | ||
2563 | if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && children[ i ].align ) { | ||
2564 | styles.push( 'text-align:' + children[ i ].align ); | ||
2565 | } | ||
2566 | if ( styles.length > 0 ) { | ||
2567 | html.push( 'style="' + styles.join( '; ' ) + '" ' ); | ||
2568 | } | ||
2569 | html.push( '>', childHtmlList[ i ], '</td>' ); | ||
2570 | } | ||
2571 | html.push( '</tr></tbody>' ); | ||
2572 | return html.join( '' ); | ||
2573 | }; | ||
2574 | |||
2575 | var attribs = { role: 'presentation' }; | ||
2576 | elementDefinition && elementDefinition.align && ( attribs.align = elementDefinition.align ); | ||
2577 | |||
2578 | CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type: 'hbox' }, htmlList, 'table', styles, attribs, innerHTML ); | ||
2579 | }, | ||
2580 | |||
2581 | /** | ||
2582 | * Vertical layout box for dialog UI elements. | ||
2583 | * | ||
2584 | * @class CKEDITOR.ui.dialog.vbox | ||
2585 | * @extends CKEDITOR.ui.dialog.hbox | ||
2586 | * @constructor Creates a vbox class instance. | ||
2587 | * @param {CKEDITOR.dialog} dialog Parent dialog object. | ||
2588 | * @param {Array} childObjList | ||
2589 | * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. | ||
2590 | * @param {Array} childHtmlList | ||
2591 | * Array of HTML code that correspond to the HTML output of all the | ||
2592 | * objects in childObjList. | ||
2593 | * @param {Array} htmlList Array of HTML code that this element will output to. | ||
2594 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
2595 | * The element definition. Accepted fields: | ||
2596 | * | ||
2597 | * * `width` (Optional) The width of the layout. | ||
2598 | * * `heights` (Optional) The heights of individual cells. | ||
2599 | * * `align` (Optional) The alignment of the layout. | ||
2600 | * * `padding` (Optional) The padding width inside child cells. | ||
2601 | * * `expand` (Optional) Whether the layout should expand | ||
2602 | * vertically to fill its container. | ||
2603 | */ | ||
2604 | vbox: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { | ||
2605 | if ( arguments.length < 3 ) | ||
2606 | return; | ||
2607 | |||
2608 | this._ || ( this._ = {} ); | ||
2609 | |||
2610 | var children = this._.children = childObjList, | ||
2611 | width = elementDefinition && elementDefinition.width || null, | ||
2612 | heights = elementDefinition && elementDefinition.heights || null; | ||
2613 | /** @ignore */ | ||
2614 | var innerHTML = function() { | ||
2615 | var html = [ '<table role="presentation" cellspacing="0" border="0" ' ]; | ||
2616 | html.push( 'style="' ); | ||
2617 | if ( elementDefinition && elementDefinition.expand ) | ||
2618 | html.push( 'height:100%;' ); | ||
2619 | html.push( 'width:' + cssLength( width || '100%' ), ';' ); | ||
2620 | |||
2621 | // (#10123) Temp fix for dialog broken layout in latest webkit. | ||
2622 | if ( CKEDITOR.env.webkit ) | ||
2623 | html.push( 'float:none;' ); | ||
2624 | |||
2625 | html.push( '"' ); | ||
2626 | html.push( 'align="', CKEDITOR.tools.htmlEncode( | ||
2627 | ( elementDefinition && elementDefinition.align ) || ( dialog.getParentEditor().lang.dir == 'ltr' ? 'left' : 'right' ) ), '" ' ); | ||
2628 | |||
2629 | html.push( '><tbody>' ); | ||
2630 | for ( var i = 0; i < childHtmlList.length; i++ ) { | ||
2631 | var styles = []; | ||
2632 | html.push( '<tr><td role="presentation" ' ); | ||
2633 | if ( width ) | ||
2634 | styles.push( 'width:' + cssLength( width || '100%' ) ); | ||
2635 | if ( heights ) | ||
2636 | styles.push( 'height:' + cssLength( heights[ i ] ) ); | ||
2637 | else if ( elementDefinition && elementDefinition.expand ) | ||
2638 | styles.push( 'height:' + Math.floor( 100 / childHtmlList.length ) + '%' ); | ||
2639 | if ( elementDefinition && elementDefinition.padding !== undefined ) | ||
2640 | styles.push( 'padding:' + cssLength( elementDefinition.padding ) ); | ||
2641 | // In IE Quirks alignment has to be done on table cells. (#7324) | ||
2642 | if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && children[ i ].align ) | ||
2643 | styles.push( 'text-align:' + children[ i ].align ); | ||
2644 | if ( styles.length > 0 ) | ||
2645 | html.push( 'style="', styles.join( '; ' ), '" ' ); | ||
2646 | html.push( ' class="cke_dialog_ui_vbox_child">', childHtmlList[ i ], '</td></tr>' ); | ||
2647 | } | ||
2648 | html.push( '</tbody></table>' ); | ||
2649 | return html.join( '' ); | ||
2650 | }; | ||
2651 | CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type: 'vbox' }, htmlList, 'div', null, { role: 'presentation' }, innerHTML ); | ||
2652 | } | ||
2653 | }; | ||
2654 | } )(); | ||
2655 | |||
2656 | /** @class CKEDITOR.ui.dialog.uiElement */ | ||
2657 | CKEDITOR.ui.dialog.uiElement.prototype = { | ||
2658 | /** | ||
2659 | * Gets the root DOM element of this dialog UI object. | ||
2660 | * | ||
2661 | * uiElement.getElement().hide(); | ||
2662 | * | ||
2663 | * @returns {CKEDITOR.dom.element} Root DOM element of UI object. | ||
2664 | */ | ||
2665 | getElement: function() { | ||
2666 | return CKEDITOR.document.getById( this.domId ); | ||
2667 | }, | ||
2668 | |||
2669 | /** | ||
2670 | * Gets the DOM element that the user inputs values. | ||
2671 | * | ||
2672 | * This function is used by {@link #setValue}, {@link #getValue} and {@link #focus}. It should | ||
2673 | * be overrided in child classes where the input element isn't the root | ||
2674 | * element. | ||
2675 | * | ||
2676 | * var rawValue = textInput.getInputElement().$.value; | ||
2677 | * | ||
2678 | * @returns {CKEDITOR.dom.element} The element where the user input values. | ||
2679 | */ | ||
2680 | getInputElement: function() { | ||
2681 | return this.getElement(); | ||
2682 | }, | ||
2683 | |||
2684 | /** | ||
2685 | * Gets the parent dialog object containing this UI element. | ||
2686 | * | ||
2687 | * var dialog = uiElement.getDialog(); | ||
2688 | * | ||
2689 | * @returns {CKEDITOR.dialog} Parent dialog object. | ||
2690 | */ | ||
2691 | getDialog: function() { | ||
2692 | return this._.dialog; | ||
2693 | }, | ||
2694 | |||
2695 | /** | ||
2696 | * Sets the value of this dialog UI object. | ||
2697 | * | ||
2698 | * uiElement.setValue( 'Dingo' ); | ||
2699 | * | ||
2700 | * @chainable | ||
2701 | * @param {Object} value The new value. | ||
2702 | * @param {Boolean} noChangeEvent Internal commit, to supress `change` event on this element. | ||
2703 | */ | ||
2704 | setValue: function( value, noChangeEvent ) { | ||
2705 | this.getInputElement().setValue( value ); | ||
2706 | !noChangeEvent && this.fire( 'change', { value: value } ); | ||
2707 | return this; | ||
2708 | }, | ||
2709 | |||
2710 | /** | ||
2711 | * Gets the current value of this dialog UI object. | ||
2712 | * | ||
2713 | * var myValue = uiElement.getValue(); | ||
2714 | * | ||
2715 | * @returns {Object} The current value. | ||
2716 | */ | ||
2717 | getValue: function() { | ||
2718 | return this.getInputElement().getValue(); | ||
2719 | }, | ||
2720 | |||
2721 | /** | ||
2722 | * Tells whether the UI object's value has changed. | ||
2723 | * | ||
2724 | * if ( uiElement.isChanged() ) | ||
2725 | * confirm( 'Value changed! Continue?' ); | ||
2726 | * | ||
2727 | * @returns {Boolean} `true` if changed, `false` if not changed. | ||
2728 | */ | ||
2729 | isChanged: function() { | ||
2730 | // Override in input classes. | ||
2731 | return false; | ||
2732 | }, | ||
2733 | |||
2734 | /** | ||
2735 | * Selects the parent tab of this element. Usually called by focus() or overridden focus() methods. | ||
2736 | * | ||
2737 | * focus : function() { | ||
2738 | * this.selectParentTab(); | ||
2739 | * // do something else. | ||
2740 | * } | ||
2741 | * | ||
2742 | * @chainable | ||
2743 | */ | ||
2744 | selectParentTab: function() { | ||
2745 | var element = this.getInputElement(), | ||
2746 | cursor = element, | ||
2747 | tabId; | ||
2748 | while ( ( cursor = cursor.getParent() ) && cursor.$.className.search( 'cke_dialog_page_contents' ) == -1 ) { | ||
2749 | |||
2750 | } | ||
2751 | |||
2752 | // Some widgets don't have parent tabs (e.g. OK and Cancel buttons). | ||
2753 | if ( !cursor ) | ||
2754 | return this; | ||
2755 | |||
2756 | tabId = cursor.getAttribute( 'name' ); | ||
2757 | // Avoid duplicate select. | ||
2758 | if ( this._.dialog._.currentTabId != tabId ) | ||
2759 | this._.dialog.selectPage( tabId ); | ||
2760 | return this; | ||
2761 | }, | ||
2762 | |||
2763 | /** | ||
2764 | * Puts the focus to the UI object. Switches tabs if the UI object isn't in the active tab page. | ||
2765 | * | ||
2766 | * uiElement.focus(); | ||
2767 | * | ||
2768 | * @chainable | ||
2769 | */ | ||
2770 | focus: function() { | ||
2771 | this.selectParentTab().getInputElement().focus(); | ||
2772 | return this; | ||
2773 | }, | ||
2774 | |||
2775 | /** | ||
2776 | * Registers the `on*` event handlers defined in the element definition. | ||
2777 | * | ||
2778 | * The default behavior of this function is: | ||
2779 | * | ||
2780 | * 1. If the on* event is defined in the class's eventProcesors list, | ||
2781 | * then the registration is delegated to the corresponding function | ||
2782 | * in the eventProcessors list. | ||
2783 | * 2. If the on* event is not defined in the eventProcessors list, then | ||
2784 | * register the event handler under the corresponding DOM event of | ||
2785 | * the UI element's input DOM element (as defined by the return value | ||
2786 | * of {@link #getInputElement}). | ||
2787 | * | ||
2788 | * This function is only called at UI element instantiation, but can | ||
2789 | * be overridded in child classes if they require more flexibility. | ||
2790 | * | ||
2791 | * @chainable | ||
2792 | * @param {CKEDITOR.dialog.definition.uiElement} definition The UI element | ||
2793 | * definition. | ||
2794 | */ | ||
2795 | registerEvents: function( definition ) { | ||
2796 | var regex = /^on([A-Z]\w+)/, | ||
2797 | match; | ||
2798 | |||
2799 | var registerDomEvent = function( uiElement, dialog, eventName, func ) { | ||
2800 | dialog.on( 'load', function() { | ||
2801 | uiElement.getInputElement().on( eventName, func, uiElement ); | ||
2802 | } ); | ||
2803 | }; | ||
2804 | |||
2805 | for ( var i in definition ) { | ||
2806 | if ( !( match = i.match( regex ) ) ) | ||
2807 | continue; | ||
2808 | if ( this.eventProcessors[ i ] ) | ||
2809 | this.eventProcessors[ i ].call( this, this._.dialog, definition[ i ] ); | ||
2810 | else | ||
2811 | registerDomEvent( this, this._.dialog, match[ 1 ].toLowerCase(), definition[ i ] ); | ||
2812 | } | ||
2813 | |||
2814 | return this; | ||
2815 | }, | ||
2816 | |||
2817 | /** | ||
2818 | * The event processor list used by | ||
2819 | * {@link CKEDITOR.ui.dialog.uiElement#getInputElement} at UI element | ||
2820 | * instantiation. The default list defines three `on*` events: | ||
2821 | * | ||
2822 | * 1. `onLoad` - Called when the element's parent dialog opens for the | ||
2823 | * first time. | ||
2824 | * 2. `onShow` - Called whenever the element's parent dialog opens. | ||
2825 | * 3. `onHide` - Called whenever the element's parent dialog closes. | ||
2826 | * | ||
2827 | * // This connects the 'click' event in CKEDITOR.ui.dialog.button to onClick | ||
2828 | * // handlers in the UI element's definitions. | ||
2829 | * CKEDITOR.ui.dialog.button.eventProcessors = CKEDITOR.tools.extend( {}, | ||
2830 | * CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, | ||
2831 | * { onClick : function( dialog, func ) { this.on( 'click', func ); } }, | ||
2832 | * true | ||
2833 | * ); | ||
2834 | * | ||
2835 | * @property {Object} | ||
2836 | */ | ||
2837 | eventProcessors: { | ||
2838 | onLoad: function( dialog, func ) { | ||
2839 | dialog.on( 'load', func, this ); | ||
2840 | }, | ||
2841 | |||
2842 | onShow: function( dialog, func ) { | ||
2843 | dialog.on( 'show', func, this ); | ||
2844 | }, | ||
2845 | |||
2846 | onHide: function( dialog, func ) { | ||
2847 | dialog.on( 'hide', func, this ); | ||
2848 | } | ||
2849 | }, | ||
2850 | |||
2851 | /** | ||
2852 | * The default handler for a UI element's access key down event, which | ||
2853 | * tries to put focus to the UI element. | ||
2854 | * | ||
2855 | * Can be overridded in child classes for more sophisticaed behavior. | ||
2856 | * | ||
2857 | * @param {CKEDITOR.dialog} dialog The parent dialog object. | ||
2858 | * @param {String} key The key combination pressed. Since access keys | ||
2859 | * are defined to always include the `CTRL` key, its value should always | ||
2860 | * include a `'CTRL+'` prefix. | ||
2861 | */ | ||
2862 | accessKeyDown: function() { | ||
2863 | this.focus(); | ||
2864 | }, | ||
2865 | |||
2866 | /** | ||
2867 | * The default handler for a UI element's access key up event, which | ||
2868 | * does nothing. | ||
2869 | * | ||
2870 | * Can be overridded in child classes for more sophisticated behavior. | ||
2871 | * | ||
2872 | * @param {CKEDITOR.dialog} dialog The parent dialog object. | ||
2873 | * @param {String} key The key combination pressed. Since access keys | ||
2874 | * are defined to always include the `CTRL` key, its value should always | ||
2875 | * include a `'CTRL+'` prefix. | ||
2876 | */ | ||
2877 | accessKeyUp: function() {}, | ||
2878 | |||
2879 | /** | ||
2880 | * Disables a UI element. | ||
2881 | */ | ||
2882 | disable: function() { | ||
2883 | var element = this.getElement(), | ||
2884 | input = this.getInputElement(); | ||
2885 | input.setAttribute( 'disabled', 'true' ); | ||
2886 | element.addClass( 'cke_disabled' ); | ||
2887 | }, | ||
2888 | |||
2889 | /** | ||
2890 | * Enables a UI element. | ||
2891 | */ | ||
2892 | enable: function() { | ||
2893 | var element = this.getElement(), | ||
2894 | input = this.getInputElement(); | ||
2895 | input.removeAttribute( 'disabled' ); | ||
2896 | element.removeClass( 'cke_disabled' ); | ||
2897 | }, | ||
2898 | |||
2899 | /** | ||
2900 | * Determines whether an UI element is enabled or not. | ||
2901 | * | ||
2902 | * @returns {Boolean} Whether the UI element is enabled. | ||
2903 | */ | ||
2904 | isEnabled: function() { | ||
2905 | return !this.getElement().hasClass( 'cke_disabled' ); | ||
2906 | }, | ||
2907 | |||
2908 | /** | ||
2909 | * Determines whether an UI element is visible or not. | ||
2910 | * | ||
2911 | * @returns {Boolean} Whether the UI element is visible. | ||
2912 | */ | ||
2913 | isVisible: function() { | ||
2914 | return this.getInputElement().isVisible(); | ||
2915 | }, | ||
2916 | |||
2917 | /** | ||
2918 | * Determines whether an UI element is focus-able or not. | ||
2919 | * Focus-able is defined as being both visible and enabled. | ||
2920 | * | ||
2921 | * @returns {Boolean} Whether the UI element can be focused. | ||
2922 | */ | ||
2923 | isFocusable: function() { | ||
2924 | if ( !this.isEnabled() || !this.isVisible() ) | ||
2925 | return false; | ||
2926 | return true; | ||
2927 | } | ||
2928 | }; | ||
2929 | |||
2930 | /** @class CKEDITOR.ui.dialog.hbox */ | ||
2931 | CKEDITOR.ui.dialog.hbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), { | ||
2932 | /** | ||
2933 | * Gets a child UI element inside this container. | ||
2934 | * | ||
2935 | * var checkbox = hbox.getChild( [0,1] ); | ||
2936 | * checkbox.setValue( true ); | ||
2937 | * | ||
2938 | * @param {Array/Number} indices An array or a single number to indicate the child's | ||
2939 | * position in the container's descendant tree. Omit to get all the children in an array. | ||
2940 | * @returns {Array/CKEDITOR.ui.dialog.uiElement} Array of all UI elements in the container | ||
2941 | * if no argument given, or the specified UI element if indices is given. | ||
2942 | */ | ||
2943 | getChild: function( indices ) { | ||
2944 | // If no arguments, return a clone of the children array. | ||
2945 | if ( arguments.length < 1 ) | ||
2946 | return this._.children.concat(); | ||
2947 | |||
2948 | // If indices isn't array, make it one. | ||
2949 | if ( !indices.splice ) | ||
2950 | indices = [ indices ]; | ||
2951 | |||
2952 | // Retrieve the child element according to tree position. | ||
2953 | if ( indices.length < 2 ) | ||
2954 | return this._.children[ indices[ 0 ] ]; | ||
2955 | else | ||
2956 | return ( this._.children[ indices[ 0 ] ] && this._.children[ indices[ 0 ] ].getChild ) ? this._.children[ indices[ 0 ] ].getChild( indices.slice( 1, indices.length ) ) : null; | ||
2957 | } | ||
2958 | }, true ); | ||
2959 | |||
2960 | CKEDITOR.ui.dialog.vbox.prototype = new CKEDITOR.ui.dialog.hbox(); | ||
2961 | |||
2962 | ( function() { | ||
2963 | var commonBuilder = { | ||
2964 | build: function( dialog, elementDefinition, output ) { | ||
2965 | var children = elementDefinition.children, | ||
2966 | child, | ||
2967 | childHtmlList = [], | ||
2968 | childObjList = []; | ||
2969 | for ( var i = 0; | ||
2970 | ( i < children.length && ( child = children[ i ] ) ); i++ ) { | ||
2971 | var childHtml = []; | ||
2972 | childHtmlList.push( childHtml ); | ||
2973 | childObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) ); | ||
2974 | } | ||
2975 | return new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, childObjList, childHtmlList, output, elementDefinition ); | ||
2976 | } | ||
2977 | }; | ||
2978 | |||
2979 | CKEDITOR.dialog.addUIElement( 'hbox', commonBuilder ); | ||
2980 | CKEDITOR.dialog.addUIElement( 'vbox', commonBuilder ); | ||
2981 | } )(); | ||
2982 | |||
2983 | /** | ||
2984 | * Generic dialog command. It opens a specific dialog when executed. | ||
2985 | * | ||
2986 | * // Register the "link" command, which opens the "link" dialog. | ||
2987 | * editor.addCommand( 'link', new CKEDITOR.dialogCommand( 'link' ) ); | ||
2988 | * | ||
2989 | * @class | ||
2990 | * @constructor Creates a dialogCommand class instance. | ||
2991 | * @extends CKEDITOR.commandDefinition | ||
2992 | * @param {String} dialogName The name of the dialog to open when executing | ||
2993 | * this command. | ||
2994 | * @param {Object} [ext] Additional command definition's properties. | ||
2995 | */ | ||
2996 | CKEDITOR.dialogCommand = function( dialogName, ext ) { | ||
2997 | this.dialogName = dialogName; | ||
2998 | CKEDITOR.tools.extend( this, ext, true ); | ||
2999 | }; | ||
3000 | |||
3001 | CKEDITOR.dialogCommand.prototype = { | ||
3002 | exec: function( editor ) { | ||
3003 | editor.openDialog( this.dialogName ); | ||
3004 | }, | ||
3005 | |||
3006 | // Dialog commands just open a dialog ui, thus require no undo logic, | ||
3007 | // undo support should dedicate to specific dialog implementation. | ||
3008 | canUndo: false, | ||
3009 | |||
3010 | editorFocus: 1 | ||
3011 | }; | ||
3012 | |||
3013 | ( function() { | ||
3014 | var notEmptyRegex = /^([a]|[^a])+$/, | ||
3015 | integerRegex = /^\d*$/, | ||
3016 | numberRegex = /^\d*(?:\.\d+)?$/, | ||
3017 | htmlLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/, | ||
3018 | cssLengthRegex = /^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i, | ||
3019 | inlineStyleRegex = /^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/; | ||
3020 | |||
3021 | CKEDITOR.VALIDATE_OR = 1; | ||
3022 | CKEDITOR.VALIDATE_AND = 2; | ||
3023 | |||
3024 | CKEDITOR.dialog.validate = { | ||
3025 | functions: function() { | ||
3026 | var args = arguments; | ||
3027 | return function() { | ||
3028 | /** | ||
3029 | * It's important for validate functions to be able to accept the value | ||
3030 | * as argument in addition to this.getValue(), so that it is possible to | ||
3031 | * combine validate functions together to make more sophisticated | ||
3032 | * validators. | ||
3033 | */ | ||
3034 | var value = this && this.getValue ? this.getValue() : args[ 0 ]; | ||
3035 | |||
3036 | var msg, | ||
3037 | relation = CKEDITOR.VALIDATE_AND, | ||
3038 | functions = [], | ||
3039 | i; | ||
3040 | |||
3041 | for ( i = 0; i < args.length; i++ ) { | ||
3042 | if ( typeof args[ i ] == 'function' ) | ||
3043 | functions.push( args[ i ] ); | ||
3044 | else | ||
3045 | break; | ||
3046 | } | ||
3047 | |||
3048 | if ( i < args.length && typeof args[ i ] == 'string' ) { | ||
3049 | msg = args[ i ]; | ||
3050 | i++; | ||
3051 | } | ||
3052 | |||
3053 | if ( i < args.length && typeof args[ i ] == 'number' ) | ||
3054 | relation = args[ i ]; | ||
3055 | |||
3056 | var passed = ( relation == CKEDITOR.VALIDATE_AND ? true : false ); | ||
3057 | for ( i = 0; i < functions.length; i++ ) { | ||
3058 | if ( relation == CKEDITOR.VALIDATE_AND ) | ||
3059 | passed = passed && functions[ i ]( value ); | ||
3060 | else | ||
3061 | passed = passed || functions[ i ]( value ); | ||
3062 | } | ||
3063 | |||
3064 | return !passed ? msg : true; | ||
3065 | }; | ||
3066 | }, | ||
3067 | |||
3068 | regex: function( regex, msg ) { | ||
3069 | /* | ||
3070 | * Can be greatly shortened by deriving from functions validator if code size | ||
3071 | * turns out to be more important than performance. | ||
3072 | */ | ||
3073 | return function() { | ||
3074 | var value = this && this.getValue ? this.getValue() : arguments[ 0 ]; | ||
3075 | return !regex.test( value ) ? msg : true; | ||
3076 | }; | ||
3077 | }, | ||
3078 | |||
3079 | notEmpty: function( msg ) { | ||
3080 | return this.regex( notEmptyRegex, msg ); | ||
3081 | }, | ||
3082 | |||
3083 | integer: function( msg ) { | ||
3084 | return this.regex( integerRegex, msg ); | ||
3085 | }, | ||
3086 | |||
3087 | 'number': function( msg ) { | ||
3088 | return this.regex( numberRegex, msg ); | ||
3089 | }, | ||
3090 | |||
3091 | 'cssLength': function( msg ) { | ||
3092 | return this.functions( function( val ) { | ||
3093 | return cssLengthRegex.test( CKEDITOR.tools.trim( val ) ); | ||
3094 | }, msg ); | ||
3095 | }, | ||
3096 | |||
3097 | 'htmlLength': function( msg ) { | ||
3098 | return this.functions( function( val ) { | ||
3099 | return htmlLengthRegex.test( CKEDITOR.tools.trim( val ) ); | ||
3100 | }, msg ); | ||
3101 | }, | ||
3102 | |||
3103 | 'inlineStyle': function( msg ) { | ||
3104 | return this.functions( function( val ) { | ||
3105 | return inlineStyleRegex.test( CKEDITOR.tools.trim( val ) ); | ||
3106 | }, msg ); | ||
3107 | }, | ||
3108 | |||
3109 | equals: function( value, msg ) { | ||
3110 | return this.functions( function( val ) { | ||
3111 | return val == value; | ||
3112 | }, msg ); | ||
3113 | }, | ||
3114 | |||
3115 | notEqual: function( value, msg ) { | ||
3116 | return this.functions( function( val ) { | ||
3117 | return val != value; | ||
3118 | }, msg ); | ||
3119 | } | ||
3120 | }; | ||
3121 | |||
3122 | CKEDITOR.on( 'instanceDestroyed', function( evt ) { | ||
3123 | // Remove dialog cover on last instance destroy. | ||
3124 | if ( CKEDITOR.tools.isEmpty( CKEDITOR.instances ) ) { | ||
3125 | var currentTopDialog; | ||
3126 | while ( ( currentTopDialog = CKEDITOR.dialog._.currentTop ) ) | ||
3127 | currentTopDialog.hide(); | ||
3128 | removeCovers(); | ||
3129 | } | ||
3130 | |||
3131 | var dialogs = evt.editor._.storedDialogs; | ||
3132 | for ( var name in dialogs ) | ||
3133 | dialogs[ name ].destroy(); | ||
3134 | |||
3135 | } ); | ||
3136 | |||
3137 | } )(); | ||
3138 | |||
3139 | // Extend the CKEDITOR.editor class with dialog specific functions. | ||
3140 | CKEDITOR.tools.extend( CKEDITOR.editor.prototype, { | ||
3141 | /** | ||
3142 | * Loads and opens a registered dialog. | ||
3143 | * | ||
3144 | * CKEDITOR.instances.editor1.openDialog( 'smiley' ); | ||
3145 | * | ||
3146 | * @member CKEDITOR.editor | ||
3147 | * @param {String} dialogName The registered name of the dialog. | ||
3148 | * @param {Function} callback The function to be invoked after dialog instance created. | ||
3149 | * @returns {CKEDITOR.dialog} The dialog object corresponding to the dialog displayed. | ||
3150 | * `null` if the dialog name is not registered. | ||
3151 | * @see CKEDITOR.dialog#add | ||
3152 | */ | ||
3153 | openDialog: function( dialogName, callback ) { | ||
3154 | var dialog = null, dialogDefinitions = CKEDITOR.dialog._.dialogDefinitions[ dialogName ]; | ||
3155 | |||
3156 | if ( CKEDITOR.dialog._.currentTop === null ) | ||
3157 | showCover( this ); | ||
3158 | |||
3159 | // If the dialogDefinition is already loaded, open it immediately. | ||
3160 | if ( typeof dialogDefinitions == 'function' ) { | ||
3161 | var storedDialogs = this._.storedDialogs || ( this._.storedDialogs = {} ); | ||
3162 | |||
3163 | dialog = storedDialogs[ dialogName ] || ( storedDialogs[ dialogName ] = new CKEDITOR.dialog( this, dialogName ) ); | ||
3164 | |||
3165 | callback && callback.call( dialog, dialog ); | ||
3166 | dialog.show(); | ||
3167 | |||
3168 | } else if ( dialogDefinitions == 'failed' ) { | ||
3169 | hideCover( this ); | ||
3170 | throw new Error( '[CKEDITOR.dialog.openDialog] Dialog "' + dialogName + '" failed when loading definition.' ); | ||
3171 | } else if ( typeof dialogDefinitions == 'string' ) { | ||
3172 | |||
3173 | CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( dialogDefinitions ), | ||
3174 | function() { | ||
3175 | var dialogDefinition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ]; | ||
3176 | // In case of plugin error, mark it as loading failed. | ||
3177 | if ( typeof dialogDefinition != 'function' ) | ||
3178 | CKEDITOR.dialog._.dialogDefinitions[ dialogName ] = 'failed'; | ||
3179 | |||
3180 | this.openDialog( dialogName, callback ); | ||
3181 | }, this, 0, 1 ); | ||
3182 | } | ||
3183 | |||
3184 | CKEDITOR.skin.loadPart( 'dialog' ); | ||
3185 | |||
3186 | return dialog; | ||
3187 | } | ||
3188 | } ); | ||
3189 | } )(); | ||
3190 | |||
3191 | CKEDITOR.plugins.add( 'dialog', { | ||
3192 | requires: 'dialogui', | ||
3193 | init: function( editor ) { | ||
3194 | editor.on( 'doubleclick', function( evt ) { | ||
3195 | if ( evt.data.dialog ) | ||
3196 | editor.openDialog( evt.data.dialog ); | ||
3197 | }, null, null, 999 ); | ||
3198 | } | ||
3199 | } ); | ||
3200 | |||
3201 | // Dialog related configurations. | ||
3202 | |||
3203 | /** | ||
3204 | * The color of the dialog background cover. It should be a valid CSS color string. | ||
3205 | * | ||
3206 | * config.dialog_backgroundCoverColor = 'rgb(255, 254, 253)'; | ||
3207 | * | ||
3208 | * @cfg {String} [dialog_backgroundCoverColor='white'] | ||
3209 | * @member CKEDITOR.config | ||
3210 | */ | ||
3211 | |||
3212 | /** | ||
3213 | * The opacity of the dialog background cover. It should be a number within the | ||
3214 | * range `[0.0, 1.0]`. | ||
3215 | * | ||
3216 | * config.dialog_backgroundCoverOpacity = 0.7; | ||
3217 | * | ||
3218 | * @cfg {Number} [dialog_backgroundCoverOpacity=0.5] | ||
3219 | * @member CKEDITOR.config | ||
3220 | */ | ||
3221 | |||
3222 | /** | ||
3223 | * If the dialog has more than one tab, put focus into the first tab as soon as dialog is opened. | ||
3224 | * | ||
3225 | * config.dialog_startupFocusTab = true; | ||
3226 | * | ||
3227 | * @cfg {Boolean} [dialog_startupFocusTab=false] | ||
3228 | * @member CKEDITOR.config | ||
3229 | */ | ||
3230 | |||
3231 | /** | ||
3232 | * The distance of magnetic borders used in moving and resizing dialogs, | ||
3233 | * measured in pixels. | ||
3234 | * | ||
3235 | * config.dialog_magnetDistance = 30; | ||
3236 | * | ||
3237 | * @cfg {Number} [dialog_magnetDistance=20] | ||
3238 | * @member CKEDITOR.config | ||
3239 | */ | ||
3240 | |||
3241 | /** | ||
3242 | * The guideline to follow when generating the dialog buttons. There are 3 possible options: | ||
3243 | * | ||
3244 | * * `'OS'` - the buttons will be displayed in the default order of the user's OS; | ||
3245 | * * `'ltr'` - for Left-To-Right order; | ||
3246 | * * `'rtl'` - for Right-To-Left order. | ||
3247 | * | ||
3248 | * Example: | ||
3249 | * | ||
3250 | * config.dialog_buttonsOrder = 'rtl'; | ||
3251 | * | ||
3252 | * @since 3.5 | ||
3253 | * @cfg {String} [dialog_buttonsOrder='OS'] | ||
3254 | * @member CKEDITOR.config | ||
3255 | */ | ||
3256 | |||
3257 | /** | ||
3258 | * The dialog contents to removed. It's a string composed by dialog name and tab name with a colon between them. | ||
3259 | * | ||
3260 | * Separate each pair with semicolon (see example). | ||
3261 | * | ||
3262 | * **Note:** All names are case-sensitive. | ||
3263 | * | ||
3264 | * **Note:** Be cautious when specifying dialog tabs that are mandatory, | ||
3265 | * like `'info'`, dialog functionality might be broken because of this! | ||
3266 | * | ||
3267 | * config.removeDialogTabs = 'flash:advanced;image:Link'; | ||
3268 | * | ||
3269 | * @since 3.5 | ||
3270 | * @cfg {String} [removeDialogTabs=''] | ||
3271 | * @member CKEDITOR.config | ||
3272 | */ | ||
3273 | |||
3274 | /** | ||
3275 | * Tells if user should not be asked to confirm close, if any dialog field was modified. | ||
3276 | * By default it is set to `false` meaning that the confirmation dialog will be shown. | ||
3277 | * | ||
3278 | * config.dialog_noConfirmCancel = true; | ||
3279 | * | ||
3280 | * @since 4.3 | ||
3281 | * @cfg {Boolean} [dialog_noConfirmCancel=false] | ||
3282 | * @member CKEDITOR.config | ||
3283 | */ | ||
3284 | |||
3285 | /** | ||
3286 | * Event fired when a dialog definition is about to be used to create a dialog into | ||
3287 | * an editor instance. This event makes it possible to customize the definition | ||
3288 | * before creating it. | ||
3289 | * | ||
3290 | * Note that this event is called only the first time a specific dialog is | ||
3291 | * opened. Successive openings will use the cached dialog, and this event will | ||
3292 | * not get fired. | ||
3293 | * | ||
3294 | * @event dialogDefinition | ||
3295 | * @member CKEDITOR | ||
3296 | * @param {CKEDITOR.dialog.definition} data The dialog defination that | ||
3297 | * is being loaded. | ||
3298 | * @param {CKEDITOR.editor} editor The editor instance that will use the dialog. | ||
3299 | */ | ||
3300 | |||
3301 | /** | ||
3302 | * Event fired when a tab is going to be selected in a dialog. | ||
3303 | * | ||
3304 | * @event selectPage | ||
3305 | * @member CKEDITOR.dialog | ||
3306 | * @param data | ||
3307 | * @param {String} data.page The id of the page that it's gonna be selected. | ||
3308 | * @param {String} data.currentPage The id of the current page. | ||
3309 | */ | ||
3310 | |||
3311 | /** | ||
3312 | * Event fired when the user tries to dismiss a dialog. | ||
3313 | * | ||
3314 | * @event cancel | ||
3315 | * @member CKEDITOR.dialog | ||
3316 | * @param data | ||
3317 | * @param {Boolean} data.hide Whether the event should proceed or not. | ||
3318 | */ | ||
3319 | |||
3320 | /** | ||
3321 | * Event fired when the user tries to confirm a dialog. | ||
3322 | * | ||
3323 | * @event ok | ||
3324 | * @member CKEDITOR.dialog | ||
3325 | * @param data | ||
3326 | * @param {Boolean} data.hide Whether the event should proceed or not. | ||
3327 | */ | ||
3328 | |||
3329 | /** | ||
3330 | * Event fired when a dialog is shown. | ||
3331 | * | ||
3332 | * @event show | ||
3333 | * @member CKEDITOR.dialog | ||
3334 | */ | ||
3335 | |||
3336 | /** | ||
3337 | * Event fired when a dialog is shown. | ||
3338 | * | ||
3339 | * @event dialogShow | ||
3340 | * @member CKEDITOR.editor | ||
3341 | * @param {CKEDITOR.editor} editor This editor instance. | ||
3342 | * @param {CKEDITOR.dialog} data The opened dialog instance. | ||
3343 | */ | ||
3344 | |||
3345 | /** | ||
3346 | * Event fired when a dialog is hidden. | ||
3347 | * | ||
3348 | * @event hide | ||
3349 | * @member CKEDITOR.dialog | ||
3350 | */ | ||
3351 | |||
3352 | /** | ||
3353 | * Event fired when a dialog is hidden. | ||
3354 | * | ||
3355 | * @event dialogHide | ||
3356 | * @member CKEDITOR.editor | ||
3357 | * @param {CKEDITOR.editor} editor This editor instance. | ||
3358 | * @param {CKEDITOR.dialog} data The hidden dialog instance. | ||
3359 | */ | ||
3360 | |||
3361 | /** | ||
3362 | * Event fired when a dialog is being resized. The event is fired on | ||
3363 | * both the {@link CKEDITOR.dialog} object and the dialog instance | ||
3364 | * since 3.5.3, previously it was only available in the global object. | ||
3365 | * | ||
3366 | * @static | ||
3367 | * @event resize | ||
3368 | * @member CKEDITOR.dialog | ||
3369 | * @param data | ||
3370 | * @param {CKEDITOR.dialog} data.dialog The dialog being resized (if | ||
3371 | * it is fired on the dialog itself, this parameter is not sent). | ||
3372 | * @param {String} data.skin The skin name. | ||
3373 | * @param {Number} data.width The new width. | ||
3374 | * @param {Number} data.height The new height. | ||
3375 | */ | ||
3376 | |||
3377 | /** | ||
3378 | * Event fired when a dialog is being resized. The event is fired on | ||
3379 | * both the {@link CKEDITOR.dialog} object and the dialog instance | ||
3380 | * since 3.5.3, previously it was only available in the global object. | ||
3381 | * | ||
3382 | * @since 3.5 | ||
3383 | * @event resize | ||
3384 | * @member CKEDITOR.dialog | ||
3385 | * @param data | ||
3386 | * @param {Number} data.width The new width. | ||
3387 | * @param {Number} data.height The new height. | ||
3388 | */ | ||
3389 | |||
3390 | /** | ||
3391 | * Event fired when the dialog state changes, usually by {@link CKEDITOR.dialog#setState}. | ||
3392 | * | ||
3393 | * @since 4.5 | ||
3394 | * @event state | ||
3395 | * @member CKEDITOR.dialog | ||
3396 | * @param data | ||
3397 | * @param {Number} data The new state. Either {@link CKEDITOR#DIALOG_STATE_IDLE} or {@link CKEDITOR#DIALOG_STATE_BUSY}. | ||
3398 | */ | ||
diff --git a/sources/plugins/dialog/samples/assets/my_dialog.js b/sources/plugins/dialog/samples/assets/my_dialog.js new file mode 100644 index 0000000..cf9185e --- /dev/null +++ b/sources/plugins/dialog/samples/assets/my_dialog.js | |||
@@ -0,0 +1,49 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.dialog.add( 'myDialog', function() { | ||
7 | return { | ||
8 | title: 'My Dialog', | ||
9 | minWidth: 400, | ||
10 | minHeight: 200, | ||
11 | contents: [ | ||
12 | { | ||
13 | id: 'tab1', | ||
14 | label: 'First Tab', | ||
15 | title: 'First Tab', | ||
16 | elements: [ | ||
17 | { | ||
18 | id: 'input1', | ||
19 | type: 'text', | ||
20 | label: 'Text Field' | ||
21 | }, | ||
22 | { | ||
23 | id: 'select1', | ||
24 | type: 'select', | ||
25 | label: 'Select Field', | ||
26 | items: [ | ||
27 | [ 'option1', 'value1' ], | ||
28 | [ 'option2', 'value2' ] | ||
29 | ] | ||
30 | } | ||
31 | ] | ||
32 | }, | ||
33 | { | ||
34 | id: 'tab2', | ||
35 | label: 'Second Tab', | ||
36 | title: 'Second Tab', | ||
37 | elements: [ | ||
38 | { | ||
39 | id: 'button1', | ||
40 | type: 'button', | ||
41 | label: 'Button Field' | ||
42 | } | ||
43 | ] | ||
44 | } | ||
45 | ] | ||
46 | }; | ||
47 | } ); | ||
48 | |||
49 | // %LEAVE_UNMINIFIED% %REMOVE_LINE% | ||
diff --git a/sources/plugins/dialog/samples/dialog.html b/sources/plugins/dialog/samples/dialog.html new file mode 100644 index 0000000..7fda2bb --- /dev/null +++ b/sources/plugins/dialog/samples/dialog.html | |||
@@ -0,0 +1,190 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <!-- | ||
3 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
4 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
5 | --> | ||
6 | <html> | ||
7 | <head> | ||
8 | <meta charset="utf-8"> | ||
9 | <title>Using API to Customize Dialog Windows — CKEditor Sample</title> | ||
10 | <script src="../../../ckeditor.js"></script> | ||
11 | <link rel="stylesheet" href="../../../samples/old/sample.css"> | ||
12 | <meta name="ckeditor-sample-name" content="Using the JavaScript API to customize dialog windows"> | ||
13 | <meta name="ckeditor-sample-group" content="Advanced Samples"> | ||
14 | <meta name="ckeditor-sample-description" content="Using the dialog windows API to customize dialog windows without changing the original editor code."> | ||
15 | <style> | ||
16 | |||
17 | .cke_button__mybutton_icon | ||
18 | { | ||
19 | display: none !important; | ||
20 | } | ||
21 | |||
22 | .cke_button__mybutton_label | ||
23 | { | ||
24 | display: inline !important; | ||
25 | } | ||
26 | |||
27 | </style> | ||
28 | <script> | ||
29 | |||
30 | CKEDITOR.on( 'instanceCreated', function( ev ){ | ||
31 | var editor = ev.editor; | ||
32 | |||
33 | // Listen for the "pluginsLoaded" event, so we are sure that the | ||
34 | // "dialog" plugin has been loaded and we are able to do our | ||
35 | // customizations. | ||
36 | editor.on( 'pluginsLoaded', function() { | ||
37 | |||
38 | // If our custom dialog has not been registered, do that now. | ||
39 | if ( !CKEDITOR.dialog.exists( 'myDialog' ) ) { | ||
40 | // We need to do the following trick to find out the dialog | ||
41 | // definition file URL path. In the real world, you would simply | ||
42 | // point to an absolute path directly, like "/mydir/mydialog.js". | ||
43 | var href = document.location.href.split( '/' ); | ||
44 | href.pop(); | ||
45 | href.push( 'assets/my_dialog.js' ); | ||
46 | href = href.join( '/' ); | ||
47 | |||
48 | // Finally, register the dialog. | ||
49 | CKEDITOR.dialog.add( 'myDialog', href ); | ||
50 | } | ||
51 | |||
52 | // Register the command used to open the dialog. | ||
53 | editor.addCommand( 'myDialogCmd', new CKEDITOR.dialogCommand( 'myDialog' ) ); | ||
54 | |||
55 | // Add the a custom toolbar buttons, which fires the above | ||
56 | // command.. | ||
57 | editor.ui.add( 'MyButton', CKEDITOR.UI_BUTTON, { | ||
58 | label: 'My Dialog', | ||
59 | command: 'myDialogCmd' | ||
60 | }); | ||
61 | }); | ||
62 | }); | ||
63 | |||
64 | // When opening a dialog, its "definition" is created for it, for | ||
65 | // each editor instance. The "dialogDefinition" event is then | ||
66 | // fired. We should use this event to make customizations to the | ||
67 | // definition of existing dialogs. | ||
68 | CKEDITOR.on( 'dialogDefinition', function( ev ) { | ||
69 | // Take the dialog name and its definition from the event data. | ||
70 | var dialogName = ev.data.name; | ||
71 | var dialogDefinition = ev.data.definition; | ||
72 | |||
73 | // Check if the definition is from the dialog we're | ||
74 | // interested on (the "Link" dialog). | ||
75 | if ( dialogName == 'myDialog' && ev.editor.name == 'editor2' ) { | ||
76 | // Get a reference to the "Link Info" tab. | ||
77 | var infoTab = dialogDefinition.getContents( 'tab1' ); | ||
78 | |||
79 | // Add a new text field to the "tab1" tab page. | ||
80 | infoTab.add( { | ||
81 | type: 'text', | ||
82 | label: 'My Custom Field', | ||
83 | id: 'customField', | ||
84 | 'default': 'Sample!', | ||
85 | validate: function() { | ||
86 | if ( ( /\d/ ).test( this.getValue() ) ) | ||
87 | return 'My Custom Field must not contain digits'; | ||
88 | } | ||
89 | }); | ||
90 | |||
91 | // Remove the "select1" field from the "tab1" tab. | ||
92 | infoTab.remove( 'select1' ); | ||
93 | |||
94 | // Set the default value for "input1" field. | ||
95 | var input1 = infoTab.get( 'input1' ); | ||
96 | input1[ 'default' ] = 'www.example.com'; | ||
97 | |||
98 | // Remove the "tab2" tab page. | ||
99 | dialogDefinition.removeContents( 'tab2' ); | ||
100 | |||
101 | // Add a new tab to the "Link" dialog. | ||
102 | dialogDefinition.addContents( { | ||
103 | id: 'customTab', | ||
104 | label: 'My Tab', | ||
105 | accessKey: 'M', | ||
106 | elements: [ | ||
107 | { | ||
108 | id: 'myField1', | ||
109 | type: 'text', | ||
110 | label: 'My Text Field' | ||
111 | }, | ||
112 | { | ||
113 | id: 'myField2', | ||
114 | type: 'text', | ||
115 | label: 'Another Text Field' | ||
116 | } | ||
117 | ] | ||
118 | }); | ||
119 | |||
120 | // Provide the focus handler to start initial focus in "customField" field. | ||
121 | dialogDefinition.onFocus = function() { | ||
122 | var urlField = this.getContentElement( 'tab1', 'customField' ); | ||
123 | urlField.select(); | ||
124 | }; | ||
125 | } | ||
126 | }); | ||
127 | |||
128 | var config = { | ||
129 | extraPlugins: 'dialog', | ||
130 | toolbar: [ [ 'MyButton' ] ] | ||
131 | }; | ||
132 | |||
133 | </script> | ||
134 | </head> | ||
135 | <body> | ||
136 | <h1 class="samples"> | ||
137 | <a href="../../../samples/old/index.html">CKEditor Samples</a> » Using CKEditor Dialog API | ||
138 | </h1> | ||
139 | <div class="warning deprecated"> | ||
140 | This sample is not maintained anymore. Check out the <a href="http://sdk.ckeditor.com/">brand new samples in CKEditor SDK</a>. | ||
141 | </div> | ||
142 | <div class="description"> | ||
143 | <p> | ||
144 | This sample shows how to use the | ||
145 | <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.dialog">CKEditor Dialog API</a> | ||
146 | to customize CKEditor dialog windows without changing the original editor code. | ||
147 | The following customizations are being done in the example below: | ||
148 | </p> | ||
149 | <p> | ||
150 | For details on how to create this setup check the source code of this sample page. | ||
151 | </p> | ||
152 | </div> | ||
153 | <p>A custom dialog is added to the editors using the <code>pluginsLoaded</code> event, from an external <a target="_blank" href="assets/my_dialog.js">dialog definition file</a>:</p> | ||
154 | <ol> | ||
155 | <li><strong>Creating a custom dialog window</strong> – "My Dialog" dialog window opened with the "My Dialog" toolbar button.</li> | ||
156 | <li><strong>Creating a custom button</strong> – Add button to open the dialog with "My Dialog" toolbar button.</li> | ||
157 | </ol> | ||
158 | <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> | ||
159 | <script> | ||
160 | // Replace the <textarea id="editor1"> with an CKEditor instance. | ||
161 | CKEDITOR.replace( 'editor1', config ); | ||
162 | </script> | ||
163 | <p>The below editor modify the dialog definition of the above added dialog using the <code>dialogDefinition</code> event:</p> | ||
164 | <ol> | ||
165 | <li><strong>Adding dialog tab</strong> – Add new tab "My Tab" to dialog window.</li> | ||
166 | <li><strong>Removing a dialog window tab</strong> – Remove "Second Tab" page from the dialog window.</li> | ||
167 | <li><strong>Adding dialog window fields</strong> – Add "My Custom Field" to the dialog window.</li> | ||
168 | <li><strong>Removing dialog window field</strong> – Remove "Select Field" selection field from the dialog window.</li> | ||
169 | <li><strong>Setting default values for dialog window fields</strong> – Set default value of "Text Field" text field. </li> | ||
170 | <li><strong>Setup initial focus for dialog window</strong> – Put initial focus on "My Custom Field" text field. </li> | ||
171 | </ol> | ||
172 | <textarea cols="80" id="editor2" name="editor2" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> | ||
173 | <script> | ||
174 | |||
175 | // Replace the <textarea id="editor1"> with an CKEditor instance. | ||
176 | CKEDITOR.replace( 'editor2', config ); | ||
177 | |||
178 | </script> | ||
179 | <div id="footer"> | ||
180 | <hr> | ||
181 | <p> | ||
182 | CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> | ||
183 | </p> | ||
184 | <p id="copy"> | ||
185 | Copyright © 2003-2016, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico | ||
186 | Knabben. All rights reserved. | ||
187 | </p> | ||
188 | </div> | ||
189 | </body> | ||
190 | </html> | ||
diff --git a/sources/plugins/dialogadvtab/plugin.js b/sources/plugins/dialogadvtab/plugin.js new file mode 100644 index 0000000..2d4bcab --- /dev/null +++ b/sources/plugins/dialogadvtab/plugin.js | |||
@@ -0,0 +1,196 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | |||
8 | function setupAdvParams( element ) { | ||
9 | var attrName = this.att; | ||
10 | |||
11 | var value = element && element.hasAttribute( attrName ) && element.getAttribute( attrName ) || ''; | ||
12 | |||
13 | if ( value !== undefined ) | ||
14 | this.setValue( value ); | ||
15 | } | ||
16 | |||
17 | function commitAdvParams() { | ||
18 | // Dialogs may use different parameters in the commit list, so, by | ||
19 | // definition, we take the first CKEDITOR.dom.element available. | ||
20 | var element; | ||
21 | |||
22 | for ( var i = 0; i < arguments.length; i++ ) { | ||
23 | if ( arguments[ i ] instanceof CKEDITOR.dom.element ) { | ||
24 | element = arguments[ i ]; | ||
25 | break; | ||
26 | } | ||
27 | } | ||
28 | |||
29 | if ( element ) { | ||
30 | var attrName = this.att, | ||
31 | value = this.getValue(); | ||
32 | |||
33 | if ( value ) | ||
34 | element.setAttribute( attrName, value ); | ||
35 | else | ||
36 | element.removeAttribute( attrName, value ); | ||
37 | } | ||
38 | } | ||
39 | |||
40 | var defaultTabConfig = { id: 1, dir: 1, classes: 1, styles: 1 }; | ||
41 | |||
42 | CKEDITOR.plugins.add( 'dialogadvtab', { | ||
43 | requires: 'dialog', | ||
44 | |||
45 | // Returns allowed content rule for the content created by this plugin. | ||
46 | allowedContent: function( tabConfig ) { | ||
47 | if ( !tabConfig ) | ||
48 | tabConfig = defaultTabConfig; | ||
49 | |||
50 | var allowedAttrs = []; | ||
51 | if ( tabConfig.id ) | ||
52 | allowedAttrs.push( 'id' ); | ||
53 | if ( tabConfig.dir ) | ||
54 | allowedAttrs.push( 'dir' ); | ||
55 | |||
56 | var allowed = ''; | ||
57 | |||
58 | if ( allowedAttrs.length ) | ||
59 | allowed += '[' + allowedAttrs.join( ',' ) + ']'; | ||
60 | |||
61 | if ( tabConfig.classes ) | ||
62 | allowed += '(*)'; | ||
63 | if ( tabConfig.styles ) | ||
64 | allowed += '{*}'; | ||
65 | |||
66 | return allowed; | ||
67 | }, | ||
68 | |||
69 | // @param tabConfig | ||
70 | // id, dir, classes, styles | ||
71 | createAdvancedTab: function( editor, tabConfig, element ) { | ||
72 | if ( !tabConfig ) | ||
73 | tabConfig = defaultTabConfig; | ||
74 | |||
75 | var lang = editor.lang.common; | ||
76 | |||
77 | var result = { | ||
78 | id: 'advanced', | ||
79 | label: lang.advancedTab, | ||
80 | title: lang.advancedTab, | ||
81 | elements: [ { | ||
82 | type: 'vbox', | ||
83 | padding: 1, | ||
84 | children: [] | ||
85 | } ] | ||
86 | }; | ||
87 | |||
88 | var contents = []; | ||
89 | |||
90 | if ( tabConfig.id || tabConfig.dir ) { | ||
91 | if ( tabConfig.id ) { | ||
92 | contents.push( { | ||
93 | id: 'advId', | ||
94 | att: 'id', | ||
95 | type: 'text', | ||
96 | requiredContent: element ? element + '[id]' : null, | ||
97 | label: lang.id, | ||
98 | setup: setupAdvParams, | ||
99 | commit: commitAdvParams | ||
100 | } ); | ||
101 | } | ||
102 | |||
103 | if ( tabConfig.dir ) { | ||
104 | contents.push( { | ||
105 | id: 'advLangDir', | ||
106 | att: 'dir', | ||
107 | type: 'select', | ||
108 | requiredContent: element ? element + '[dir]' : null, | ||
109 | label: lang.langDir, | ||
110 | 'default': '', | ||
111 | style: 'width:100%', | ||
112 | items: [ | ||
113 | [ lang.notSet, '' ], | ||
114 | [ lang.langDirLTR, 'ltr' ], | ||
115 | [ lang.langDirRTL, 'rtl' ] | ||
116 | ], | ||
117 | setup: setupAdvParams, | ||
118 | commit: commitAdvParams | ||
119 | } ); | ||
120 | } | ||
121 | |||
122 | result.elements[ 0 ].children.push( { | ||
123 | type: 'hbox', | ||
124 | widths: [ '50%', '50%' ], | ||
125 | children: [].concat( contents ) | ||
126 | } ); | ||
127 | } | ||
128 | |||
129 | if ( tabConfig.styles || tabConfig.classes ) { | ||
130 | contents = []; | ||
131 | |||
132 | if ( tabConfig.styles ) { | ||
133 | contents.push( { | ||
134 | id: 'advStyles', | ||
135 | att: 'style', | ||
136 | type: 'text', | ||
137 | requiredContent: element ? element + '{cke-xyz}' : null, | ||
138 | label: lang.styles, | ||
139 | 'default': '', | ||
140 | |||
141 | validate: CKEDITOR.dialog.validate.inlineStyle( lang.invalidInlineStyle ), | ||
142 | onChange: function() {}, | ||
143 | |||
144 | getStyle: function( name, defaultValue ) { | ||
145 | var match = this.getValue().match( new RegExp( '(?:^|;)\\s*' + name + '\\s*:\\s*([^;]*)', 'i' ) ); | ||
146 | return match ? match[ 1 ] : defaultValue; | ||
147 | }, | ||
148 | |||
149 | updateStyle: function( name, value ) { | ||
150 | var styles = this.getValue(); | ||
151 | |||
152 | var tmp = editor.document.createElement( 'span' ); | ||
153 | tmp.setAttribute( 'style', styles ); | ||
154 | tmp.setStyle( name, value ); | ||
155 | styles = CKEDITOR.tools.normalizeCssText( tmp.getAttribute( 'style' ) ); | ||
156 | |||
157 | this.setValue( styles, 1 ); | ||
158 | }, | ||
159 | |||
160 | setup: setupAdvParams, | ||
161 | |||
162 | commit: commitAdvParams | ||
163 | |||
164 | } ); | ||
165 | } | ||
166 | |||
167 | if ( tabConfig.classes ) { | ||
168 | contents.push( { | ||
169 | type: 'hbox', | ||
170 | widths: [ '45%', '55%' ], | ||
171 | children: [ { | ||
172 | id: 'advCSSClasses', | ||
173 | att: 'class', | ||
174 | type: 'text', | ||
175 | requiredContent: element ? element + '(cke-xyz)' : null, | ||
176 | label: lang.cssClasses, | ||
177 | 'default': '', | ||
178 | setup: setupAdvParams, | ||
179 | commit: commitAdvParams | ||
180 | |||
181 | } ] | ||
182 | } ); | ||
183 | } | ||
184 | |||
185 | result.elements[ 0 ].children.push( { | ||
186 | type: 'hbox', | ||
187 | widths: [ '50%', '50%' ], | ||
188 | children: [].concat( contents ) | ||
189 | } ); | ||
190 | } | ||
191 | |||
192 | return result; | ||
193 | } | ||
194 | } ); | ||
195 | |||
196 | } )(); | ||
diff --git a/sources/plugins/dialogui/plugin.js b/sources/plugins/dialogui/plugin.js new file mode 100644 index 0000000..03fe753 --- /dev/null +++ b/sources/plugins/dialogui/plugin.js | |||
@@ -0,0 +1,1530 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview The Dialog User Interface plugin. | ||
8 | */ | ||
9 | |||
10 | CKEDITOR.plugins.add( 'dialogui', { | ||
11 | onLoad: function() { | ||
12 | |||
13 | var initPrivateObject = function( elementDefinition ) { | ||
14 | this._ || ( this._ = {} ); | ||
15 | this._[ 'default' ] = this._.initValue = elementDefinition[ 'default' ] || ''; | ||
16 | this._.required = elementDefinition.required || false; | ||
17 | var args = [ this._ ]; | ||
18 | for ( var i = 1; i < arguments.length; i++ ) | ||
19 | args.push( arguments[ i ] ); | ||
20 | args.push( true ); | ||
21 | CKEDITOR.tools.extend.apply( CKEDITOR.tools, args ); | ||
22 | return this._; | ||
23 | }, | ||
24 | textBuilder = { | ||
25 | build: function( dialog, elementDefinition, output ) { | ||
26 | return new CKEDITOR.ui.dialog.textInput( dialog, elementDefinition, output ); | ||
27 | } | ||
28 | }, | ||
29 | commonBuilder = { | ||
30 | build: function( dialog, elementDefinition, output ) { | ||
31 | return new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, elementDefinition, output ); | ||
32 | } | ||
33 | }, | ||
34 | containerBuilder = { | ||
35 | build: function( dialog, elementDefinition, output ) { | ||
36 | var children = elementDefinition.children, | ||
37 | child, | ||
38 | childHtmlList = [], | ||
39 | childObjList = []; | ||
40 | for ( var i = 0; | ||
41 | ( i < children.length && ( child = children[ i ] ) ); i++ ) { | ||
42 | var childHtml = []; | ||
43 | childHtmlList.push( childHtml ); | ||
44 | childObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) ); | ||
45 | } | ||
46 | return new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, childObjList, childHtmlList, output, elementDefinition ); | ||
47 | } | ||
48 | }, | ||
49 | commonPrototype = { | ||
50 | isChanged: function() { | ||
51 | return this.getValue() != this.getInitValue(); | ||
52 | }, | ||
53 | |||
54 | reset: function( noChangeEvent ) { | ||
55 | this.setValue( this.getInitValue(), noChangeEvent ); | ||
56 | }, | ||
57 | |||
58 | setInitValue: function() { | ||
59 | this._.initValue = this.getValue(); | ||
60 | }, | ||
61 | |||
62 | resetInitValue: function() { | ||
63 | this._.initValue = this._[ 'default' ]; | ||
64 | }, | ||
65 | |||
66 | getInitValue: function() { | ||
67 | return this._.initValue; | ||
68 | } | ||
69 | }, | ||
70 | commonEventProcessors = CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, { | ||
71 | onChange: function( dialog, func ) { | ||
72 | if ( !this._.domOnChangeRegistered ) { | ||
73 | dialog.on( 'load', function() { | ||
74 | this.getInputElement().on( 'change', function() { | ||
75 | // Make sure 'onchange' doesn't get fired after dialog closed. (#5719) | ||
76 | if ( !dialog.parts.dialog.isVisible() ) | ||
77 | return; | ||
78 | |||
79 | this.fire( 'change', { value: this.getValue() } ); | ||
80 | }, this ); | ||
81 | }, this ); | ||
82 | this._.domOnChangeRegistered = true; | ||
83 | } | ||
84 | |||
85 | this.on( 'change', func ); | ||
86 | } | ||
87 | }, true ), | ||
88 | eventRegex = /^on([A-Z]\w+)/, | ||
89 | cleanInnerDefinition = function( def ) { | ||
90 | // An inner UI element should not have the parent's type, title or events. | ||
91 | for ( var i in def ) { | ||
92 | if ( eventRegex.test( i ) || i == 'title' || i == 'type' ) | ||
93 | delete def[ i ]; | ||
94 | } | ||
95 | return def; | ||
96 | }, | ||
97 | // @context {CKEDITOR.dialog.uiElement} UI element (textarea or textInput) | ||
98 | // @param {CKEDITOR.dom.event} evt | ||
99 | toggleBidiKeyUpHandler = function( evt ) { | ||
100 | var keystroke = evt.data.getKeystroke(); | ||
101 | |||
102 | // ALT + SHIFT + Home for LTR direction. | ||
103 | if ( keystroke == CKEDITOR.SHIFT + CKEDITOR.ALT + 36 ) | ||
104 | this.setDirectionMarker( 'ltr' ); | ||
105 | |||
106 | // ALT + SHIFT + End for RTL direction. | ||
107 | else if ( keystroke == CKEDITOR.SHIFT + CKEDITOR.ALT + 35 ) | ||
108 | this.setDirectionMarker( 'rtl' ); | ||
109 | }; | ||
110 | |||
111 | CKEDITOR.tools.extend( CKEDITOR.ui.dialog, { | ||
112 | /** | ||
113 | * Base class for all dialog window elements with a textual label on the left. | ||
114 | * | ||
115 | * @class CKEDITOR.ui.dialog.labeledElement | ||
116 | * @extends CKEDITOR.ui.dialog.uiElement | ||
117 | * @constructor Creates a labeledElement class instance. | ||
118 | * @param {CKEDITOR.dialog} dialog Parent dialog window object. | ||
119 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
120 | * The element definition. Accepted fields: | ||
121 | * | ||
122 | * * `label` (Required) The label string. | ||
123 | * * `labelLayout` (Optional) Put 'horizontal' here if the | ||
124 | * label element is to be laid out horizontally. Otherwise a vertical | ||
125 | * layout will be used. | ||
126 | * * `widths` (Optional) This applies only to horizontal | ||
127 | * layouts — a two-element array of lengths to specify the widths of the | ||
128 | * label and the content element. | ||
129 | * * `role` (Optional) Value for the `role` attribute. | ||
130 | * * `includeLabel` (Optional) If set to `true`, the `aria-labelledby` attribute | ||
131 | * will be included. | ||
132 | * | ||
133 | * @param {Array} htmlList The list of HTML code to output to. | ||
134 | * @param {Function} contentHtml | ||
135 | * A function returning the HTML code string to be added inside the content | ||
136 | * cell. | ||
137 | */ | ||
138 | labeledElement: function( dialog, elementDefinition, htmlList, contentHtml ) { | ||
139 | if ( arguments.length < 4 ) | ||
140 | return; | ||
141 | |||
142 | var _ = initPrivateObject.call( this, elementDefinition ); | ||
143 | _.labelId = CKEDITOR.tools.getNextId() + '_label'; | ||
144 | this._.children = []; | ||
145 | |||
146 | var innerHTML = function() { | ||
147 | var html = [], | ||
148 | requiredClass = elementDefinition.required ? ' cke_required' : ''; | ||
149 | if ( elementDefinition.labelLayout != 'horizontal' ) { | ||
150 | html.push( | ||
151 | '<label class="cke_dialog_ui_labeled_label' + requiredClass + '" ', ' id="' + _.labelId + '"', | ||
152 | ( _.inputId ? ' for="' + _.inputId + '"' : '' ), | ||
153 | ( elementDefinition.labelStyle ? ' style="' + elementDefinition.labelStyle + '"' : '' ) + '>', | ||
154 | elementDefinition.label, | ||
155 | '</label>', | ||
156 | '<div class="cke_dialog_ui_labeled_content"', | ||
157 | ( elementDefinition.controlStyle ? ' style="' + elementDefinition.controlStyle + '"' : '' ), | ||
158 | ' role="presentation">', | ||
159 | contentHtml.call( this, dialog, elementDefinition ), | ||
160 | '</div>' ); | ||
161 | } else { | ||
162 | var hboxDefinition = { | ||
163 | type: 'hbox', | ||
164 | widths: elementDefinition.widths, | ||
165 | padding: 0, | ||
166 | children: [ { | ||
167 | type: 'html', | ||
168 | html: '<label class="cke_dialog_ui_labeled_label' + requiredClass + '"' + | ||
169 | ' id="' + _.labelId + '"' + | ||
170 | ' for="' + _.inputId + '"' + | ||
171 | ( elementDefinition.labelStyle ? ' style="' + elementDefinition.labelStyle + '"' : '' ) + '>' + | ||
172 | CKEDITOR.tools.htmlEncode( elementDefinition.label ) + | ||
173 | '</label>' | ||
174 | }, | ||
175 | { | ||
176 | type: 'html', | ||
177 | html: '<span class="cke_dialog_ui_labeled_content"' + ( elementDefinition.controlStyle ? ' style="' + elementDefinition.controlStyle + '"' : '' ) + '>' + | ||
178 | contentHtml.call( this, dialog, elementDefinition ) + | ||
179 | '</span>' | ||
180 | } ] | ||
181 | }; | ||
182 | CKEDITOR.dialog._.uiElementBuilders.hbox.build( dialog, hboxDefinition, html ); | ||
183 | } | ||
184 | return html.join( '' ); | ||
185 | }; | ||
186 | var attributes = { role: elementDefinition.role || 'presentation' }; | ||
187 | |||
188 | if ( elementDefinition.includeLabel ) | ||
189 | attributes[ 'aria-labelledby' ] = _.labelId; | ||
190 | |||
191 | CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'div', null, attributes, innerHTML ); | ||
192 | }, | ||
193 | |||
194 | /** | ||
195 | * A text input with a label. This UI element class represents both the | ||
196 | * single-line text inputs and password inputs in dialog boxes. | ||
197 | * | ||
198 | * @class CKEDITOR.ui.dialog.textInput | ||
199 | * @extends CKEDITOR.ui.dialog.labeledElement | ||
200 | * @constructor Creates a textInput class instance. | ||
201 | * @param {CKEDITOR.dialog} dialog Parent dialog window object. | ||
202 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
203 | * The element definition. Accepted fields: | ||
204 | * | ||
205 | * * `default` (Optional) The default value. | ||
206 | * * `validate` (Optional) The validation function. | ||
207 | * * `maxLength` (Optional) The maximum length of text box contents. | ||
208 | * * `size` (Optional) The size of the text box. This is | ||
209 | * usually overridden by the size defined by the skin, though. | ||
210 | * | ||
211 | * @param {Array} htmlList List of HTML code to output to. | ||
212 | */ | ||
213 | textInput: function( dialog, elementDefinition, htmlList ) { | ||
214 | if ( arguments.length < 3 ) | ||
215 | return; | ||
216 | |||
217 | initPrivateObject.call( this, elementDefinition ); | ||
218 | var domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textInput', | ||
219 | attributes = { 'class': 'cke_dialog_ui_input_' + elementDefinition.type, id: domId, type: elementDefinition.type }; | ||
220 | |||
221 | // Set the validator, if any. | ||
222 | if ( elementDefinition.validate ) | ||
223 | this.validate = elementDefinition.validate; | ||
224 | |||
225 | // Set the max length and size. | ||
226 | if ( elementDefinition.maxLength ) | ||
227 | attributes.maxlength = elementDefinition.maxLength; | ||
228 | if ( elementDefinition.size ) | ||
229 | attributes.size = elementDefinition.size; | ||
230 | |||
231 | if ( elementDefinition.inputStyle ) | ||
232 | attributes.style = elementDefinition.inputStyle; | ||
233 | |||
234 | // If user presses Enter in a text box, it implies clicking OK for the dialog. | ||
235 | var me = this, | ||
236 | keyPressedOnMe = false; | ||
237 | dialog.on( 'load', function() { | ||
238 | me.getInputElement().on( 'keydown', function( evt ) { | ||
239 | if ( evt.data.getKeystroke() == 13 ) | ||
240 | keyPressedOnMe = true; | ||
241 | } ); | ||
242 | |||
243 | // Lower the priority this 'keyup' since 'ok' will close the dialog.(#3749) | ||
244 | me.getInputElement().on( 'keyup', function( evt ) { | ||
245 | if ( evt.data.getKeystroke() == 13 && keyPressedOnMe ) { | ||
246 | dialog.getButton( 'ok' ) && setTimeout( function() { | ||
247 | dialog.getButton( 'ok' ).click(); | ||
248 | }, 0 ); | ||
249 | keyPressedOnMe = false; | ||
250 | } | ||
251 | |||
252 | if ( me.bidi ) | ||
253 | toggleBidiKeyUpHandler.call( me, evt ); | ||
254 | }, null, null, 1000 ); | ||
255 | } ); | ||
256 | |||
257 | var innerHTML = function() { | ||
258 | // IE BUG: Text input fields in IE at 100% would exceed a <td> or inline | ||
259 | // container's width, so need to wrap it inside a <div>. | ||
260 | var html = [ '<div class="cke_dialog_ui_input_', elementDefinition.type, '" role="presentation"' ]; | ||
261 | |||
262 | if ( elementDefinition.width ) | ||
263 | html.push( 'style="width:' + elementDefinition.width + '" ' ); | ||
264 | |||
265 | html.push( '><input ' ); | ||
266 | |||
267 | attributes[ 'aria-labelledby' ] = this._.labelId; | ||
268 | this._.required && ( attributes[ 'aria-required' ] = this._.required ); | ||
269 | for ( var i in attributes ) | ||
270 | html.push( i + '="' + attributes[ i ] + '" ' ); | ||
271 | html.push( ' /></div>' ); | ||
272 | return html.join( '' ); | ||
273 | }; | ||
274 | CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); | ||
275 | }, | ||
276 | |||
277 | /** | ||
278 | * A text area with a label at the top or on the left. | ||
279 | * | ||
280 | * @class CKEDITOR.ui.dialog.textarea | ||
281 | * @extends CKEDITOR.ui.dialog.labeledElement | ||
282 | * @constructor Creates a textarea class instance. | ||
283 | * @param {CKEDITOR.dialog} dialog Parent dialog window object. | ||
284 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
285 | * | ||
286 | * The element definition. Accepted fields: | ||
287 | * | ||
288 | * * `rows` (Optional) The number of rows displayed. | ||
289 | * Defaults to 5 if not defined. | ||
290 | * * `cols` (Optional) The number of cols displayed. | ||
291 | * Defaults to 20 if not defined. Usually overridden by skins. | ||
292 | * * `default` (Optional) The default value. | ||
293 | * * `validate` (Optional) The validation function. | ||
294 | * | ||
295 | * @param {Array} htmlList List of HTML code to output to. | ||
296 | */ | ||
297 | textarea: function( dialog, elementDefinition, htmlList ) { | ||
298 | if ( arguments.length < 3 ) | ||
299 | return; | ||
300 | |||
301 | initPrivateObject.call( this, elementDefinition ); | ||
302 | var me = this, | ||
303 | domId = this._.inputId = CKEDITOR.tools.getNextId() + '_textarea', | ||
304 | attributes = {}; | ||
305 | |||
306 | if ( elementDefinition.validate ) | ||
307 | this.validate = elementDefinition.validate; | ||
308 | |||
309 | // Generates the essential attributes for the textarea tag. | ||
310 | attributes.rows = elementDefinition.rows || 5; | ||
311 | attributes.cols = elementDefinition.cols || 20; | ||
312 | |||
313 | attributes[ 'class' ] = 'cke_dialog_ui_input_textarea ' + ( elementDefinition[ 'class' ] || '' ); | ||
314 | |||
315 | if ( typeof elementDefinition.inputStyle != 'undefined' ) | ||
316 | attributes.style = elementDefinition.inputStyle; | ||
317 | |||
318 | if ( elementDefinition.dir ) | ||
319 | attributes.dir = elementDefinition.dir; | ||
320 | |||
321 | if ( me.bidi ) { | ||
322 | dialog.on( 'load', function() { | ||
323 | me.getInputElement().on( 'keyup', toggleBidiKeyUpHandler ); | ||
324 | }, me ); | ||
325 | } | ||
326 | |||
327 | var innerHTML = function() { | ||
328 | attributes[ 'aria-labelledby' ] = this._.labelId; | ||
329 | this._.required && ( attributes[ 'aria-required' ] = this._.required ); | ||
330 | var html = [ '<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="', domId, '" ' ]; | ||
331 | for ( var i in attributes ) | ||
332 | html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[ i ] ) + '" ' ); | ||
333 | html.push( '>', CKEDITOR.tools.htmlEncode( me._[ 'default' ] ), '</textarea></div>' ); | ||
334 | return html.join( '' ); | ||
335 | }; | ||
336 | CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); | ||
337 | }, | ||
338 | |||
339 | /** | ||
340 | * A single checkbox with a label on the right. | ||
341 | * | ||
342 | * @class CKEDITOR.ui.dialog.checkbox | ||
343 | * @extends CKEDITOR.ui.dialog.uiElement | ||
344 | * @constructor Creates a checkbox class instance. | ||
345 | * @param {CKEDITOR.dialog} dialog Parent dialog window object. | ||
346 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
347 | * The element definition. Accepted fields: | ||
348 | * | ||
349 | * * `checked` (Optional) Whether the checkbox is checked | ||
350 | * on instantiation. Defaults to `false`. | ||
351 | * * `validate` (Optional) The validation function. | ||
352 | * * `label` (Optional) The checkbox label. | ||
353 | * | ||
354 | * @param {Array} htmlList List of HTML code to output to. | ||
355 | */ | ||
356 | checkbox: function( dialog, elementDefinition, htmlList ) { | ||
357 | if ( arguments.length < 3 ) | ||
358 | return; | ||
359 | |||
360 | var _ = initPrivateObject.call( this, elementDefinition, { 'default': !!elementDefinition[ 'default' ] } ); | ||
361 | |||
362 | if ( elementDefinition.validate ) | ||
363 | this.validate = elementDefinition.validate; | ||
364 | |||
365 | var innerHTML = function() { | ||
366 | var myDefinition = CKEDITOR.tools.extend( | ||
367 | {}, | ||
368 | elementDefinition, | ||
369 | { | ||
370 | id: elementDefinition.id ? elementDefinition.id + '_checkbox' : CKEDITOR.tools.getNextId() + '_checkbox' | ||
371 | }, | ||
372 | true | ||
373 | ), | ||
374 | html = []; | ||
375 | |||
376 | var labelId = CKEDITOR.tools.getNextId() + '_label'; | ||
377 | var attributes = { 'class': 'cke_dialog_ui_checkbox_input', type: 'checkbox', 'aria-labelledby': labelId }; | ||
378 | cleanInnerDefinition( myDefinition ); | ||
379 | if ( elementDefinition[ 'default' ] ) | ||
380 | attributes.checked = 'checked'; | ||
381 | |||
382 | if ( typeof myDefinition.inputStyle != 'undefined' ) | ||
383 | myDefinition.style = myDefinition.inputStyle; | ||
384 | |||
385 | _.checkbox = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'input', null, attributes ); | ||
386 | html.push( | ||
387 | ' <label id="', | ||
388 | labelId, | ||
389 | '" for="', | ||
390 | attributes.id, | ||
391 | '"' + ( elementDefinition.labelStyle ? ' style="' + elementDefinition.labelStyle + '"' : '' ) + '>', | ||
392 | CKEDITOR.tools.htmlEncode( elementDefinition.label ), | ||
393 | '</label>' | ||
394 | ); | ||
395 | return html.join( '' ); | ||
396 | }; | ||
397 | |||
398 | CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'span', null, null, innerHTML ); | ||
399 | }, | ||
400 | |||
401 | /** | ||
402 | * A group of radio buttons. | ||
403 | * | ||
404 | * @class CKEDITOR.ui.dialog.radio | ||
405 | * @extends CKEDITOR.ui.dialog.labeledElement | ||
406 | * @constructor Creates a radio class instance. | ||
407 | * @param {CKEDITOR.dialog} dialog Parent dialog window object. | ||
408 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
409 | * The element definition. Accepted fields: | ||
410 | * | ||
411 | * * `default` (Required) The default value. | ||
412 | * * `validate` (Optional) The validation function. | ||
413 | * * `items` (Required) An array of options. Each option | ||
414 | * is a one- or two-item array of format `[ 'Description', 'Value' ]`. If `'Value'` | ||
415 | * is missing, then the value would be assumed to be the same as the description. | ||
416 | * | ||
417 | * @param {Array} htmlList List of HTML code to output to. | ||
418 | */ | ||
419 | radio: function( dialog, elementDefinition, htmlList ) { | ||
420 | if ( arguments.length < 3 ) | ||
421 | return; | ||
422 | |||
423 | initPrivateObject.call( this, elementDefinition ); | ||
424 | |||
425 | if ( !this._[ 'default' ] ) | ||
426 | this._[ 'default' ] = this._.initValue = elementDefinition.items[ 0 ][ 1 ]; | ||
427 | |||
428 | if ( elementDefinition.validate ) | ||
429 | this.validate = elementDefinition.validate; | ||
430 | |||
431 | var children = [], | ||
432 | me = this; | ||
433 | |||
434 | var innerHTML = function() { | ||
435 | var inputHtmlList = [], | ||
436 | html = [], | ||
437 | commonName = ( elementDefinition.id ? elementDefinition.id : CKEDITOR.tools.getNextId() ) + '_radio'; | ||
438 | |||
439 | for ( var i = 0; i < elementDefinition.items.length; i++ ) { | ||
440 | var item = elementDefinition.items[ i ], | ||
441 | title = item[ 2 ] !== undefined ? item[ 2 ] : item[ 0 ], | ||
442 | value = item[ 1 ] !== undefined ? item[ 1 ] : item[ 0 ], | ||
443 | inputId = CKEDITOR.tools.getNextId() + '_radio_input', | ||
444 | labelId = inputId + '_label', | ||
445 | |||
446 | inputDefinition = CKEDITOR.tools.extend( {}, elementDefinition, { | ||
447 | id: inputId, | ||
448 | title: null, | ||
449 | type: null | ||
450 | }, true ), | ||
451 | |||
452 | labelDefinition = CKEDITOR.tools.extend( {}, inputDefinition, { | ||
453 | title: title | ||
454 | }, true ), | ||
455 | |||
456 | inputAttributes = { | ||
457 | type: 'radio', | ||
458 | 'class': 'cke_dialog_ui_radio_input', | ||
459 | name: commonName, | ||
460 | value: value, | ||
461 | 'aria-labelledby': labelId | ||
462 | }, | ||
463 | |||
464 | inputHtml = []; | ||
465 | |||
466 | if ( me._[ 'default' ] == value ) | ||
467 | inputAttributes.checked = 'checked'; | ||
468 | |||
469 | cleanInnerDefinition( inputDefinition ); | ||
470 | cleanInnerDefinition( labelDefinition ); | ||
471 | |||
472 | if ( typeof inputDefinition.inputStyle != 'undefined' ) | ||
473 | inputDefinition.style = inputDefinition.inputStyle; | ||
474 | |||
475 | // Make inputs of radio type focusable (#10866). | ||
476 | inputDefinition.keyboardFocusable = true; | ||
477 | |||
478 | children.push( new CKEDITOR.ui.dialog.uiElement( dialog, inputDefinition, inputHtml, 'input', null, inputAttributes ) ); | ||
479 | |||
480 | inputHtml.push( ' ' ); | ||
481 | |||
482 | new CKEDITOR.ui.dialog.uiElement( dialog, labelDefinition, inputHtml, 'label', null, { | ||
483 | id: labelId, | ||
484 | 'for': inputAttributes.id | ||
485 | }, item[ 0 ] ); | ||
486 | |||
487 | inputHtmlList.push( inputHtml.join( '' ) ); | ||
488 | } | ||
489 | |||
490 | new CKEDITOR.ui.dialog.hbox( dialog, children, inputHtmlList, html ); | ||
491 | |||
492 | return html.join( '' ); | ||
493 | }; | ||
494 | |||
495 | // Adding a role="radiogroup" to definition used for wrapper. | ||
496 | elementDefinition.role = 'radiogroup'; | ||
497 | elementDefinition.includeLabel = true; | ||
498 | |||
499 | CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); | ||
500 | this._.children = children; | ||
501 | }, | ||
502 | |||
503 | /** | ||
504 | * A button with a label inside. | ||
505 | * | ||
506 | * @class CKEDITOR.ui.dialog.button | ||
507 | * @extends CKEDITOR.ui.dialog.uiElement | ||
508 | * @constructor Creates a button class instance. | ||
509 | * @param {CKEDITOR.dialog} dialog Parent dialog window object. | ||
510 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
511 | * The element definition. Accepted fields: | ||
512 | * | ||
513 | * * `label` (Required) The button label. | ||
514 | * * `disabled` (Optional) Set to `true` if you want the | ||
515 | * button to appear in the disabled state. | ||
516 | * | ||
517 | * @param {Array} htmlList List of HTML code to output to. | ||
518 | */ | ||
519 | button: function( dialog, elementDefinition, htmlList ) { | ||
520 | if ( !arguments.length ) | ||
521 | return; | ||
522 | |||
523 | if ( typeof elementDefinition == 'function' ) | ||
524 | elementDefinition = elementDefinition( dialog.getParentEditor() ); | ||
525 | |||
526 | initPrivateObject.call( this, elementDefinition, { disabled: elementDefinition.disabled || false } ); | ||
527 | |||
528 | // Add OnClick event to this input. | ||
529 | CKEDITOR.event.implementOn( this ); | ||
530 | |||
531 | var me = this; | ||
532 | |||
533 | // Register an event handler for processing button clicks. | ||
534 | dialog.on( 'load', function() { | ||
535 | var element = this.getElement(); | ||
536 | |||
537 | ( function() { | ||
538 | element.on( 'click', function( evt ) { | ||
539 | me.click(); | ||
540 | // #9958 | ||
541 | evt.data.preventDefault(); | ||
542 | } ); | ||
543 | |||
544 | element.on( 'keydown', function( evt ) { | ||
545 | if ( evt.data.getKeystroke() in { 32: 1 } ) { | ||
546 | me.click(); | ||
547 | evt.data.preventDefault(); | ||
548 | } | ||
549 | } ); | ||
550 | } )(); | ||
551 | |||
552 | element.unselectable(); | ||
553 | }, this ); | ||
554 | |||
555 | var outerDefinition = CKEDITOR.tools.extend( {}, elementDefinition ); | ||
556 | delete outerDefinition.style; | ||
557 | |||
558 | var labelId = CKEDITOR.tools.getNextId() + '_label'; | ||
559 | CKEDITOR.ui.dialog.uiElement.call( this, dialog, outerDefinition, htmlList, 'a', null, { | ||
560 | style: elementDefinition.style, | ||
561 | href: 'javascript:void(0)', // jshint ignore:line | ||
562 | title: elementDefinition.label, | ||
563 | hidefocus: 'true', | ||
564 | 'class': elementDefinition[ 'class' ], | ||
565 | role: 'button', | ||
566 | 'aria-labelledby': labelId | ||
567 | }, '<span id="' + labelId + '" class="cke_dialog_ui_button">' + | ||
568 | CKEDITOR.tools.htmlEncode( elementDefinition.label ) + | ||
569 | '</span>' ); | ||
570 | }, | ||
571 | |||
572 | /** | ||
573 | * A select box. | ||
574 | * | ||
575 | * @class CKEDITOR.ui.dialog.select | ||
576 | * @extends CKEDITOR.ui.dialog.uiElement | ||
577 | * @constructor Creates a button class instance. | ||
578 | * @param {CKEDITOR.dialog} dialog Parent dialog window object. | ||
579 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
580 | * The element definition. Accepted fields: | ||
581 | * | ||
582 | * * `default` (Required) The default value. | ||
583 | * * `validate` (Optional) The validation function. | ||
584 | * * `items` (Required) An array of options. Each option | ||
585 | * is a one- or two-item array of format `[ 'Description', 'Value' ]`. If `'Value'` | ||
586 | * is missing, then the value would be assumed to be the same as the | ||
587 | * description. | ||
588 | * * `multiple` (Optional) Set this to `true` if you would like | ||
589 | * to have a multiple-choice select box. | ||
590 | * * `size` (Optional) The number of items to display in | ||
591 | * the select box. | ||
592 | * | ||
593 | * @param {Array} htmlList List of HTML code to output to. | ||
594 | */ | ||
595 | select: function( dialog, elementDefinition, htmlList ) { | ||
596 | if ( arguments.length < 3 ) | ||
597 | return; | ||
598 | |||
599 | var _ = initPrivateObject.call( this, elementDefinition ); | ||
600 | |||
601 | if ( elementDefinition.validate ) | ||
602 | this.validate = elementDefinition.validate; | ||
603 | |||
604 | _.inputId = CKEDITOR.tools.getNextId() + '_select'; | ||
605 | |||
606 | var innerHTML = function() { | ||
607 | var myDefinition = CKEDITOR.tools.extend( | ||
608 | {}, | ||
609 | elementDefinition, | ||
610 | { | ||
611 | id: ( elementDefinition.id ? elementDefinition.id + '_select' : CKEDITOR.tools.getNextId() + '_select' ) | ||
612 | }, | ||
613 | true | ||
614 | ), | ||
615 | html = [], | ||
616 | innerHTML = [], | ||
617 | attributes = { 'id': _.inputId, 'class': 'cke_dialog_ui_input_select', 'aria-labelledby': this._.labelId }; | ||
618 | |||
619 | html.push( '<div class="cke_dialog_ui_input_', elementDefinition.type, '" role="presentation"' ); | ||
620 | if ( elementDefinition.width ) | ||
621 | html.push( 'style="width:' + elementDefinition.width + '" ' ); | ||
622 | html.push( '>' ); | ||
623 | |||
624 | // Add multiple and size attributes from element definition. | ||
625 | if ( elementDefinition.size !== undefined ) | ||
626 | attributes.size = elementDefinition.size; | ||
627 | if ( elementDefinition.multiple !== undefined ) | ||
628 | attributes.multiple = elementDefinition.multiple; | ||
629 | |||
630 | cleanInnerDefinition( myDefinition ); | ||
631 | for ( var i = 0, item; i < elementDefinition.items.length && ( item = elementDefinition.items[ i ] ); i++ ) { | ||
632 | innerHTML.push( '<option value="', CKEDITOR.tools.htmlEncode( item[ 1 ] !== undefined ? item[ 1 ] : item[ 0 ] ).replace( /"/g, '"' ), '" /> ', CKEDITOR.tools.htmlEncode( item[ 0 ] ) ); | ||
633 | } | ||
634 | |||
635 | if ( typeof myDefinition.inputStyle != 'undefined' ) | ||
636 | myDefinition.style = myDefinition.inputStyle; | ||
637 | |||
638 | _.select = new CKEDITOR.ui.dialog.uiElement( dialog, myDefinition, html, 'select', null, attributes, innerHTML.join( '' ) ); | ||
639 | |||
640 | html.push( '</div>' ); | ||
641 | |||
642 | return html.join( '' ); | ||
643 | }; | ||
644 | |||
645 | CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); | ||
646 | }, | ||
647 | |||
648 | /** | ||
649 | * A file upload input. | ||
650 | * | ||
651 | * @class CKEDITOR.ui.dialog.file | ||
652 | * @extends CKEDITOR.ui.dialog.labeledElement | ||
653 | * @constructor Creates a file class instance. | ||
654 | * @param {CKEDITOR.dialog} dialog Parent dialog window object. | ||
655 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
656 | * The element definition. Accepted fields: | ||
657 | * | ||
658 | * * `validate` (Optional) The validation function. | ||
659 | * | ||
660 | * @param {Array} htmlList List of HTML code to output to. | ||
661 | */ | ||
662 | file: function( dialog, elementDefinition, htmlList ) { | ||
663 | if ( arguments.length < 3 ) | ||
664 | return; | ||
665 | |||
666 | if ( elementDefinition[ 'default' ] === undefined ) | ||
667 | elementDefinition[ 'default' ] = ''; | ||
668 | |||
669 | var _ = CKEDITOR.tools.extend( initPrivateObject.call( this, elementDefinition ), { definition: elementDefinition, buttons: [] } ); | ||
670 | |||
671 | if ( elementDefinition.validate ) | ||
672 | this.validate = elementDefinition.validate; | ||
673 | |||
674 | /** @ignore */ | ||
675 | var innerHTML = function() { | ||
676 | _.frameId = CKEDITOR.tools.getNextId() + '_fileInput'; | ||
677 | |||
678 | var html = [ | ||
679 | '<iframe' + | ||
680 | ' frameborder="0"' + | ||
681 | ' allowtransparency="0"' + | ||
682 | ' class="cke_dialog_ui_input_file"' + | ||
683 | ' role="presentation"' + | ||
684 | ' id="', _.frameId, '"' + | ||
685 | ' title="', elementDefinition.label, '"' + | ||
686 | ' src="javascript:void(' | ||
687 | ]; | ||
688 | |||
689 | // Support for custom document.domain on IE. (#10165) | ||
690 | html.push( CKEDITOR.env.ie ? | ||
691 | '(function(){' + encodeURIComponent( | ||
692 | 'document.open();' + | ||
693 | '(' + CKEDITOR.tools.fixDomain + ')();' + | ||
694 | 'document.close();' | ||
695 | ) + '})()' | ||
696 | : | ||
697 | '0' | ||
698 | ); | ||
699 | |||
700 | html.push( ')"></iframe>' ); | ||
701 | |||
702 | return html.join( '' ); | ||
703 | }; | ||
704 | |||
705 | // IE BUG: Parent container does not resize to contain the iframe automatically. | ||
706 | dialog.on( 'load', function() { | ||
707 | var iframe = CKEDITOR.document.getById( _.frameId ), | ||
708 | contentDiv = iframe.getParent(); | ||
709 | contentDiv.addClass( 'cke_dialog_ui_input_file' ); | ||
710 | } ); | ||
711 | |||
712 | CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML ); | ||
713 | }, | ||
714 | |||
715 | /** | ||
716 | * A button for submitting the file in a file upload input. | ||
717 | * | ||
718 | * @class CKEDITOR.ui.dialog.fileButton | ||
719 | * @extends CKEDITOR.ui.dialog.button | ||
720 | * @constructor Creates a fileButton class instance. | ||
721 | * @param {CKEDITOR.dialog} dialog Parent dialog window object. | ||
722 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
723 | * The element definition. Accepted fields: | ||
724 | * | ||
725 | * * `for` (Required) The file input's page and element ID | ||
726 | * to associate with, in a two-item array format: `[ 'page_id', 'element_id' ]`. | ||
727 | * * `validate` (Optional) The validation function. | ||
728 | * | ||
729 | * @param {Array} htmlList List of HTML code to output to. | ||
730 | */ | ||
731 | fileButton: function( dialog, elementDefinition, htmlList ) { | ||
732 | var me = this; | ||
733 | if ( arguments.length < 3 ) | ||
734 | return; | ||
735 | |||
736 | initPrivateObject.call( this, elementDefinition ); | ||
737 | |||
738 | if ( elementDefinition.validate ) | ||
739 | this.validate = elementDefinition.validate; | ||
740 | |||
741 | var myDefinition = CKEDITOR.tools.extend( {}, elementDefinition ); | ||
742 | var onClick = myDefinition.onClick; | ||
743 | myDefinition.className = ( myDefinition.className ? myDefinition.className + ' ' : '' ) + 'cke_dialog_ui_button'; | ||
744 | myDefinition.onClick = function( evt ) { | ||
745 | var target = elementDefinition[ 'for' ]; // [ pageId, elementId ] | ||
746 | if ( !onClick || onClick.call( this, evt ) !== false ) { | ||
747 | dialog.getContentElement( target[ 0 ], target[ 1 ] ).submit(); | ||
748 | this.disable(); | ||
749 | } | ||
750 | }; | ||
751 | |||
752 | dialog.on( 'load', function() { | ||
753 | dialog.getContentElement( elementDefinition[ 'for' ][ 0 ], elementDefinition[ 'for' ][ 1 ] )._.buttons.push( me ); | ||
754 | } ); | ||
755 | |||
756 | CKEDITOR.ui.dialog.button.call( this, dialog, myDefinition, htmlList ); | ||
757 | }, | ||
758 | |||
759 | html: ( function() { | ||
760 | var myHtmlRe = /^\s*<[\w:]+\s+([^>]*)?>/, | ||
761 | theirHtmlRe = /^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/, | ||
762 | emptyTagRe = /\/$/; | ||
763 | /** | ||
764 | * A dialog window element made from raw HTML code. | ||
765 | * | ||
766 | * @class CKEDITOR.ui.dialog.html | ||
767 | * @extends CKEDITOR.ui.dialog.uiElement | ||
768 | * @constructor Creates a html class instance. | ||
769 | * @param {CKEDITOR.dialog} dialog Parent dialog window object. | ||
770 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element definition. | ||
771 | * Accepted fields: | ||
772 | * | ||
773 | * * `html` (Required) HTML code of this element. | ||
774 | * | ||
775 | * @param {Array} htmlList List of HTML code to be added to the dialog's content area. | ||
776 | */ | ||
777 | return function( dialog, elementDefinition, htmlList ) { | ||
778 | if ( arguments.length < 3 ) | ||
779 | return; | ||
780 | |||
781 | var myHtmlList = [], | ||
782 | myHtml, | ||
783 | theirHtml = elementDefinition.html, | ||
784 | myMatch, theirMatch; | ||
785 | |||
786 | // If the HTML input doesn't contain any tags at the beginning, add a <span> tag around it. | ||
787 | if ( theirHtml.charAt( 0 ) != '<' ) | ||
788 | theirHtml = '<span>' + theirHtml + '</span>'; | ||
789 | |||
790 | // Look for focus function in definition. | ||
791 | var focus = elementDefinition.focus; | ||
792 | if ( focus ) { | ||
793 | var oldFocus = this.focus; | ||
794 | this.focus = function() { | ||
795 | ( typeof focus == 'function' ? focus : oldFocus ).call( this ); | ||
796 | this.fire( 'focus' ); | ||
797 | }; | ||
798 | if ( elementDefinition.isFocusable ) { | ||
799 | var oldIsFocusable = this.isFocusable; | ||
800 | this.isFocusable = oldIsFocusable; | ||
801 | } | ||
802 | this.keyboardFocusable = true; | ||
803 | } | ||
804 | |||
805 | CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, myHtmlList, 'span', null, null, '' ); | ||
806 | |||
807 | // Append the attributes created by the uiElement call to the real HTML. | ||
808 | myHtml = myHtmlList.join( '' ); | ||
809 | myMatch = myHtml.match( myHtmlRe ); | ||
810 | theirMatch = theirHtml.match( theirHtmlRe ) || [ '', '', '' ]; | ||
811 | |||
812 | if ( emptyTagRe.test( theirMatch[ 1 ] ) ) { | ||
813 | theirMatch[ 1 ] = theirMatch[ 1 ].slice( 0, -1 ); | ||
814 | theirMatch[ 2 ] = '/' + theirMatch[ 2 ]; | ||
815 | } | ||
816 | |||
817 | htmlList.push( [ theirMatch[ 1 ], ' ', myMatch[ 1 ] || '', theirMatch[ 2 ] ].join( '' ) ); | ||
818 | }; | ||
819 | } )(), | ||
820 | |||
821 | /** | ||
822 | * Form fieldset for grouping dialog UI elements. | ||
823 | * | ||
824 | * @class CKEDITOR.ui.dialog.fieldset | ||
825 | * @extends CKEDITOR.ui.dialog.uiElement | ||
826 | * @constructor Creates a fieldset class instance. | ||
827 | * @param {CKEDITOR.dialog} dialog Parent dialog window object. | ||
828 | * @param {Array} childObjList | ||
829 | * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container. | ||
830 | * @param {Array} childHtmlList Array of HTML code that corresponds to the HTML output of all the | ||
831 | * objects in childObjList. | ||
832 | * @param {Array} htmlList Array of HTML code that this element will output to. | ||
833 | * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition | ||
834 | * The element definition. Accepted fields: | ||
835 | * | ||
836 | * * `label` (Optional) The legend of the this fieldset. | ||
837 | * * `children` (Required) An array of dialog window field definitions which will be grouped inside this fieldset. | ||
838 | * | ||
839 | */ | ||
840 | fieldset: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) { | ||
841 | var legendLabel = elementDefinition.label; | ||
842 | /** @ignore */ | ||
843 | var innerHTML = function() { | ||
844 | var html = []; | ||
845 | legendLabel && html.push( '<legend' + | ||
846 | ( elementDefinition.labelStyle ? ' style="' + elementDefinition.labelStyle + '"' : '' ) + | ||
847 | '>' + legendLabel + '</legend>' ); | ||
848 | for ( var i = 0; i < childHtmlList.length; i++ ) | ||
849 | html.push( childHtmlList[ i ] ); | ||
850 | return html.join( '' ); | ||
851 | }; | ||
852 | |||
853 | this._ = { children: childObjList }; | ||
854 | CKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'fieldset', null, null, innerHTML ); | ||
855 | } | ||
856 | |||
857 | }, true ); | ||
858 | |||
859 | CKEDITOR.ui.dialog.html.prototype = new CKEDITOR.ui.dialog.uiElement(); | ||
860 | |||
861 | /** @class CKEDITOR.ui.dialog.labeledElement */ | ||
862 | CKEDITOR.ui.dialog.labeledElement.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), { | ||
863 | /** | ||
864 | * Sets the label text of the element. | ||
865 | * | ||
866 | * @param {String} label The new label text. | ||
867 | * @returns {CKEDITOR.ui.dialog.labeledElement} The current labeled element. | ||
868 | */ | ||
869 | setLabel: function( label ) { | ||
870 | var node = CKEDITOR.document.getById( this._.labelId ); | ||
871 | if ( node.getChildCount() < 1 ) | ||
872 | ( new CKEDITOR.dom.text( label, CKEDITOR.document ) ).appendTo( node ); | ||
873 | else | ||
874 | node.getChild( 0 ).$.nodeValue = label; | ||
875 | return this; | ||
876 | }, | ||
877 | |||
878 | /** | ||
879 | * Retrieves the current label text of the elment. | ||
880 | * | ||
881 | * @returns {String} The current label text. | ||
882 | */ | ||
883 | getLabel: function() { | ||
884 | var node = CKEDITOR.document.getById( this._.labelId ); | ||
885 | if ( !node || node.getChildCount() < 1 ) | ||
886 | return ''; | ||
887 | else | ||
888 | return node.getChild( 0 ).getText(); | ||
889 | }, | ||
890 | |||
891 | /** | ||
892 | * Defines the `onChange` event for UI element definitions. | ||
893 | * @property {Object} | ||
894 | */ | ||
895 | eventProcessors: commonEventProcessors | ||
896 | }, true ); | ||
897 | |||
898 | /** @class CKEDITOR.ui.dialog.button */ | ||
899 | CKEDITOR.ui.dialog.button.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), { | ||
900 | /** | ||
901 | * Simulates a click to the button. | ||
902 | * | ||
903 | * @returns {Object} Return value of the `click` event. | ||
904 | */ | ||
905 | click: function() { | ||
906 | if ( !this._.disabled ) | ||
907 | return this.fire( 'click', { dialog: this._.dialog } ); | ||
908 | return false; | ||
909 | }, | ||
910 | |||
911 | /** | ||
912 | * Enables the button. | ||
913 | */ | ||
914 | enable: function() { | ||
915 | this._.disabled = false; | ||
916 | var element = this.getElement(); | ||
917 | element && element.removeClass( 'cke_disabled' ); | ||
918 | }, | ||
919 | |||
920 | /** | ||
921 | * Disables the button. | ||
922 | */ | ||
923 | disable: function() { | ||
924 | this._.disabled = true; | ||
925 | this.getElement().addClass( 'cke_disabled' ); | ||
926 | }, | ||
927 | |||
928 | /** | ||
929 | * Checks whether a field is visible. | ||
930 | * | ||
931 | * @returns {Boolean} | ||
932 | */ | ||
933 | isVisible: function() { | ||
934 | return this.getElement().getFirst().isVisible(); | ||
935 | }, | ||
936 | |||
937 | /** | ||
938 | * Checks whether a field is enabled. Fields can be disabled by using the | ||
939 | * {@link #disable} method and enabled by using the {@link #enable} method. | ||
940 | * | ||
941 | * @returns {Boolean} | ||
942 | */ | ||
943 | isEnabled: function() { | ||
944 | return !this._.disabled; | ||
945 | }, | ||
946 | |||
947 | /** | ||
948 | * Defines the `onChange` event and `onClick` for button element definitions. | ||
949 | * | ||
950 | * @property {Object} | ||
951 | */ | ||
952 | eventProcessors: CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, { | ||
953 | onClick: function( dialog, func ) { | ||
954 | this.on( 'click', function() { | ||
955 | func.apply( this, arguments ); | ||
956 | } ); | ||
957 | } | ||
958 | }, true ), | ||
959 | |||
960 | /** | ||
961 | * Handler for the element's access key up event. Simulates a click to | ||
962 | * the button. | ||
963 | */ | ||
964 | accessKeyUp: function() { | ||
965 | this.click(); | ||
966 | }, | ||
967 | |||
968 | /** | ||
969 | * Handler for the element's access key down event. Simulates a mouse | ||
970 | * down to the button. | ||
971 | */ | ||
972 | accessKeyDown: function() { | ||
973 | this.focus(); | ||
974 | }, | ||
975 | |||
976 | keyboardFocusable: true | ||
977 | }, true ); | ||
978 | |||
979 | /** @class CKEDITOR.ui.dialog.textInput */ | ||
980 | CKEDITOR.ui.dialog.textInput.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement(), { | ||
981 | /** | ||
982 | * Gets the text input DOM element under this UI object. | ||
983 | * | ||
984 | * @returns {CKEDITOR.dom.element} The DOM element of the text input. | ||
985 | */ | ||
986 | getInputElement: function() { | ||
987 | return CKEDITOR.document.getById( this._.inputId ); | ||
988 | }, | ||
989 | |||
990 | /** | ||
991 | * Puts focus into the text input. | ||
992 | */ | ||
993 | focus: function() { | ||
994 | var me = this.selectParentTab(); | ||
995 | |||
996 | // GECKO BUG: setTimeout() is needed to workaround invisible selections. | ||
997 | setTimeout( function() { | ||
998 | var element = me.getInputElement(); | ||
999 | element && element.$.focus(); | ||
1000 | }, 0 ); | ||
1001 | }, | ||
1002 | |||
1003 | /** | ||
1004 | * Selects all the text in the text input. | ||
1005 | */ | ||
1006 | select: function() { | ||
1007 | var me = this.selectParentTab(); | ||
1008 | |||
1009 | // GECKO BUG: setTimeout() is needed to workaround invisible selections. | ||
1010 | setTimeout( function() { | ||
1011 | var e = me.getInputElement(); | ||
1012 | if ( e ) { | ||
1013 | e.$.focus(); | ||
1014 | e.$.select(); | ||
1015 | } | ||
1016 | }, 0 ); | ||
1017 | }, | ||
1018 | |||
1019 | /** | ||
1020 | * Handler for the text input's access key up event. Makes a `select()` | ||
1021 | * call to the text input. | ||
1022 | */ | ||
1023 | accessKeyUp: function() { | ||
1024 | this.select(); | ||
1025 | }, | ||
1026 | |||
1027 | /** | ||
1028 | * Sets the value of this text input object. | ||
1029 | * | ||
1030 | * uiElement.setValue( 'Blamo' ); | ||
1031 | * | ||
1032 | * @param {Object} value The new value. | ||
1033 | * @returns {CKEDITOR.ui.dialog.textInput} The current UI element. | ||
1034 | */ | ||
1035 | setValue: function( value ) { | ||
1036 | if ( this.bidi ) { | ||
1037 | var marker = value && value.charAt( 0 ), | ||
1038 | dir = ( marker == '\u202A' ? 'ltr' : marker == '\u202B' ? 'rtl' : null ); | ||
1039 | |||
1040 | if ( dir ) { | ||
1041 | value = value.slice( 1 ); | ||
1042 | } | ||
1043 | |||
1044 | // Set the marker or reset it (if dir==null). | ||
1045 | this.setDirectionMarker( dir ); | ||
1046 | } | ||
1047 | |||
1048 | if ( !value ) { | ||
1049 | value = ''; | ||
1050 | } | ||
1051 | |||
1052 | return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply( this, arguments ); | ||
1053 | }, | ||
1054 | |||
1055 | /** | ||
1056 | * Gets the value of this text input object. | ||
1057 | * | ||
1058 | * @returns {String} The value. | ||
1059 | */ | ||
1060 | getValue: function() { | ||
1061 | var value = CKEDITOR.ui.dialog.uiElement.prototype.getValue.call( this ); | ||
1062 | |||
1063 | if ( this.bidi && value ) { | ||
1064 | var dir = this.getDirectionMarker(); | ||
1065 | if ( dir ) { | ||
1066 | value = ( dir == 'ltr' ? '\u202A' : '\u202B' ) + value; | ||
1067 | } | ||
1068 | } | ||
1069 | |||
1070 | return value; | ||
1071 | }, | ||
1072 | |||
1073 | /** | ||
1074 | * Sets the text direction marker and the `dir` attribute of the input element. | ||
1075 | * | ||
1076 | * @since 4.5 | ||
1077 | * @param {String} dir The text direction. Pass `null` to reset. | ||
1078 | */ | ||
1079 | setDirectionMarker: function( dir ) { | ||
1080 | var inputElement = this.getInputElement(); | ||
1081 | |||
1082 | if ( dir ) { | ||
1083 | inputElement.setAttributes( { | ||
1084 | dir: dir, | ||
1085 | 'data-cke-dir-marker': dir | ||
1086 | } ); | ||
1087 | // Don't remove the dir attribute if this field hasn't got the marker, | ||
1088 | // because the dir attribute could be set independently. | ||
1089 | } else if ( this.getDirectionMarker() ) { | ||
1090 | inputElement.removeAttributes( [ 'dir', 'data-cke-dir-marker' ] ); | ||
1091 | } | ||
1092 | }, | ||
1093 | |||
1094 | /** | ||
1095 | * Gets the value of the text direction marker. | ||
1096 | * | ||
1097 | * @since 4.5 | ||
1098 | * @returns {String} `'ltr'`, `'rtl'` or `null` if the marker is not set. | ||
1099 | */ | ||
1100 | getDirectionMarker: function() { | ||
1101 | return this.getInputElement().data( 'cke-dir-marker' ); | ||
1102 | }, | ||
1103 | |||
1104 | keyboardFocusable: true | ||
1105 | }, commonPrototype, true ); | ||
1106 | |||
1107 | CKEDITOR.ui.dialog.textarea.prototype = new CKEDITOR.ui.dialog.textInput(); | ||
1108 | |||
1109 | /** @class CKEDITOR.ui.dialog.select */ | ||
1110 | CKEDITOR.ui.dialog.select.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement(), { | ||
1111 | /** | ||
1112 | * Gets the DOM element of the select box. | ||
1113 | * | ||
1114 | * @returns {CKEDITOR.dom.element} The `<select>` element of this UI element. | ||
1115 | */ | ||
1116 | getInputElement: function() { | ||
1117 | return this._.select.getElement(); | ||
1118 | }, | ||
1119 | |||
1120 | /** | ||
1121 | * Adds an option to the select box. | ||
1122 | * | ||
1123 | * @param {String} label Option label. | ||
1124 | * @param {String} value (Optional) Option value, if not defined it will be | ||
1125 | * assumed to be the same as the label. | ||
1126 | * @param {Number} index (Optional) Position of the option to be inserted | ||
1127 | * to. If not defined, the new option will be inserted to the end of list. | ||
1128 | * @returns {CKEDITOR.ui.dialog.select} The current select UI element. | ||
1129 | */ | ||
1130 | add: function( label, value, index ) { | ||
1131 | var option = new CKEDITOR.dom.element( 'option', this.getDialog().getParentEditor().document ), | ||
1132 | selectElement = this.getInputElement().$; | ||
1133 | option.$.text = label; | ||
1134 | option.$.value = ( value === undefined || value === null ) ? label : value; | ||
1135 | if ( index === undefined || index === null ) { | ||
1136 | if ( CKEDITOR.env.ie ) { | ||
1137 | selectElement.add( option.$ ); | ||
1138 | } else { | ||
1139 | selectElement.add( option.$, null ); | ||
1140 | } | ||
1141 | } else { | ||
1142 | selectElement.add( option.$, index ); | ||
1143 | } | ||
1144 | return this; | ||
1145 | }, | ||
1146 | |||
1147 | /** | ||
1148 | * Removes an option from the selection list. | ||
1149 | * | ||
1150 | * @param {Number} index Index of the option to be removed. | ||
1151 | * @returns {CKEDITOR.ui.dialog.select} The current select UI element. | ||
1152 | */ | ||
1153 | remove: function( index ) { | ||
1154 | var selectElement = this.getInputElement().$; | ||
1155 | selectElement.remove( index ); | ||
1156 | return this; | ||
1157 | }, | ||
1158 | |||
1159 | /** | ||
1160 | * Clears all options out of the selection list. | ||
1161 | * | ||
1162 | * @returns {CKEDITOR.ui.dialog.select} The current select UI element. | ||
1163 | */ | ||
1164 | clear: function() { | ||
1165 | var selectElement = this.getInputElement().$; | ||
1166 | while ( selectElement.length > 0 ) | ||
1167 | selectElement.remove( 0 ); | ||
1168 | return this; | ||
1169 | }, | ||
1170 | |||
1171 | keyboardFocusable: true | ||
1172 | }, commonPrototype, true ); | ||
1173 | |||
1174 | /** @class CKEDITOR.ui.dialog.checkbox */ | ||
1175 | CKEDITOR.ui.dialog.checkbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), { | ||
1176 | /** | ||
1177 | * Gets the checkbox DOM element. | ||
1178 | * | ||
1179 | * @returns {CKEDITOR.dom.element} The DOM element of the checkbox. | ||
1180 | */ | ||
1181 | getInputElement: function() { | ||
1182 | return this._.checkbox.getElement(); | ||
1183 | }, | ||
1184 | |||
1185 | /** | ||
1186 | * Sets the state of the checkbox. | ||
1187 | * | ||
1188 | * @param {Boolean} checked `true` to tick the checkbox, `false` to untick it. | ||
1189 | * @param {Boolean} noChangeEvent Internal commit, to supress `change` event on this element. | ||
1190 | */ | ||
1191 | setValue: function( checked, noChangeEvent ) { | ||
1192 | this.getInputElement().$.checked = checked; | ||
1193 | !noChangeEvent && this.fire( 'change', { value: checked } ); | ||
1194 | }, | ||
1195 | |||
1196 | /** | ||
1197 | * Gets the state of the checkbox. | ||
1198 | * | ||
1199 | * @returns {Boolean} `true` means that the checkbox is ticked, `false` means it is not ticked. | ||
1200 | */ | ||
1201 | getValue: function() { | ||
1202 | return this.getInputElement().$.checked; | ||
1203 | }, | ||
1204 | |||
1205 | /** | ||
1206 | * Handler for the access key up event. Toggles the checkbox. | ||
1207 | */ | ||
1208 | accessKeyUp: function() { | ||
1209 | this.setValue( !this.getValue() ); | ||
1210 | }, | ||
1211 | |||
1212 | /** | ||
1213 | * Defines the `onChange` event for UI element definitions. | ||
1214 | * | ||
1215 | * @property {Object} | ||
1216 | */ | ||
1217 | eventProcessors: { | ||
1218 | onChange: function( dialog, func ) { | ||
1219 | if ( !CKEDITOR.env.ie || ( CKEDITOR.env.version > 8 ) ) | ||
1220 | return commonEventProcessors.onChange.apply( this, arguments ); | ||
1221 | else { | ||
1222 | dialog.on( 'load', function() { | ||
1223 | var element = this._.checkbox.getElement(); | ||
1224 | element.on( 'propertychange', function( evt ) { | ||
1225 | evt = evt.data.$; | ||
1226 | if ( evt.propertyName == 'checked' ) | ||
1227 | this.fire( 'change', { value: element.$.checked } ); | ||
1228 | }, this ); | ||
1229 | }, this ); | ||
1230 | this.on( 'change', func ); | ||
1231 | } | ||
1232 | return null; | ||
1233 | } | ||
1234 | }, | ||
1235 | |||
1236 | keyboardFocusable: true | ||
1237 | }, commonPrototype, true ); | ||
1238 | |||
1239 | /** @class CKEDITOR.ui.dialog.radio */ | ||
1240 | CKEDITOR.ui.dialog.radio.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), { | ||
1241 | /** | ||
1242 | * Selects one of the radio buttons in this button group. | ||
1243 | * | ||
1244 | * @param {String} value The value of the button to be chcked. | ||
1245 | * @param {Boolean} noChangeEvent Internal commit, to supress the `change` event on this element. | ||
1246 | */ | ||
1247 | setValue: function( value, noChangeEvent ) { | ||
1248 | var children = this._.children, | ||
1249 | item; | ||
1250 | for ( var i = 0; | ||
1251 | ( i < children.length ) && ( item = children[ i ] ); i++ ) | ||
1252 | item.getElement().$.checked = ( item.getValue() == value ); | ||
1253 | !noChangeEvent && this.fire( 'change', { value: value } ); | ||
1254 | }, | ||
1255 | |||
1256 | /** | ||
1257 | * Gets the value of the currently selected radio button. | ||
1258 | * | ||
1259 | * @returns {String} The currently selected button's value. | ||
1260 | */ | ||
1261 | getValue: function() { | ||
1262 | var children = this._.children; | ||
1263 | for ( var i = 0; i < children.length; i++ ) { | ||
1264 | if ( children[ i ].getElement().$.checked ) | ||
1265 | return children[ i ].getValue(); | ||
1266 | } | ||
1267 | return null; | ||
1268 | }, | ||
1269 | |||
1270 | /** | ||
1271 | * Handler for the access key up event. Focuses the currently | ||
1272 | * selected radio button, or the first radio button if none is selected. | ||
1273 | */ | ||
1274 | accessKeyUp: function() { | ||
1275 | var children = this._.children, | ||
1276 | i; | ||
1277 | for ( i = 0; i < children.length; i++ ) { | ||
1278 | if ( children[ i ].getElement().$.checked ) { | ||
1279 | children[ i ].getElement().focus(); | ||
1280 | return; | ||
1281 | } | ||
1282 | } | ||
1283 | children[ 0 ].getElement().focus(); | ||
1284 | }, | ||
1285 | |||
1286 | /** | ||
1287 | * Defines the `onChange` event for UI element definitions. | ||
1288 | * | ||
1289 | * @property {Object} | ||
1290 | */ | ||
1291 | eventProcessors: { | ||
1292 | onChange: function( dialog, func ) { | ||
1293 | if ( !CKEDITOR.env.ie || ( CKEDITOR.env.version > 8 ) ) | ||
1294 | return commonEventProcessors.onChange.apply( this, arguments ); | ||
1295 | else { | ||
1296 | dialog.on( 'load', function() { | ||
1297 | var children = this._.children, | ||
1298 | me = this; | ||
1299 | for ( var i = 0; i < children.length; i++ ) { | ||
1300 | var element = children[ i ].getElement(); | ||
1301 | element.on( 'propertychange', function( evt ) { | ||
1302 | evt = evt.data.$; | ||
1303 | if ( evt.propertyName == 'checked' && this.$.checked ) | ||
1304 | me.fire( 'change', { value: this.getAttribute( 'value' ) } ); | ||
1305 | } ); | ||
1306 | } | ||
1307 | }, this ); | ||
1308 | this.on( 'change', func ); | ||
1309 | } | ||
1310 | return null; | ||
1311 | } | ||
1312 | } | ||
1313 | }, commonPrototype, true ); | ||
1314 | |||
1315 | /** @class CKEDITOR.ui.dialog.file */ | ||
1316 | CKEDITOR.ui.dialog.file.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement(), commonPrototype, { | ||
1317 | /** | ||
1318 | * Gets the `<input>` element of this file input. | ||
1319 | * | ||
1320 | * @returns {CKEDITOR.dom.element} The file input element. | ||
1321 | */ | ||
1322 | getInputElement: function() { | ||
1323 | var frameDocument = CKEDITOR.document.getById( this._.frameId ).getFrameDocument(); | ||
1324 | return frameDocument.$.forms.length > 0 ? new CKEDITOR.dom.element( frameDocument.$.forms[ 0 ].elements[ 0 ] ) : this.getElement(); | ||
1325 | }, | ||
1326 | |||
1327 | /** | ||
1328 | * Uploads the file in the file input. | ||
1329 | * | ||
1330 | * @returns {CKEDITOR.ui.dialog.file} This object. | ||
1331 | */ | ||
1332 | submit: function() { | ||
1333 | this.getInputElement().getParent().$.submit(); | ||
1334 | return this; | ||
1335 | }, | ||
1336 | |||
1337 | /** | ||
1338 | * Gets the action assigned to the form. | ||
1339 | * | ||
1340 | * @returns {String} The value of the action. | ||
1341 | */ | ||
1342 | getAction: function() { | ||
1343 | return this.getInputElement().getParent().$.action; | ||
1344 | }, | ||
1345 | |||
1346 | /** | ||
1347 | * The events must be applied to the inner input element, and | ||
1348 | * this must be done when the iframe and form have been loaded. | ||
1349 | */ | ||
1350 | registerEvents: function( definition ) { | ||
1351 | var regex = /^on([A-Z]\w+)/, | ||
1352 | match; | ||
1353 | |||
1354 | var registerDomEvent = function( uiElement, dialog, eventName, func ) { | ||
1355 | uiElement.on( 'formLoaded', function() { | ||
1356 | uiElement.getInputElement().on( eventName, func, uiElement ); | ||
1357 | } ); | ||
1358 | }; | ||
1359 | |||
1360 | for ( var i in definition ) { | ||
1361 | if ( !( match = i.match( regex ) ) ) | ||
1362 | continue; | ||
1363 | |||
1364 | if ( this.eventProcessors[ i ] ) | ||
1365 | this.eventProcessors[ i ].call( this, this._.dialog, definition[ i ] ); | ||
1366 | else | ||
1367 | registerDomEvent( this, this._.dialog, match[ 1 ].toLowerCase(), definition[ i ] ); | ||
1368 | } | ||
1369 | |||
1370 | return this; | ||
1371 | }, | ||
1372 | |||
1373 | /** | ||
1374 | * Redraws the file input and resets the file path in the file input. | ||
1375 | * The redrawing logic is necessary because non-IE browsers tend to clear | ||
1376 | * the `<iframe>` containing the file input after closing the dialog window. | ||
1377 | */ | ||
1378 | reset: function() { | ||
1379 | var _ = this._, | ||
1380 | frameElement = CKEDITOR.document.getById( _.frameId ), | ||
1381 | frameDocument = frameElement.getFrameDocument(), | ||
1382 | elementDefinition = _.definition, | ||
1383 | buttons = _.buttons, | ||
1384 | callNumber = this.formLoadedNumber, | ||
1385 | unloadNumber = this.formUnloadNumber, | ||
1386 | langDir = _.dialog._.editor.lang.dir, | ||
1387 | langCode = _.dialog._.editor.langCode; | ||
1388 | |||
1389 | // The callback function for the iframe, but we must call tools.addFunction only once | ||
1390 | // so we store the function number in this.formLoadedNumber | ||
1391 | if ( !callNumber ) { | ||
1392 | callNumber = this.formLoadedNumber = CKEDITOR.tools.addFunction( function() { | ||
1393 | // Now we can apply the events to the input type=file | ||
1394 | this.fire( 'formLoaded' ); | ||
1395 | }, this ); | ||
1396 | |||
1397 | // Remove listeners attached to the content of the iframe (the file input) | ||
1398 | unloadNumber = this.formUnloadNumber = CKEDITOR.tools.addFunction( function() { | ||
1399 | this.getInputElement().clearCustomData(); | ||
1400 | }, this ); | ||
1401 | |||
1402 | this.getDialog()._.editor.on( 'destroy', function() { | ||
1403 | CKEDITOR.tools.removeFunction( callNumber ); | ||
1404 | CKEDITOR.tools.removeFunction( unloadNumber ); | ||
1405 | } ); | ||
1406 | } | ||
1407 | |||
1408 | function generateFormField() { | ||
1409 | frameDocument.$.open(); | ||
1410 | |||
1411 | var size = ''; | ||
1412 | if ( elementDefinition.size ) | ||
1413 | size = elementDefinition.size - ( CKEDITOR.env.ie ? 7 : 0 ); // "Browse" button is bigger in IE. | ||
1414 | |||
1415 | var inputId = _.frameId + '_input'; | ||
1416 | |||
1417 | frameDocument.$.write( [ | ||
1418 | '<html dir="' + langDir + '" lang="' + langCode + '"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">', | ||
1419 | '<form enctype="multipart/form-data" method="POST" dir="' + langDir + '" lang="' + langCode + '" action="', | ||
1420 | CKEDITOR.tools.htmlEncode( elementDefinition.action ), | ||
1421 | '">', | ||
1422 | // Replicate the field label inside of iframe. | ||
1423 | '<label id="', _.labelId, '" for="', inputId, '" style="display:none">', | ||
1424 | CKEDITOR.tools.htmlEncode( elementDefinition.label ), | ||
1425 | '</label>', | ||
1426 | // Set width to make sure that input is not clipped by the iframe (#11253). | ||
1427 | '<input style="width:100%" id="', inputId, '" aria-labelledby="', _.labelId, '" type="file" name="', | ||
1428 | CKEDITOR.tools.htmlEncode( elementDefinition.id || 'cke_upload' ), | ||
1429 | '" size="', | ||
1430 | CKEDITOR.tools.htmlEncode( size > 0 ? size : '' ), | ||
1431 | '" />', | ||
1432 | '</form>', | ||
1433 | '</body></html>', | ||
1434 | '<script>', | ||
1435 | // Support for custom document.domain in IE. | ||
1436 | CKEDITOR.env.ie ? '(' + CKEDITOR.tools.fixDomain + ')();' : '', | ||
1437 | |||
1438 | 'window.parent.CKEDITOR.tools.callFunction(' + callNumber + ');', | ||
1439 | 'window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction(' + unloadNumber + ')}', | ||
1440 | '</script>' | ||
1441 | ].join( '' ) ); | ||
1442 | |||
1443 | frameDocument.$.close(); | ||
1444 | |||
1445 | for ( var i = 0; i < buttons.length; i++ ) | ||
1446 | buttons[ i ].enable(); | ||
1447 | } | ||
1448 | |||
1449 | // #3465: Wait for the browser to finish rendering the dialog first. | ||
1450 | if ( CKEDITOR.env.gecko ) | ||
1451 | setTimeout( generateFormField, 500 ); | ||
1452 | else | ||
1453 | generateFormField(); | ||
1454 | }, | ||
1455 | |||
1456 | getValue: function() { | ||
1457 | return this.getInputElement().$.value || ''; | ||
1458 | }, | ||
1459 | |||
1460 | /** | ||
1461 | * The default value of input `type="file"` is an empty string, but during the initialization | ||
1462 | * of this UI element, the iframe still is not ready so it cannot be read from that object. | ||
1463 | * Setting it manually prevents later issues with the current value (`''`) being different | ||
1464 | * than the initial value (undefined as it asked for `.value` of a div). | ||
1465 | */ | ||
1466 | setInitValue: function() { | ||
1467 | this._.initValue = ''; | ||
1468 | }, | ||
1469 | |||
1470 | /** | ||
1471 | * Defines the `onChange` event for UI element definitions. | ||
1472 | * | ||
1473 | * @property {Object} | ||
1474 | */ | ||
1475 | eventProcessors: { | ||
1476 | onChange: function( dialog, func ) { | ||
1477 | // If this method is called several times (I'm not sure about how this can happen but the default | ||
1478 | // onChange processor includes this protection) | ||
1479 | // In order to reapply to the new element, the property is deleted at the beggining of the registerEvents method | ||
1480 | if ( !this._.domOnChangeRegistered ) { | ||
1481 | // By listening for the formLoaded event, this handler will get reapplied when a new | ||
1482 | // form is created | ||
1483 | this.on( 'formLoaded', function() { | ||
1484 | this.getInputElement().on( 'change', function() { | ||
1485 | this.fire( 'change', { value: this.getValue() } ); | ||
1486 | }, this ); | ||
1487 | }, this ); | ||
1488 | this._.domOnChangeRegistered = true; | ||
1489 | } | ||
1490 | |||
1491 | this.on( 'change', func ); | ||
1492 | } | ||
1493 | }, | ||
1494 | |||
1495 | keyboardFocusable: true | ||
1496 | }, true ); | ||
1497 | |||
1498 | CKEDITOR.ui.dialog.fileButton.prototype = new CKEDITOR.ui.dialog.button(); | ||
1499 | |||
1500 | CKEDITOR.ui.dialog.fieldset.prototype = CKEDITOR.tools.clone( CKEDITOR.ui.dialog.hbox.prototype ); | ||
1501 | |||
1502 | CKEDITOR.dialog.addUIElement( 'text', textBuilder ); | ||
1503 | CKEDITOR.dialog.addUIElement( 'password', textBuilder ); | ||
1504 | CKEDITOR.dialog.addUIElement( 'textarea', commonBuilder ); | ||
1505 | CKEDITOR.dialog.addUIElement( 'checkbox', commonBuilder ); | ||
1506 | CKEDITOR.dialog.addUIElement( 'radio', commonBuilder ); | ||
1507 | CKEDITOR.dialog.addUIElement( 'button', commonBuilder ); | ||
1508 | CKEDITOR.dialog.addUIElement( 'select', commonBuilder ); | ||
1509 | CKEDITOR.dialog.addUIElement( 'file', commonBuilder ); | ||
1510 | CKEDITOR.dialog.addUIElement( 'fileButton', commonBuilder ); | ||
1511 | CKEDITOR.dialog.addUIElement( 'html', commonBuilder ); | ||
1512 | CKEDITOR.dialog.addUIElement( 'fieldset', containerBuilder ); | ||
1513 | } | ||
1514 | } ); | ||
1515 | |||
1516 | /** | ||
1517 | * Fired when the value of the uiElement is changed. | ||
1518 | * | ||
1519 | * @event change | ||
1520 | * @member CKEDITOR.ui.dialog.uiElement | ||
1521 | */ | ||
1522 | |||
1523 | /** | ||
1524 | * Fired when the inner frame created by the element is ready. | ||
1525 | * Each time the button is used or the dialog window is loaded, a new | ||
1526 | * form might be created. | ||
1527 | * | ||
1528 | * @event formLoaded | ||
1529 | * @member CKEDITOR.ui.dialog.fileButton | ||
1530 | */ | ||
diff --git a/sources/plugins/elementspath/lang/af.js b/sources/plugins/elementspath/lang/af.js new file mode 100644 index 0000000..7d83e85 --- /dev/null +++ b/sources/plugins/elementspath/lang/af.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'af', { | ||
6 | eleLabel: 'Elemente-pad', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/ar.js b/sources/plugins/elementspath/lang/ar.js new file mode 100644 index 0000000..f00047c --- /dev/null +++ b/sources/plugins/elementspath/lang/ar.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'ar', { | ||
6 | eleLabel: 'مسار العنصر', | ||
7 | eleTitle: 'عنصر 1%' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/bg.js b/sources/plugins/elementspath/lang/bg.js new file mode 100644 index 0000000..5631407 --- /dev/null +++ b/sources/plugins/elementspath/lang/bg.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'bg', { | ||
6 | eleLabel: 'Път за елементите', | ||
7 | eleTitle: '%1 елемент' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/bn.js b/sources/plugins/elementspath/lang/bn.js new file mode 100644 index 0000000..a332dca --- /dev/null +++ b/sources/plugins/elementspath/lang/bn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'bn', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/bs.js b/sources/plugins/elementspath/lang/bs.js new file mode 100644 index 0000000..6fc622a --- /dev/null +++ b/sources/plugins/elementspath/lang/bs.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'bs', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/ca.js b/sources/plugins/elementspath/lang/ca.js new file mode 100644 index 0000000..4f964cf --- /dev/null +++ b/sources/plugins/elementspath/lang/ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'ca', { | ||
6 | eleLabel: 'Ruta dels elements', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/cs.js b/sources/plugins/elementspath/lang/cs.js new file mode 100644 index 0000000..da06354 --- /dev/null +++ b/sources/plugins/elementspath/lang/cs.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'cs', { | ||
6 | eleLabel: 'Cesta objektu', | ||
7 | eleTitle: '%1 objekt' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/cy.js b/sources/plugins/elementspath/lang/cy.js new file mode 100644 index 0000000..05f5885 --- /dev/null +++ b/sources/plugins/elementspath/lang/cy.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'cy', { | ||
6 | eleLabel: 'Llwybr elfennau', | ||
7 | eleTitle: 'Elfen %1' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/da.js b/sources/plugins/elementspath/lang/da.js new file mode 100644 index 0000000..8c68da7 --- /dev/null +++ b/sources/plugins/elementspath/lang/da.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'da', { | ||
6 | eleLabel: 'Sti på element', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/de-ch.js b/sources/plugins/elementspath/lang/de-ch.js new file mode 100644 index 0000000..dc440b1 --- /dev/null +++ b/sources/plugins/elementspath/lang/de-ch.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'de-ch', { | ||
6 | eleLabel: 'Elementepfad', | ||
7 | eleTitle: '%1 Element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/de.js b/sources/plugins/elementspath/lang/de.js new file mode 100644 index 0000000..0c898ef --- /dev/null +++ b/sources/plugins/elementspath/lang/de.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'de', { | ||
6 | eleLabel: 'Elementepfad', | ||
7 | eleTitle: '%1 Element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/el.js b/sources/plugins/elementspath/lang/el.js new file mode 100644 index 0000000..5106bd8 --- /dev/null +++ b/sources/plugins/elementspath/lang/el.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'el', { | ||
6 | eleLabel: 'Διαδρομή Στοιχείων', | ||
7 | eleTitle: 'Στοιχείο %1' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/en-au.js b/sources/plugins/elementspath/lang/en-au.js new file mode 100644 index 0000000..fc9a3aa --- /dev/null +++ b/sources/plugins/elementspath/lang/en-au.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'en-au', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/en-ca.js b/sources/plugins/elementspath/lang/en-ca.js new file mode 100644 index 0000000..894d985 --- /dev/null +++ b/sources/plugins/elementspath/lang/en-ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'en-ca', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/en-gb.js b/sources/plugins/elementspath/lang/en-gb.js new file mode 100644 index 0000000..f172fc0 --- /dev/null +++ b/sources/plugins/elementspath/lang/en-gb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'en-gb', { | ||
6 | eleLabel: 'Elements path', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/en.js b/sources/plugins/elementspath/lang/en.js new file mode 100644 index 0000000..135c895 --- /dev/null +++ b/sources/plugins/elementspath/lang/en.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'en', { | ||
6 | eleLabel: 'Elements path', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/eo.js b/sources/plugins/elementspath/lang/eo.js new file mode 100644 index 0000000..5df75e9 --- /dev/null +++ b/sources/plugins/elementspath/lang/eo.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'eo', { | ||
6 | eleLabel: 'Vojo al Elementoj', | ||
7 | eleTitle: '%1 elementoj' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/es.js b/sources/plugins/elementspath/lang/es.js new file mode 100644 index 0000000..3953de4 --- /dev/null +++ b/sources/plugins/elementspath/lang/es.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'es', { | ||
6 | eleLabel: 'Ruta de los elementos', | ||
7 | eleTitle: '%1 elemento' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/et.js b/sources/plugins/elementspath/lang/et.js new file mode 100644 index 0000000..be7f786 --- /dev/null +++ b/sources/plugins/elementspath/lang/et.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'et', { | ||
6 | eleLabel: 'Elementide asukoht', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/eu.js b/sources/plugins/elementspath/lang/eu.js new file mode 100644 index 0000000..06a7041 --- /dev/null +++ b/sources/plugins/elementspath/lang/eu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'eu', { | ||
6 | eleLabel: 'Elementuen bidea', | ||
7 | eleTitle: '%1 elementua' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/fa.js b/sources/plugins/elementspath/lang/fa.js new file mode 100644 index 0000000..72b4b11 --- /dev/null +++ b/sources/plugins/elementspath/lang/fa.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'fa', { | ||
6 | eleLabel: 'مسیر عناصر', | ||
7 | eleTitle: '%1 عنصر' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/fi.js b/sources/plugins/elementspath/lang/fi.js new file mode 100644 index 0000000..5a175b5 --- /dev/null +++ b/sources/plugins/elementspath/lang/fi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'fi', { | ||
6 | eleLabel: 'Elementin polku', | ||
7 | eleTitle: '%1 elementti' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/fo.js b/sources/plugins/elementspath/lang/fo.js new file mode 100644 index 0000000..a9feb77 --- /dev/null +++ b/sources/plugins/elementspath/lang/fo.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'fo', { | ||
6 | eleLabel: 'Slóð til elementir', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/fr-ca.js b/sources/plugins/elementspath/lang/fr-ca.js new file mode 100644 index 0000000..0f3d209 --- /dev/null +++ b/sources/plugins/elementspath/lang/fr-ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'fr-ca', { | ||
6 | eleLabel: 'Chemin d\'éléments', | ||
7 | eleTitle: 'element %1' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/fr.js b/sources/plugins/elementspath/lang/fr.js new file mode 100644 index 0000000..8cd9b1a --- /dev/null +++ b/sources/plugins/elementspath/lang/fr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'fr', { | ||
6 | eleLabel: 'Elements path', | ||
7 | eleTitle: '%1 éléments' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/gl.js b/sources/plugins/elementspath/lang/gl.js new file mode 100644 index 0000000..827325b --- /dev/null +++ b/sources/plugins/elementspath/lang/gl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'gl', { | ||
6 | eleLabel: 'Ruta dos elementos', | ||
7 | eleTitle: 'Elemento %1' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/gu.js b/sources/plugins/elementspath/lang/gu.js new file mode 100644 index 0000000..ffdfb3d --- /dev/null +++ b/sources/plugins/elementspath/lang/gu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'gu', { | ||
6 | eleLabel: 'એલીમેન્ટ્સ નો ', | ||
7 | eleTitle: 'એલીમેન્ટ %1' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/he.js b/sources/plugins/elementspath/lang/he.js new file mode 100644 index 0000000..19ec76e --- /dev/null +++ b/sources/plugins/elementspath/lang/he.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'he', { | ||
6 | eleLabel: 'עץ האלמנטים', | ||
7 | eleTitle: '%1 אלמנט' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/hi.js b/sources/plugins/elementspath/lang/hi.js new file mode 100644 index 0000000..6f89d6d --- /dev/null +++ b/sources/plugins/elementspath/lang/hi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'hi', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/hr.js b/sources/plugins/elementspath/lang/hr.js new file mode 100644 index 0000000..6d07ae5 --- /dev/null +++ b/sources/plugins/elementspath/lang/hr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'hr', { | ||
6 | eleLabel: 'Putanja elemenata', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/hu.js b/sources/plugins/elementspath/lang/hu.js new file mode 100644 index 0000000..62152ce --- /dev/null +++ b/sources/plugins/elementspath/lang/hu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'hu', { | ||
6 | eleLabel: 'Elem utak', | ||
7 | eleTitle: '%1 elem' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/is.js b/sources/plugins/elementspath/lang/is.js new file mode 100644 index 0000000..ef8abad --- /dev/null +++ b/sources/plugins/elementspath/lang/is.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'is', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/it.js b/sources/plugins/elementspath/lang/it.js new file mode 100644 index 0000000..966ae05 --- /dev/null +++ b/sources/plugins/elementspath/lang/it.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'it', { | ||
6 | eleLabel: 'Percorso degli elementi', | ||
7 | eleTitle: '%1 elemento' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/ja.js b/sources/plugins/elementspath/lang/ja.js new file mode 100644 index 0000000..60fc4cd --- /dev/null +++ b/sources/plugins/elementspath/lang/ja.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'ja', { | ||
6 | eleLabel: '要素パス', | ||
7 | eleTitle: '%1 要素' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/ka.js b/sources/plugins/elementspath/lang/ka.js new file mode 100644 index 0000000..901f95f --- /dev/null +++ b/sources/plugins/elementspath/lang/ka.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'ka', { | ||
6 | eleLabel: 'ელემეტის გზა', | ||
7 | eleTitle: '%1 ელემენტი' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/km.js b/sources/plugins/elementspath/lang/km.js new file mode 100644 index 0000000..d8cf78c --- /dev/null +++ b/sources/plugins/elementspath/lang/km.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'km', { | ||
6 | eleLabel: 'ទីតាំងធាតុ', | ||
7 | eleTitle: 'ធាតុ %1' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/ko.js b/sources/plugins/elementspath/lang/ko.js new file mode 100644 index 0000000..77d399f --- /dev/null +++ b/sources/plugins/elementspath/lang/ko.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'ko', { | ||
6 | eleLabel: '요소 경로', | ||
7 | eleTitle: '%1 요소' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/ku.js b/sources/plugins/elementspath/lang/ku.js new file mode 100644 index 0000000..7461fdf --- /dev/null +++ b/sources/plugins/elementspath/lang/ku.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'ku', { | ||
6 | eleLabel: 'ڕێڕەوی توخمەکان', | ||
7 | eleTitle: '%1 توخم' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/lt.js b/sources/plugins/elementspath/lang/lt.js new file mode 100644 index 0000000..266a8e6 --- /dev/null +++ b/sources/plugins/elementspath/lang/lt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'lt', { | ||
6 | eleLabel: 'Elemento kelias', | ||
7 | eleTitle: '%1 elementas' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/lv.js b/sources/plugins/elementspath/lang/lv.js new file mode 100644 index 0000000..e4b5681 --- /dev/null +++ b/sources/plugins/elementspath/lang/lv.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'lv', { | ||
6 | eleLabel: 'Elementa ceļš', | ||
7 | eleTitle: '%1 elements' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/mk.js b/sources/plugins/elementspath/lang/mk.js new file mode 100644 index 0000000..6bf992b --- /dev/null +++ b/sources/plugins/elementspath/lang/mk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'mk', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/mn.js b/sources/plugins/elementspath/lang/mn.js new file mode 100644 index 0000000..95ff819 --- /dev/null +++ b/sources/plugins/elementspath/lang/mn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'mn', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/ms.js b/sources/plugins/elementspath/lang/ms.js new file mode 100644 index 0000000..9220621 --- /dev/null +++ b/sources/plugins/elementspath/lang/ms.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'ms', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/nb.js b/sources/plugins/elementspath/lang/nb.js new file mode 100644 index 0000000..6972c02 --- /dev/null +++ b/sources/plugins/elementspath/lang/nb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'nb', { | ||
6 | eleLabel: 'Element-sti', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/nl.js b/sources/plugins/elementspath/lang/nl.js new file mode 100644 index 0000000..559d3b6 --- /dev/null +++ b/sources/plugins/elementspath/lang/nl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'nl', { | ||
6 | eleLabel: 'Elementenpad', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/no.js b/sources/plugins/elementspath/lang/no.js new file mode 100644 index 0000000..a3e2a84 --- /dev/null +++ b/sources/plugins/elementspath/lang/no.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'no', { | ||
6 | eleLabel: 'Element-sti', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/pl.js b/sources/plugins/elementspath/lang/pl.js new file mode 100644 index 0000000..f477bd1 --- /dev/null +++ b/sources/plugins/elementspath/lang/pl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'pl', { | ||
6 | eleLabel: 'Ścieżka elementów', | ||
7 | eleTitle: 'element %1' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/pt-br.js b/sources/plugins/elementspath/lang/pt-br.js new file mode 100644 index 0000000..0cccfea --- /dev/null +++ b/sources/plugins/elementspath/lang/pt-br.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'pt-br', { | ||
6 | eleLabel: 'Caminho dos Elementos', | ||
7 | eleTitle: 'Elemento %1' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/pt.js b/sources/plugins/elementspath/lang/pt.js new file mode 100644 index 0000000..6b79d0f --- /dev/null +++ b/sources/plugins/elementspath/lang/pt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'pt', { | ||
6 | eleLabel: 'Caminho dos elementos', | ||
7 | eleTitle: 'Elemento %1' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/ro.js b/sources/plugins/elementspath/lang/ro.js new file mode 100644 index 0000000..c11f4de --- /dev/null +++ b/sources/plugins/elementspath/lang/ro.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'ro', { | ||
6 | eleLabel: 'Calea elementelor', | ||
7 | eleTitle: '%1 element' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/ru.js b/sources/plugins/elementspath/lang/ru.js new file mode 100644 index 0000000..3e1bd71 --- /dev/null +++ b/sources/plugins/elementspath/lang/ru.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'ru', { | ||
6 | eleLabel: 'Путь элементов', | ||
7 | eleTitle: 'Элемент %1' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/si.js b/sources/plugins/elementspath/lang/si.js new file mode 100644 index 0000000..8a5c180 --- /dev/null +++ b/sources/plugins/elementspath/lang/si.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'si', { | ||
6 | eleLabel: 'මුලද්රව්ය මාර්ගය', | ||
7 | eleTitle: '%1 මුල' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/sk.js b/sources/plugins/elementspath/lang/sk.js new file mode 100644 index 0000000..f4b82f6 --- /dev/null +++ b/sources/plugins/elementspath/lang/sk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'sk', { | ||
6 | eleLabel: 'Cesta prvkov', | ||
7 | eleTitle: '%1 prvok' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/sl.js b/sources/plugins/elementspath/lang/sl.js new file mode 100644 index 0000000..8888344 --- /dev/null +++ b/sources/plugins/elementspath/lang/sl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'sl', { | ||
6 | eleLabel: 'Pot elementov', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/sq.js b/sources/plugins/elementspath/lang/sq.js new file mode 100644 index 0000000..ad0faf3 --- /dev/null +++ b/sources/plugins/elementspath/lang/sq.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'sq', { | ||
6 | eleLabel: 'Rruga e elementeve', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/sr-latn.js b/sources/plugins/elementspath/lang/sr-latn.js new file mode 100644 index 0000000..4558023 --- /dev/null +++ b/sources/plugins/elementspath/lang/sr-latn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'sr-latn', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/sr.js b/sources/plugins/elementspath/lang/sr.js new file mode 100644 index 0000000..b27edf6 --- /dev/null +++ b/sources/plugins/elementspath/lang/sr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'sr', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/sv.js b/sources/plugins/elementspath/lang/sv.js new file mode 100644 index 0000000..bfe4fde --- /dev/null +++ b/sources/plugins/elementspath/lang/sv.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'sv', { | ||
6 | eleLabel: 'Elementets sökväg', | ||
7 | eleTitle: '%1 element' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/th.js b/sources/plugins/elementspath/lang/th.js new file mode 100644 index 0000000..a57021b --- /dev/null +++ b/sources/plugins/elementspath/lang/th.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'th', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 element' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/tr.js b/sources/plugins/elementspath/lang/tr.js new file mode 100644 index 0000000..d0c48bd --- /dev/null +++ b/sources/plugins/elementspath/lang/tr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'tr', { | ||
6 | eleLabel: 'Elementlerin yolu', | ||
7 | eleTitle: '%1 elementi' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/tt.js b/sources/plugins/elementspath/lang/tt.js new file mode 100644 index 0000000..ccc908b --- /dev/null +++ b/sources/plugins/elementspath/lang/tt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'tt', { | ||
6 | eleLabel: 'Elements path', // MISSING | ||
7 | eleTitle: '%1 элемент' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/ug.js b/sources/plugins/elementspath/lang/ug.js new file mode 100644 index 0000000..9d1b2f1 --- /dev/null +++ b/sources/plugins/elementspath/lang/ug.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'ug', { | ||
6 | eleLabel: 'ئېلېمېنت يولى', | ||
7 | eleTitle: '%1 ئېلېمېنت' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/uk.js b/sources/plugins/elementspath/lang/uk.js new file mode 100644 index 0000000..b0eb692 --- /dev/null +++ b/sources/plugins/elementspath/lang/uk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'uk', { | ||
6 | eleLabel: 'Шлях', | ||
7 | eleTitle: '%1 елемент' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/vi.js b/sources/plugins/elementspath/lang/vi.js new file mode 100644 index 0000000..d3a938b --- /dev/null +++ b/sources/plugins/elementspath/lang/vi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'vi', { | ||
6 | eleLabel: 'Nhãn thành phần', | ||
7 | eleTitle: '%1 thành phần' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/zh-cn.js b/sources/plugins/elementspath/lang/zh-cn.js new file mode 100644 index 0000000..4e7c836 --- /dev/null +++ b/sources/plugins/elementspath/lang/zh-cn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'zh-cn', { | ||
6 | eleLabel: '元素路径', | ||
7 | eleTitle: '%1 元素' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/lang/zh.js b/sources/plugins/elementspath/lang/zh.js new file mode 100644 index 0000000..4a968da --- /dev/null +++ b/sources/plugins/elementspath/lang/zh.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'elementspath', 'zh', { | ||
6 | eleLabel: '元件路徑', | ||
7 | eleTitle: '%1 個元件' | ||
8 | } ); | ||
diff --git a/sources/plugins/elementspath/plugin.js b/sources/plugins/elementspath/plugin.js new file mode 100644 index 0000000..fd02d70 --- /dev/null +++ b/sources/plugins/elementspath/plugin.js | |||
@@ -0,0 +1,235 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview The "elementspath" plugin. It shows all elements in the DOM | ||
8 | * parent tree relative to the current selection in the editing area. | ||
9 | */ | ||
10 | |||
11 | ( function() { | ||
12 | var commands = { | ||
13 | toolbarFocus: { | ||
14 | editorFocus: false, | ||
15 | readOnly: 1, | ||
16 | exec: function( editor ) { | ||
17 | var idBase = editor._.elementsPath.idBase; | ||
18 | var element = CKEDITOR.document.getById( idBase + '0' ); | ||
19 | |||
20 | // Make the first button focus accessible for IE. (#3417) | ||
21 | // Adobe AIR instead need while of delay. | ||
22 | element && element.focus( CKEDITOR.env.ie || CKEDITOR.env.air ); | ||
23 | } | ||
24 | } | ||
25 | }; | ||
26 | |||
27 | var emptyHtml = '<span class="cke_path_empty"> </span>'; | ||
28 | |||
29 | var extra = ''; | ||
30 | |||
31 | // Some browsers don't cancel key events in the keydown but in the | ||
32 | // keypress. | ||
33 | // TODO: Check if really needed. | ||
34 | if ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) | ||
35 | extra += ' onkeypress="return false;"'; | ||
36 | |||
37 | // With Firefox, we need to force the button to redraw, otherwise it | ||
38 | // will remain in the focus state. | ||
39 | if ( CKEDITOR.env.gecko ) | ||
40 | extra += ' onblur="this.style.cssText = this.style.cssText;"'; | ||
41 | |||
42 | var pathItemTpl = CKEDITOR.addTemplate( 'pathItem', '<a' + | ||
43 | ' id="{id}"' + | ||
44 | ' href="{jsTitle}"' + | ||
45 | ' tabindex="-1"' + | ||
46 | ' class="cke_path_item"' + | ||
47 | ' title="{label}"' + | ||
48 | extra + | ||
49 | ' hidefocus="true" ' + | ||
50 | ' onkeydown="return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );"' + | ||
51 | ' onclick="CKEDITOR.tools.callFunction({clickFn},{index}); return false;"' + | ||
52 | ' role="button" aria-label="{label}">' + | ||
53 | '{text}' + | ||
54 | '</a>' ); | ||
55 | |||
56 | CKEDITOR.plugins.add( 'elementspath', { | ||
57 | // jscs:disable maximumLineLength | ||
58 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
59 | // jscs:enable maximumLineLength | ||
60 | init: function( editor ) { | ||
61 | editor._.elementsPath = { | ||
62 | idBase: 'cke_elementspath_' + CKEDITOR.tools.getNextNumber() + '_', | ||
63 | filters: [] | ||
64 | }; | ||
65 | |||
66 | editor.on( 'uiSpace', function( event ) { | ||
67 | if ( event.data.space == 'bottom' ) | ||
68 | initElementsPath( editor, event.data ); | ||
69 | } ); | ||
70 | } | ||
71 | } ); | ||
72 | |||
73 | function initElementsPath( editor, bottomSpaceData ) { | ||
74 | var spaceId = editor.ui.spaceId( 'path' ), | ||
75 | spaceElement, | ||
76 | getSpaceElement = function() { | ||
77 | if ( !spaceElement ) | ||
78 | spaceElement = CKEDITOR.document.getById( spaceId ); | ||
79 | return spaceElement; | ||
80 | }, | ||
81 | elementsPath = editor._.elementsPath, | ||
82 | idBase = elementsPath.idBase; | ||
83 | |||
84 | bottomSpaceData.html += '<span id="' + spaceId + '_label" class="cke_voice_label">' + editor.lang.elementspath.eleLabel + '</span>' + | ||
85 | '<span id="' + spaceId + '" class="cke_path" role="group" aria-labelledby="' + spaceId + '_label">' + emptyHtml + '</span>'; | ||
86 | |||
87 | // Register the ui element to the focus manager. | ||
88 | editor.on( 'uiReady', function() { | ||
89 | var element = editor.ui.space( 'path' ); | ||
90 | element && editor.focusManager.add( element, 1 ); | ||
91 | } ); | ||
92 | |||
93 | function onClick( elementIndex ) { | ||
94 | var element = elementsPath.list[ elementIndex ]; | ||
95 | if ( element.equals( editor.editable() ) || element.getAttribute( 'contenteditable' ) == 'true' ) { | ||
96 | var range = editor.createRange(); | ||
97 | range.selectNodeContents( element ); | ||
98 | range.select(); | ||
99 | } else { | ||
100 | editor.getSelection().selectElement( element ); | ||
101 | } | ||
102 | |||
103 | // It is important to focus() *after* the above selection | ||
104 | // manipulation, otherwise Firefox will have troubles. #10119 | ||
105 | editor.focus(); | ||
106 | } | ||
107 | |||
108 | elementsPath.onClick = onClick; | ||
109 | |||
110 | var onClickHanlder = CKEDITOR.tools.addFunction( onClick ), | ||
111 | onKeyDownHandler = CKEDITOR.tools.addFunction( function( elementIndex, ev ) { | ||
112 | var idBase = elementsPath.idBase, | ||
113 | element; | ||
114 | |||
115 | ev = new CKEDITOR.dom.event( ev ); | ||
116 | |||
117 | var rtl = editor.lang.dir == 'rtl'; | ||
118 | switch ( ev.getKeystroke() ) { | ||
119 | case rtl ? 39 : 37: // LEFT-ARROW | ||
120 | case 9: // TAB | ||
121 | element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) ); | ||
122 | if ( !element ) | ||
123 | element = CKEDITOR.document.getById( idBase + '0' ); | ||
124 | element.focus(); | ||
125 | return false; | ||
126 | |||
127 | case rtl ? 37 : 39: // RIGHT-ARROW | ||
128 | case CKEDITOR.SHIFT + 9: // SHIFT + TAB | ||
129 | element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) ); | ||
130 | if ( !element ) | ||
131 | element = CKEDITOR.document.getById( idBase + ( elementsPath.list.length - 1 ) ); | ||
132 | element.focus(); | ||
133 | return false; | ||
134 | |||
135 | case 27: // ESC | ||
136 | editor.focus(); | ||
137 | return false; | ||
138 | |||
139 | case 13: // ENTER // Opera | ||
140 | case 32: // SPACE | ||
141 | onClick( elementIndex ); | ||
142 | return false; | ||
143 | } | ||
144 | return true; | ||
145 | } ); | ||
146 | |||
147 | editor.on( 'selectionChange', function() { | ||
148 | var html = [], | ||
149 | elementsList = elementsPath.list = [], | ||
150 | namesList = [], | ||
151 | filters = elementsPath.filters, | ||
152 | isContentEditable = true, | ||
153 | |||
154 | // Use elementPath to consider children of editable only (#11124). | ||
155 | elementsChain = editor.elementPath().elements, | ||
156 | name; | ||
157 | |||
158 | // Starts iteration from body element, skipping html. | ||
159 | for ( var j = elementsChain.length; j--; ) { | ||
160 | var element = elementsChain[ j ], | ||
161 | ignore = 0; | ||
162 | |||
163 | if ( element.data( 'cke-display-name' ) ) | ||
164 | name = element.data( 'cke-display-name' ); | ||
165 | else if ( element.data( 'cke-real-element-type' ) ) | ||
166 | name = element.data( 'cke-real-element-type' ); | ||
167 | else | ||
168 | name = element.getName(); | ||
169 | |||
170 | isContentEditable = element.hasAttribute( 'contenteditable' ) ? | ||
171 | element.getAttribute( 'contenteditable' ) == 'true' : isContentEditable; | ||
172 | |||
173 | // If elem is non-contenteditable, and it's not specifying contenteditable | ||
174 | // attribute - then elem should be ignored. | ||
175 | if ( !isContentEditable && !element.hasAttribute( 'contenteditable' ) ) | ||
176 | ignore = 1; | ||
177 | |||
178 | for ( var i = 0; i < filters.length; i++ ) { | ||
179 | var ret = filters[ i ]( element, name ); | ||
180 | if ( ret === false ) { | ||
181 | ignore = 1; | ||
182 | break; | ||
183 | } | ||
184 | name = ret || name; | ||
185 | } | ||
186 | |||
187 | if ( !ignore ) { | ||
188 | elementsList.unshift( element ); | ||
189 | namesList.unshift( name ); | ||
190 | } | ||
191 | } | ||
192 | |||
193 | for ( var iterationLimit = elementsList.length, index = 0; index < iterationLimit; index++ ) { | ||
194 | name = namesList[ index ]; | ||
195 | var label = editor.lang.elementspath.eleTitle.replace( /%1/, name ), | ||
196 | item = pathItemTpl.output( { | ||
197 | id: idBase + index, | ||
198 | label: label, | ||
199 | text: name, | ||
200 | jsTitle: 'javascript:void(\'' + name + '\')', // jshint ignore:line | ||
201 | index: index, | ||
202 | keyDownFn: onKeyDownHandler, | ||
203 | clickFn: onClickHanlder | ||
204 | } ); | ||
205 | |||
206 | html.unshift( item ); | ||
207 | } | ||
208 | |||
209 | var space = getSpaceElement(); | ||
210 | space.setHtml( html.join( '' ) + emptyHtml ); | ||
211 | editor.fire( 'elementsPathUpdate', { space: space } ); | ||
212 | } ); | ||
213 | |||
214 | function empty() { | ||
215 | spaceElement && spaceElement.setHtml( emptyHtml ); | ||
216 | delete elementsPath.list; | ||
217 | } | ||
218 | |||
219 | editor.on( 'readOnly', empty ); | ||
220 | editor.on( 'contentDomUnload', empty ); | ||
221 | |||
222 | editor.addCommand( 'elementsPathFocus', commands.toolbarFocus ); | ||
223 | editor.setKeystroke( CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' ); | ||
224 | } | ||
225 | } )(); | ||
226 | |||
227 | /** | ||
228 | * Fired when the contents of the elementsPath are changed. | ||
229 | * | ||
230 | * @event elementsPathUpdate | ||
231 | * @member CKEDITOR.editor | ||
232 | * @param {CKEDITOR.editor} editor This editor instance. | ||
233 | * @param data | ||
234 | * @param {CKEDITOR.dom.element} data.space The elementsPath container. | ||
235 | */ | ||
diff --git a/sources/plugins/enterkey/plugin.js b/sources/plugins/enterkey/plugin.js new file mode 100644 index 0000000..4cbb7bf --- /dev/null +++ b/sources/plugins/enterkey/plugin.js | |||
@@ -0,0 +1,566 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | CKEDITOR.plugins.add( 'enterkey', { | ||
8 | init: function( editor ) { | ||
9 | editor.addCommand( 'enter', { | ||
10 | modes: { wysiwyg: 1 }, | ||
11 | editorFocus: false, | ||
12 | exec: function( editor ) { | ||
13 | enter( editor ); | ||
14 | } | ||
15 | } ); | ||
16 | |||
17 | editor.addCommand( 'shiftEnter', { | ||
18 | modes: { wysiwyg: 1 }, | ||
19 | editorFocus: false, | ||
20 | exec: function( editor ) { | ||
21 | shiftEnter( editor ); | ||
22 | } | ||
23 | } ); | ||
24 | |||
25 | editor.setKeystroke( [ | ||
26 | [ 13, 'enter' ], | ||
27 | [ CKEDITOR.SHIFT + 13, 'shiftEnter' ] | ||
28 | ] ); | ||
29 | } | ||
30 | } ); | ||
31 | |||
32 | var whitespaces = CKEDITOR.dom.walker.whitespaces(), | ||
33 | bookmark = CKEDITOR.dom.walker.bookmark(); | ||
34 | |||
35 | CKEDITOR.plugins.enterkey = { | ||
36 | enterBlock: function( editor, mode, range, forceMode ) { | ||
37 | // Get the range for the current selection. | ||
38 | range = range || getRange( editor ); | ||
39 | |||
40 | // We may not have valid ranges to work on, like when inside a | ||
41 | // contenteditable=false element. | ||
42 | if ( !range ) | ||
43 | return; | ||
44 | |||
45 | // When range is in nested editable, we have to replace range with this one, | ||
46 | // which have root property set to closest editable, to make auto paragraphing work. (#12162) | ||
47 | range = replaceRangeWithClosestEditableRoot( range ); | ||
48 | |||
49 | var doc = range.document; | ||
50 | |||
51 | var atBlockStart = range.checkStartOfBlock(), | ||
52 | atBlockEnd = range.checkEndOfBlock(), | ||
53 | path = editor.elementPath( range.startContainer ), | ||
54 | block = path.block, | ||
55 | |||
56 | // Determine the block element to be used. | ||
57 | blockTag = ( mode == CKEDITOR.ENTER_DIV ? 'div' : 'p' ), | ||
58 | |||
59 | newBlock; | ||
60 | |||
61 | // Exit the list when we're inside an empty list item block. (#5376) | ||
62 | if ( atBlockStart && atBlockEnd ) { | ||
63 | // Exit the list when we're inside an empty list item block. (#5376) | ||
64 | if ( block && ( block.is( 'li' ) || block.getParent().is( 'li' ) ) ) { | ||
65 | // Make sure to point to the li when dealing with empty list item. | ||
66 | if ( !block.is( 'li' ) ) | ||
67 | block = block.getParent(); | ||
68 | |||
69 | var blockParent = block.getParent(), | ||
70 | blockGrandParent = blockParent.getParent(), | ||
71 | |||
72 | firstChild = !block.hasPrevious(), | ||
73 | lastChild = !block.hasNext(), | ||
74 | |||
75 | selection = editor.getSelection(), | ||
76 | bookmarks = selection.createBookmarks(), | ||
77 | |||
78 | orgDir = block.getDirection( 1 ), | ||
79 | className = block.getAttribute( 'class' ), | ||
80 | style = block.getAttribute( 'style' ), | ||
81 | dirLoose = blockGrandParent.getDirection( 1 ) != orgDir, | ||
82 | |||
83 | enterMode = editor.enterMode, | ||
84 | needsBlock = enterMode != CKEDITOR.ENTER_BR || dirLoose || style || className, | ||
85 | |||
86 | child; | ||
87 | |||
88 | if ( blockGrandParent.is( 'li' ) ) { | ||
89 | |||
90 | // If block is the first or the last child of the parent | ||
91 | // list, degrade it and move to the outer list: | ||
92 | // before the parent list if block is first child and after | ||
93 | // the parent list if block is the last child, respectively. | ||
94 | // | ||
95 | // <ul> => <ul> | ||
96 | // <li> => <li> | ||
97 | // <ul> => <ul> | ||
98 | // <li>x</li> => <li>x</li> | ||
99 | // <li>^</li> => </ul> | ||
100 | // </ul> => </li> | ||
101 | // </li> => <li>^</li> | ||
102 | // </ul> => </ul> | ||
103 | // | ||
104 | // AND | ||
105 | // | ||
106 | // <ul> => <ul> | ||
107 | // <li> => <li>^</li> | ||
108 | // <ul> => <li> | ||
109 | // <li>^</li> => <ul> | ||
110 | // <li>x</li> => <li>x</li> | ||
111 | // </ul> => </ul> | ||
112 | // </li> => </li> | ||
113 | // </ul> => </ul> | ||
114 | |||
115 | if ( firstChild || lastChild ) { | ||
116 | |||
117 | // If it's only child, we don't want to keep perent ul anymore. | ||
118 | if ( firstChild && lastChild ) { | ||
119 | blockParent.remove(); | ||
120 | } | ||
121 | |||
122 | block[lastChild ? 'insertAfter' : 'insertBefore']( blockGrandParent ); | ||
123 | |||
124 | // If the empty block is neither first nor last child | ||
125 | // then split the list and the block as an element | ||
126 | // of outer list. | ||
127 | // | ||
128 | // => <ul> | ||
129 | // => <li> | ||
130 | // <ul> => <ul> | ||
131 | // <li> => <li>x</li> | ||
132 | // <ul> => </ul> | ||
133 | // <li>x</li> => </li> | ||
134 | // <li>^</li> => <li>^</li> | ||
135 | // <li>y</li> => <li> | ||
136 | // </ul> => <ul> | ||
137 | // </li> => <li>y</li> | ||
138 | // </ul> => </ul> | ||
139 | // => </li> | ||
140 | // => </ul> | ||
141 | |||
142 | } else { | ||
143 | block.breakParent( blockGrandParent ); | ||
144 | } | ||
145 | } | ||
146 | |||
147 | else if ( !needsBlock ) { | ||
148 | block.appendBogus( true ); | ||
149 | |||
150 | // If block is the first or last child of the parent | ||
151 | // list, move all block's children out of the list: | ||
152 | // before the list if block is first child and after the list | ||
153 | // if block is the last child, respectively. | ||
154 | // | ||
155 | // <ul> => <ul> | ||
156 | // <li>x</li> => <li>x</li> | ||
157 | // <li>^</li> => </ul> | ||
158 | // </ul> => ^ | ||
159 | // | ||
160 | // AND | ||
161 | // | ||
162 | // <ul> => ^ | ||
163 | // <li>^</li> => <ul> | ||
164 | // <li>x</li> => <li>x</li> | ||
165 | // </ul> => </ul> | ||
166 | |||
167 | if ( firstChild || lastChild ) { | ||
168 | while ( ( child = block[ firstChild ? 'getFirst' : 'getLast' ]() ) ) | ||
169 | child[ firstChild ? 'insertBefore' : 'insertAfter' ]( blockParent ); | ||
170 | } | ||
171 | |||
172 | // If the empty block is neither first nor last child | ||
173 | // then split the list and put all the block contents | ||
174 | // between two lists. | ||
175 | // | ||
176 | // <ul> => <ul> | ||
177 | // <li>x</li> => <li>x</li> | ||
178 | // <li>^</li> => </ul> | ||
179 | // <li>y</li> => ^ | ||
180 | // </ul> => <ul> | ||
181 | // => <li>y</li> | ||
182 | // => </ul> | ||
183 | |||
184 | else { | ||
185 | block.breakParent( blockParent ); | ||
186 | |||
187 | while ( ( child = block.getLast() ) ) | ||
188 | child.insertAfter( blockParent ); | ||
189 | } | ||
190 | |||
191 | block.remove(); | ||
192 | } else { | ||
193 | // Original path block is the list item, create new block for the list item content. | ||
194 | if ( path.block.is( 'li' ) ) { | ||
195 | // Use <div> block for ENTER_BR and ENTER_DIV. | ||
196 | newBlock = doc.createElement( mode == CKEDITOR.ENTER_P ? 'p' : 'div' ); | ||
197 | |||
198 | if ( dirLoose ) | ||
199 | newBlock.setAttribute( 'dir', orgDir ); | ||
200 | |||
201 | style && newBlock.setAttribute( 'style', style ); | ||
202 | className && newBlock.setAttribute( 'class', className ); | ||
203 | |||
204 | // Move all the child nodes to the new block. | ||
205 | block.moveChildren( newBlock ); | ||
206 | } | ||
207 | // The original path block is not a list item, just copy the block to out side of the list. | ||
208 | else { | ||
209 | newBlock = path.block; | ||
210 | } | ||
211 | |||
212 | // If block is the first or last child of the parent | ||
213 | // list, move it out of the list: | ||
214 | // before the list if block is first child and after the list | ||
215 | // if block is the last child, respectively. | ||
216 | // | ||
217 | // <ul> => <ul> | ||
218 | // <li>x</li> => <li>x</li> | ||
219 | // <li>^</li> => </ul> | ||
220 | // </ul> => <p>^</p> | ||
221 | // | ||
222 | // AND | ||
223 | // | ||
224 | // <ul> => <p>^</p> | ||
225 | // <li>^</li> => <ul> | ||
226 | // <li>x</li> => <li>x</li> | ||
227 | // </ul> => </ul> | ||
228 | |||
229 | if ( firstChild || lastChild ) | ||
230 | newBlock[ firstChild ? 'insertBefore' : 'insertAfter' ]( blockParent ); | ||
231 | |||
232 | // If the empty block is neither first nor last child | ||
233 | // then split the list and put the new block between | ||
234 | // two lists. | ||
235 | // | ||
236 | // => <ul> | ||
237 | // <ul> => <li>x</li> | ||
238 | // <li>x</li> => </ul> | ||
239 | // <li>^</li> => <p>^</p> | ||
240 | // <li>y</li> => <ul> | ||
241 | // </ul> => <li>y</li> | ||
242 | // => </ul> | ||
243 | |||
244 | else { | ||
245 | block.breakParent( blockParent ); | ||
246 | newBlock.insertAfter( blockParent ); | ||
247 | } | ||
248 | |||
249 | block.remove(); | ||
250 | } | ||
251 | |||
252 | selection.selectBookmarks( bookmarks ); | ||
253 | |||
254 | return; | ||
255 | } | ||
256 | |||
257 | if ( block && block.getParent().is( 'blockquote' ) ) { | ||
258 | block.breakParent( block.getParent() ); | ||
259 | |||
260 | // If we were at the start of <blockquote>, there will be an empty element before it now. | ||
261 | if ( !block.getPrevious().getFirst( CKEDITOR.dom.walker.invisible( 1 ) ) ) | ||
262 | block.getPrevious().remove(); | ||
263 | |||
264 | // If we were at the end of <blockquote>, there will be an empty element after it now. | ||
265 | if ( !block.getNext().getFirst( CKEDITOR.dom.walker.invisible( 1 ) ) ) | ||
266 | block.getNext().remove(); | ||
267 | |||
268 | range.moveToElementEditStart( block ); | ||
269 | range.select(); | ||
270 | return; | ||
271 | } | ||
272 | } | ||
273 | // Don't split <pre> if we're in the middle of it, act as shift enter key. | ||
274 | else if ( block && block.is( 'pre' ) ) { | ||
275 | if ( !atBlockEnd ) { | ||
276 | enterBr( editor, mode, range, forceMode ); | ||
277 | return; | ||
278 | } | ||
279 | } | ||
280 | |||
281 | // Split the range. | ||
282 | var splitInfo = range.splitBlock( blockTag ); | ||
283 | |||
284 | if ( !splitInfo ) | ||
285 | return; | ||
286 | |||
287 | // Get the current blocks. | ||
288 | var previousBlock = splitInfo.previousBlock, | ||
289 | nextBlock = splitInfo.nextBlock; | ||
290 | |||
291 | var isStartOfBlock = splitInfo.wasStartOfBlock, | ||
292 | isEndOfBlock = splitInfo.wasEndOfBlock; | ||
293 | |||
294 | var node; | ||
295 | |||
296 | // If this is a block under a list item, split it as well. (#1647) | ||
297 | if ( nextBlock ) { | ||
298 | node = nextBlock.getParent(); | ||
299 | if ( node.is( 'li' ) ) { | ||
300 | nextBlock.breakParent( node ); | ||
301 | nextBlock.move( nextBlock.getNext(), 1 ); | ||
302 | } | ||
303 | } else if ( previousBlock && ( node = previousBlock.getParent() ) && node.is( 'li' ) ) { | ||
304 | previousBlock.breakParent( node ); | ||
305 | node = previousBlock.getNext(); | ||
306 | range.moveToElementEditStart( node ); | ||
307 | previousBlock.move( previousBlock.getPrevious() ); | ||
308 | } | ||
309 | |||
310 | // If we have both the previous and next blocks, it means that the | ||
311 | // boundaries were on separated blocks, or none of them where on the | ||
312 | // block limits (start/end). | ||
313 | if ( !isStartOfBlock && !isEndOfBlock ) { | ||
314 | // If the next block is an <li> with another list tree as the first | ||
315 | // child, we'll need to append a filler (<br>/NBSP) or the list item | ||
316 | // wouldn't be editable. (#1420) | ||
317 | if ( nextBlock.is( 'li' ) ) { | ||
318 | var walkerRange = range.clone(); | ||
319 | walkerRange.selectNodeContents( nextBlock ); | ||
320 | var walker = new CKEDITOR.dom.walker( walkerRange ); | ||
321 | walker.evaluator = function( node ) { | ||
322 | return !( bookmark( node ) || whitespaces( node ) || node.type == CKEDITOR.NODE_ELEMENT && node.getName() in CKEDITOR.dtd.$inline && !( node.getName() in CKEDITOR.dtd.$empty ) ); | ||
323 | }; | ||
324 | |||
325 | node = walker.next(); | ||
326 | if ( node && node.type == CKEDITOR.NODE_ELEMENT && node.is( 'ul', 'ol' ) ) | ||
327 | ( CKEDITOR.env.needsBrFiller ? doc.createElement( 'br' ) : doc.createText( '\xa0' ) ).insertBefore( node ); | ||
328 | } | ||
329 | |||
330 | // Move the selection to the end block. | ||
331 | if ( nextBlock ) | ||
332 | range.moveToElementEditStart( nextBlock ); | ||
333 | } else { | ||
334 | var newBlockDir; | ||
335 | |||
336 | if ( previousBlock ) { | ||
337 | // Do not enter this block if it's a header tag, or we are in | ||
338 | // a Shift+Enter (#77). Create a new block element instead | ||
339 | // (later in the code). | ||
340 | if ( previousBlock.is( 'li' ) || !( headerTagRegex.test( previousBlock.getName() ) || previousBlock.is( 'pre' ) ) ) { | ||
341 | // Otherwise, duplicate the previous block. | ||
342 | newBlock = previousBlock.clone(); | ||
343 | } | ||
344 | } else if ( nextBlock ) { | ||
345 | newBlock = nextBlock.clone(); | ||
346 | } | ||
347 | |||
348 | if ( !newBlock ) { | ||
349 | // We have already created a new list item. (#6849) | ||
350 | if ( node && node.is( 'li' ) ) | ||
351 | newBlock = node; | ||
352 | else { | ||
353 | newBlock = doc.createElement( blockTag ); | ||
354 | if ( previousBlock && ( newBlockDir = previousBlock.getDirection() ) ) | ||
355 | newBlock.setAttribute( 'dir', newBlockDir ); | ||
356 | } | ||
357 | } | ||
358 | // Force the enter block unless we're talking of a list item. | ||
359 | else if ( forceMode && !newBlock.is( 'li' ) ) { | ||
360 | newBlock.renameNode( blockTag ); | ||
361 | } | ||
362 | |||
363 | // Recreate the inline elements tree, which was available | ||
364 | // before hitting enter, so the same styles will be available in | ||
365 | // the new block. | ||
366 | var elementPath = splitInfo.elementPath; | ||
367 | if ( elementPath ) { | ||
368 | for ( var i = 0, len = elementPath.elements.length; i < len; i++ ) { | ||
369 | var element = elementPath.elements[ i ]; | ||
370 | |||
371 | if ( element.equals( elementPath.block ) || element.equals( elementPath.blockLimit ) ) | ||
372 | break; | ||
373 | |||
374 | if ( CKEDITOR.dtd.$removeEmpty[ element.getName() ] ) { | ||
375 | element = element.clone(); | ||
376 | newBlock.moveChildren( element ); | ||
377 | newBlock.append( element ); | ||
378 | } | ||
379 | } | ||
380 | } | ||
381 | |||
382 | newBlock.appendBogus(); | ||
383 | |||
384 | if ( !newBlock.getParent() ) | ||
385 | range.insertNode( newBlock ); | ||
386 | |||
387 | // list item start number should not be duplicated (#7330), but we need | ||
388 | // to remove the attribute after it's onto the DOM tree because of old IEs (#7581). | ||
389 | newBlock.is( 'li' ) && newBlock.removeAttribute( 'value' ); | ||
390 | |||
391 | // This is tricky, but to make the new block visible correctly | ||
392 | // we must select it. | ||
393 | // The previousBlock check has been included because it may be | ||
394 | // empty if we have fixed a block-less space (like ENTER into an | ||
395 | // empty table cell). | ||
396 | if ( CKEDITOR.env.ie && isStartOfBlock && ( !isEndOfBlock || !previousBlock.getChildCount() ) ) { | ||
397 | // Move the selection to the new block. | ||
398 | range.moveToElementEditStart( isEndOfBlock ? previousBlock : newBlock ); | ||
399 | range.select(); | ||
400 | } | ||
401 | |||
402 | // Move the selection to the new block. | ||
403 | range.moveToElementEditStart( isStartOfBlock && !isEndOfBlock ? nextBlock : newBlock ); | ||
404 | } | ||
405 | |||
406 | range.select(); | ||
407 | range.scrollIntoView(); | ||
408 | }, | ||
409 | |||
410 | enterBr: function( editor, mode, range, forceMode ) { | ||
411 | // Get the range for the current selection. | ||
412 | range = range || getRange( editor ); | ||
413 | |||
414 | // We may not have valid ranges to work on, like when inside a | ||
415 | // contenteditable=false element. | ||
416 | if ( !range ) | ||
417 | return; | ||
418 | |||
419 | var doc = range.document; | ||
420 | |||
421 | var isEndOfBlock = range.checkEndOfBlock(); | ||
422 | |||
423 | var elementPath = new CKEDITOR.dom.elementPath( editor.getSelection().getStartElement() ); | ||
424 | |||
425 | var startBlock = elementPath.block, | ||
426 | startBlockTag = startBlock && elementPath.block.getName(); | ||
427 | |||
428 | if ( !forceMode && startBlockTag == 'li' ) { | ||
429 | enterBlock( editor, mode, range, forceMode ); | ||
430 | return; | ||
431 | } | ||
432 | |||
433 | // If we are at the end of a header block. | ||
434 | if ( !forceMode && isEndOfBlock && headerTagRegex.test( startBlockTag ) ) { | ||
435 | var newBlock, newBlockDir; | ||
436 | |||
437 | if ( ( newBlockDir = startBlock.getDirection() ) ) { | ||
438 | newBlock = doc.createElement( 'div' ); | ||
439 | newBlock.setAttribute( 'dir', newBlockDir ); | ||
440 | newBlock.insertAfter( startBlock ); | ||
441 | range.setStart( newBlock, 0 ); | ||
442 | } else { | ||
443 | // Insert a <br> after the current paragraph. | ||
444 | doc.createElement( 'br' ).insertAfter( startBlock ); | ||
445 | |||
446 | // A text node is required by Gecko only to make the cursor blink. | ||
447 | if ( CKEDITOR.env.gecko ) | ||
448 | doc.createText( '' ).insertAfter( startBlock ); | ||
449 | |||
450 | // IE has different behaviors regarding position. | ||
451 | range.setStartAt( startBlock.getNext(), CKEDITOR.env.ie ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_START ); | ||
452 | } | ||
453 | } else { | ||
454 | var lineBreak; | ||
455 | |||
456 | // IE<8 prefers text node as line-break inside of <pre> (#4711). | ||
457 | if ( startBlockTag == 'pre' && CKEDITOR.env.ie && CKEDITOR.env.version < 8 ) | ||
458 | lineBreak = doc.createText( '\r' ); | ||
459 | else | ||
460 | lineBreak = doc.createElement( 'br' ); | ||
461 | |||
462 | range.deleteContents(); | ||
463 | range.insertNode( lineBreak ); | ||
464 | |||
465 | // Old IEs have different behavior regarding position. | ||
466 | if ( !CKEDITOR.env.needsBrFiller ) | ||
467 | range.setStartAt( lineBreak, CKEDITOR.POSITION_AFTER_END ); | ||
468 | else { | ||
469 | // A text node is required by Gecko only to make the cursor blink. | ||
470 | // We need some text inside of it, so the bogus <br> is properly | ||
471 | // created. | ||
472 | doc.createText( '\ufeff' ).insertAfter( lineBreak ); | ||
473 | |||
474 | // If we are at the end of a block, we must be sure the bogus node is available in that block. | ||
475 | if ( isEndOfBlock ) { | ||
476 | // In most situations we've got an elementPath.block (e.g. <p>), but in a | ||
477 | // blockless editor or when autoP is false that needs to be a block limit. | ||
478 | ( startBlock || elementPath.blockLimit ).appendBogus(); | ||
479 | } | ||
480 | |||
481 | // Now we can remove the text node contents, so the caret doesn't | ||
482 | // stop on it. | ||
483 | lineBreak.getNext().$.nodeValue = ''; | ||
484 | |||
485 | range.setStartAt( lineBreak.getNext(), CKEDITOR.POSITION_AFTER_START ); | ||
486 | |||
487 | } | ||
488 | } | ||
489 | |||
490 | // This collapse guarantees the cursor will be blinking. | ||
491 | range.collapse( true ); | ||
492 | |||
493 | range.select(); | ||
494 | range.scrollIntoView(); | ||
495 | } | ||
496 | }; | ||
497 | |||
498 | var plugin = CKEDITOR.plugins.enterkey, | ||
499 | enterBr = plugin.enterBr, | ||
500 | enterBlock = plugin.enterBlock, | ||
501 | headerTagRegex = /^h[1-6]$/; | ||
502 | |||
503 | function shiftEnter( editor ) { | ||
504 | // On SHIFT+ENTER: | ||
505 | // 1. We want to enforce the mode to be respected, instead | ||
506 | // of cloning the current block. (#77) | ||
507 | return enter( editor, editor.activeShiftEnterMode, 1 ); | ||
508 | } | ||
509 | |||
510 | function enter( editor, mode, forceMode ) { | ||
511 | forceMode = editor.config.forceEnterMode || forceMode; | ||
512 | |||
513 | // Only effective within document. | ||
514 | if ( editor.mode != 'wysiwyg' ) | ||
515 | return; | ||
516 | |||
517 | if ( !mode ) | ||
518 | mode = editor.activeEnterMode; | ||
519 | |||
520 | // TODO this should be handled by setting editor.activeEnterMode on selection change. | ||
521 | // Check path block specialities: | ||
522 | // 1. Cannot be a un-splittable element, e.g. table caption; | ||
523 | var path = editor.elementPath(); | ||
524 | if ( !path.isContextFor( 'p' ) ) { | ||
525 | mode = CKEDITOR.ENTER_BR; | ||
526 | forceMode = 1; | ||
527 | } | ||
528 | |||
529 | editor.fire( 'saveSnapshot' ); // Save undo step. | ||
530 | |||
531 | if ( mode == CKEDITOR.ENTER_BR ) | ||
532 | enterBr( editor, mode, null, forceMode ); | ||
533 | else | ||
534 | enterBlock( editor, mode, null, forceMode ); | ||
535 | |||
536 | editor.fire( 'saveSnapshot' ); | ||
537 | } | ||
538 | |||
539 | function getRange( editor ) { | ||
540 | // Get the selection ranges. | ||
541 | var ranges = editor.getSelection().getRanges( true ); | ||
542 | |||
543 | // Delete the contents of all ranges except the first one. | ||
544 | for ( var i = ranges.length - 1; i > 0; i-- ) { | ||
545 | ranges[ i ].deleteContents(); | ||
546 | } | ||
547 | |||
548 | // Return the first range. | ||
549 | return ranges[ 0 ]; | ||
550 | } | ||
551 | |||
552 | function replaceRangeWithClosestEditableRoot( range ) { | ||
553 | var closestEditable = range.startContainer.getAscendant( function( node ) { | ||
554 | return node.type == CKEDITOR.NODE_ELEMENT && node.getAttribute( 'contenteditable' ) == 'true'; | ||
555 | }, true ); | ||
556 | |||
557 | if ( range.root.equals( closestEditable ) ) { | ||
558 | return range; | ||
559 | } else { | ||
560 | var newRange = new CKEDITOR.dom.range( closestEditable ); | ||
561 | |||
562 | newRange.moveToRange( range ); | ||
563 | return newRange; | ||
564 | } | ||
565 | } | ||
566 | } )(); | ||
diff --git a/sources/plugins/enterkey/samples/enterkey.html b/sources/plugins/enterkey/samples/enterkey.html new file mode 100644 index 0000000..6b78e06 --- /dev/null +++ b/sources/plugins/enterkey/samples/enterkey.html | |||
@@ -0,0 +1,106 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <!-- | ||
3 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
4 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
5 | --> | ||
6 | <html> | ||
7 | <head> | ||
8 | <meta charset="utf-8"> | ||
9 | <title>ENTER Key Configuration — CKEditor Sample</title> | ||
10 | <script src="../../../ckeditor.js"></script> | ||
11 | <link href="../../../samples/old/sample.css" rel="stylesheet"> | ||
12 | <meta name="ckeditor-sample-name" content="Using the "Enter" key in CKEditor"> | ||
13 | <meta name="ckeditor-sample-group" content="Advanced Samples"> | ||
14 | <meta name="ckeditor-sample-description" content="Configuring the behavior of <em>Enter</em> and <em>Shift+Enter</em> keys."> | ||
15 | <script> | ||
16 | |||
17 | var editor; | ||
18 | |||
19 | function changeEnter() { | ||
20 | // If we already have an editor, let's destroy it first. | ||
21 | if ( editor ) | ||
22 | editor.destroy( true ); | ||
23 | |||
24 | // Create the editor again, with the appropriate settings. | ||
25 | editor = CKEDITOR.replace( 'editor1', { | ||
26 | extraPlugins: 'enterkey', | ||
27 | enterMode: Number( document.getElementById( 'xEnter' ).value ), | ||
28 | shiftEnterMode: Number( document.getElementById( 'xShiftEnter' ).value ) | ||
29 | }); | ||
30 | } | ||
31 | |||
32 | window.onload = changeEnter; | ||
33 | |||
34 | </script> | ||
35 | </head> | ||
36 | <body> | ||
37 | <h1 class="samples"> | ||
38 | <a href="../../../samples/old/index.html">CKEditor Samples</a> » ENTER Key Configuration | ||
39 | </h1> | ||
40 | <div class="warning deprecated"> | ||
41 | This sample is not maintained anymore. Check out its <a href="http://sdk.ckeditor.com/samples/enterkey.html">brand new version in CKEditor SDK</a>. | ||
42 | </div> | ||
43 | <div class="description"> | ||
44 | <p> | ||
45 | This sample shows how to configure the <em>Enter</em> and <em>Shift+Enter</em> keys | ||
46 | to perform actions specified in the | ||
47 | <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode"><code>enterMode</code></a> | ||
48 | and <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode"><code>shiftEnterMode</code></a> | ||
49 | parameters, respectively. | ||
50 | You can choose from the following options: | ||
51 | </p> | ||
52 | <ul class="samples"> | ||
53 | <li><strong><code>ENTER_P</code></strong> – new <code><p></code> paragraphs are created;</li> | ||
54 | <li><strong><code>ENTER_BR</code></strong> – lines are broken with <code><br></code> elements;</li> | ||
55 | <li><strong><code>ENTER_DIV</code></strong> – new <code><div></code> blocks are created.</li> | ||
56 | </ul> | ||
57 | <p> | ||
58 | The sample code below shows how to configure CKEditor to create a <code><div></code> block when <em>Enter</em> key is pressed. | ||
59 | </p> | ||
60 | <pre class="samples"> | ||
61 | CKEDITOR.replace( '<em>textarea_id</em>', { | ||
62 | <strong>enterMode: CKEDITOR.ENTER_DIV</strong> | ||
63 | });</pre> | ||
64 | <p> | ||
65 | Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of | ||
66 | the <code><textarea></code> element to be replaced. | ||
67 | </p> | ||
68 | </div> | ||
69 | <div style="float: left; margin-right: 20px"> | ||
70 | When <em>Enter</em> is pressed:<br> | ||
71 | <select id="xEnter" onchange="changeEnter();"> | ||
72 | <option selected="selected" value="1">Create a new <P> (recommended)</option> | ||
73 | <option value="3">Create a new <DIV></option> | ||
74 | <option value="2">Break the line with a <BR></option> | ||
75 | </select> | ||
76 | </div> | ||
77 | <div style="float: left"> | ||
78 | When <em>Shift+Enter</em> is pressed:<br> | ||
79 | <select id="xShiftEnter" onchange="changeEnter();"> | ||
80 | <option value="1">Create a new <P></option> | ||
81 | <option value="3">Create a new <DIV></option> | ||
82 | <option selected="selected" value="2">Break the line with a <BR> (recommended)</option> | ||
83 | </select> | ||
84 | </div> | ||
85 | <br style="clear: both"> | ||
86 | <form action="../../../samples/sample_posteddata.php" method="post"> | ||
87 | <p> | ||
88 | <br> | ||
89 | <textarea cols="80" id="editor1" name="editor1" rows="10">This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</textarea> | ||
90 | </p> | ||
91 | <p> | ||
92 | <input type="submit" value="Submit"> | ||
93 | </p> | ||
94 | </form> | ||
95 | <div id="footer"> | ||
96 | <hr> | ||
97 | <p> | ||
98 | CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> | ||
99 | </p> | ||
100 | <p id="copy"> | ||
101 | Copyright © 2003-2016, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico | ||
102 | Knabben. All rights reserved. | ||
103 | </p> | ||
104 | </div> | ||
105 | </body> | ||
106 | </html> | ||
diff --git a/sources/plugins/entities/plugin.js b/sources/plugins/entities/plugin.js new file mode 100644 index 0000000..bb80b97 --- /dev/null +++ b/sources/plugins/entities/plugin.js | |||
@@ -0,0 +1,239 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | // Basic HTML entities. | ||
8 | var htmlbase = 'nbsp,gt,lt,amp'; | ||
9 | |||
10 | var entities = | ||
11 | // Latin-1 entities | ||
12 | 'quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,' + | ||
13 | 'not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,' + | ||
14 | 'cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,' + | ||
15 | |||
16 | // Symbols | ||
17 | 'fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,' + | ||
18 | 'alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,' + | ||
19 | 'forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,' + | ||
20 | 'radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,' + | ||
21 | 'equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,' + | ||
22 | 'rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,' + | ||
23 | |||
24 | // Other special characters | ||
25 | 'circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,' + | ||
26 | 'rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,' + | ||
27 | 'euro'; | ||
28 | |||
29 | // Latin letters entities | ||
30 | var latin = 'Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,' + | ||
31 | 'Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,' + | ||
32 | 'Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,' + | ||
33 | 'agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,' + | ||
34 | 'ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,' + | ||
35 | 'otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,' + | ||
36 | 'OElig,oelig,Scaron,scaron,Yuml'; | ||
37 | |||
38 | // Greek letters entities. | ||
39 | var greek = 'Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,' + | ||
40 | 'Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,' + | ||
41 | 'beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,' + | ||
42 | 'omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,' + | ||
43 | 'upsih,piv'; | ||
44 | |||
45 | // Create a mapping table between one character and its entity form from a list of entity names. | ||
46 | // @param reverse {Boolean} Whether to create a reverse map from the entity string form to an actual character. | ||
47 | function buildTable( entities, reverse ) { | ||
48 | var table = {}, | ||
49 | regex = []; | ||
50 | |||
51 | // Entities that the browsers' DOM does not automatically transform to the | ||
52 | // final character. | ||
53 | var specialTable = { | ||
54 | nbsp: '\u00A0', // IE | FF | ||
55 | shy: '\u00AD', // IE | ||
56 | gt: '\u003E', // IE | FF | -- | Opera | ||
57 | lt: '\u003C', // IE | FF | Safari | Opera | ||
58 | amp: '\u0026', // ALL | ||
59 | apos: '\u0027', // IE | ||
60 | quot: '\u0022' // IE | ||
61 | }; | ||
62 | |||
63 | entities = entities.replace( /\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g, function( match, entity ) { | ||
64 | var org = reverse ? '&' + entity + ';' : specialTable[ entity ], | ||
65 | result = reverse ? specialTable[ entity ] : '&' + entity + ';'; | ||
66 | |||
67 | table[ org ] = result; | ||
68 | regex.push( org ); | ||
69 | return ''; | ||
70 | } ); | ||
71 | |||
72 | if ( !reverse && entities ) { | ||
73 | // Transforms the entities string into an array. | ||
74 | entities = entities.split( ',' ); | ||
75 | |||
76 | // Put all entities inside a DOM element, transforming them to their | ||
77 | // final characters. | ||
78 | var div = document.createElement( 'div' ), | ||
79 | chars; | ||
80 | div.innerHTML = '&' + entities.join( ';&' ) + ';'; | ||
81 | chars = div.innerHTML; | ||
82 | div = null; | ||
83 | |||
84 | // Add all characters to the table. | ||
85 | for ( var i = 0; i < chars.length; i++ ) { | ||
86 | var charAt = chars.charAt( i ); | ||
87 | table[ charAt ] = '&' + entities[ i ] + ';'; | ||
88 | regex.push( charAt ); | ||
89 | } | ||
90 | } | ||
91 | |||
92 | table.regex = regex.join( reverse ? '|' : '' ); | ||
93 | |||
94 | return table; | ||
95 | } | ||
96 | |||
97 | CKEDITOR.plugins.add( 'entities', { | ||
98 | afterInit: function( editor ) { | ||
99 | var config = editor.config; | ||
100 | |||
101 | function getChar( character ) { | ||
102 | return baseEntitiesTable[ character ]; | ||
103 | } | ||
104 | |||
105 | function getEntity( character ) { | ||
106 | return config.entities_processNumerical == 'force' || !entitiesTable[ character ] ? '&#' + character.charCodeAt( 0 ) + ';' | ||
107 | : entitiesTable[ character ]; | ||
108 | } | ||
109 | |||
110 | var dataProcessor = editor.dataProcessor, | ||
111 | htmlFilter = dataProcessor && dataProcessor.htmlFilter; | ||
112 | |||
113 | if ( htmlFilter ) { | ||
114 | // Mandatory HTML basic entities. | ||
115 | var selectedEntities = []; | ||
116 | |||
117 | if ( config.basicEntities !== false ) | ||
118 | selectedEntities.push( htmlbase ); | ||
119 | |||
120 | if ( config.entities ) { | ||
121 | if ( selectedEntities.length ) | ||
122 | selectedEntities.push( entities ); | ||
123 | |||
124 | if ( config.entities_latin ) | ||
125 | selectedEntities.push( latin ); | ||
126 | |||
127 | if ( config.entities_greek ) | ||
128 | selectedEntities.push( greek ); | ||
129 | |||
130 | if ( config.entities_additional ) | ||
131 | selectedEntities.push( config.entities_additional ); | ||
132 | } | ||
133 | |||
134 | var entitiesTable = buildTable( selectedEntities.join( ',' ) ); | ||
135 | |||
136 | // Create the Regex used to find entities in the text, leave it matches nothing if entities are empty. | ||
137 | var entitiesRegex = entitiesTable.regex ? '[' + entitiesTable.regex + ']' : 'a^'; | ||
138 | delete entitiesTable.regex; | ||
139 | |||
140 | if ( config.entities && config.entities_processNumerical ) | ||
141 | entitiesRegex = '[^ -~]|' + entitiesRegex; | ||
142 | |||
143 | entitiesRegex = new RegExp( entitiesRegex, 'g' ); | ||
144 | |||
145 | // Decode entities that the browsers has transformed | ||
146 | // at first place. | ||
147 | var baseEntitiesTable = buildTable( [ htmlbase, 'shy' ].join( ',' ), true ), | ||
148 | baseEntitiesRegex = new RegExp( baseEntitiesTable.regex, 'g' ); | ||
149 | |||
150 | htmlFilter.addRules( { | ||
151 | text: function( text ) { | ||
152 | return text.replace( baseEntitiesRegex, getChar ).replace( entitiesRegex, getEntity ); | ||
153 | } | ||
154 | }, { | ||
155 | applyToAll: true, | ||
156 | excludeNestedEditable: true | ||
157 | } ); | ||
158 | } | ||
159 | } | ||
160 | } ); | ||
161 | } )(); | ||
162 | |||
163 | /** | ||
164 | * Whether to escape basic HTML entities in the document, including: | ||
165 | * | ||
166 | * * ` ` | ||
167 | * * `>` | ||
168 | * * `<` | ||
169 | * * `&` | ||
170 | * | ||
171 | * **Note:** This option should not be changed unless when outputting a non-HTML data format like BBCode. | ||
172 | * | ||
173 | * config.basicEntities = false; | ||
174 | * | ||
175 | * @cfg {Boolean} [basicEntities=true] | ||
176 | * @member CKEDITOR.config | ||
177 | */ | ||
178 | CKEDITOR.config.basicEntities = true; | ||
179 | |||
180 | /** | ||
181 | * Whether to use HTML entities in the editor output. | ||
182 | * | ||
183 | * config.entities = false; | ||
184 | * | ||
185 | * @cfg {Boolean} [entities=true] | ||
186 | * @member CKEDITOR.config | ||
187 | */ | ||
188 | CKEDITOR.config.entities = true; | ||
189 | |||
190 | /** | ||
191 | * Whether to convert some Latin characters (Latin alphabet No. 1, ISO 8859-1) | ||
192 | * to HTML entities. The list of entities can be found in the | ||
193 | * [W3C HTML 4.01 Specification, section 24.2.1](http://www.w3.org/TR/html4/sgml/entities.html#h-24.2.1). | ||
194 | * | ||
195 | * config.entities_latin = false; | ||
196 | * | ||
197 | * @cfg {Boolean} [entities_latin=true] | ||
198 | * @member CKEDITOR.config | ||
199 | */ | ||
200 | CKEDITOR.config.entities_latin = true; | ||
201 | |||
202 | /** | ||
203 | * Whether to convert some symbols, mathematical symbols, and Greek letters to | ||
204 | * HTML entities. This may be more relevant for users typing text written in Greek. | ||
205 | * The list of entities can be found in the | ||
206 | * [W3C HTML 4.01 Specification, section 24.3.1](http://www.w3.org/TR/html4/sgml/entities.html#h-24.3.1). | ||
207 | * | ||
208 | * config.entities_greek = false; | ||
209 | * | ||
210 | * @cfg {Boolean} [entities_greek=true] | ||
211 | * @member CKEDITOR.config | ||
212 | */ | ||
213 | CKEDITOR.config.entities_greek = true; | ||
214 | |||
215 | /** | ||
216 | * Whether to convert all remaining characters not included in the ASCII | ||
217 | * character table to their relative decimal numeric representation of HTML entity. | ||
218 | * When set to `force`, it will convert all entities into this format. | ||
219 | * | ||
220 | * For example the phrase: `'This is Chinese: 汉语.'` would be output | ||
221 | * as: `'This is Chinese: 汉语.'` | ||
222 | * | ||
223 | * config.entities_processNumerical = true; | ||
224 | * config.entities_processNumerical = 'force'; // Converts from ' ' into ' '; | ||
225 | * | ||
226 | * @cfg {Boolean/String} [entities_processNumerical=false] | ||
227 | * @member CKEDITOR.config | ||
228 | */ | ||
229 | |||
230 | /** | ||
231 | * A comma-separated list of additional entities to be used. Entity names | ||
232 | * or numbers must be used in a form that excludes the `'&'` prefix and the `';'` ending. | ||
233 | * | ||
234 | * config.entities_additional = '#1049'; // Adds Cyrillic capital letter Short I (Й). | ||
235 | * | ||
236 | * @cfg {String} [entities_additional='#39' (The single quote (') character)] | ||
237 | * @member CKEDITOR.config | ||
238 | */ | ||
239 | CKEDITOR.config.entities_additional = '#39'; | ||
diff --git a/sources/plugins/fakeobjects/lang/af.js b/sources/plugins/fakeobjects/lang/af.js new file mode 100644 index 0000000..eb71716 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/af.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'af', { | ||
6 | anchor: 'Anker', | ||
7 | flash: 'Flash animasie', | ||
8 | hiddenfield: 'Verborge veld', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Onbekende objek' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/ar.js b/sources/plugins/fakeobjects/lang/ar.js new file mode 100644 index 0000000..c3dec93 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/ar.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'ar', { | ||
6 | anchor: 'إرساء', | ||
7 | flash: 'رسم متحرك بالفلاش', | ||
8 | hiddenfield: 'إدراج حقل خفي', | ||
9 | iframe: 'iframe', | ||
10 | unknown: 'عنصر غير معروف' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/bg.js b/sources/plugins/fakeobjects/lang/bg.js new file mode 100644 index 0000000..9d9a317 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/bg.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'bg', { | ||
6 | anchor: 'Кука', | ||
7 | flash: 'Флаш анимация', | ||
8 | hiddenfield: 'Скрито поле', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Неизвестен обект' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/bn.js b/sources/plugins/fakeobjects/lang/bn.js new file mode 100644 index 0000000..83e5e2c --- /dev/null +++ b/sources/plugins/fakeobjects/lang/bn.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'bn', { | ||
6 | anchor: 'Anchor', // MISSING | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'Hidden Field', // MISSING | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/bs.js b/sources/plugins/fakeobjects/lang/bs.js new file mode 100644 index 0000000..6495f67 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/bs.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'bs', { | ||
6 | anchor: 'Anchor', | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'Hidden Field', // MISSING | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/ca.js b/sources/plugins/fakeobjects/lang/ca.js new file mode 100644 index 0000000..eff05e0 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/ca.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'ca', { | ||
6 | anchor: 'Àncora', | ||
7 | flash: 'Animació Flash', | ||
8 | hiddenfield: 'Camp ocult', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Objecte desconegut' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/cs.js b/sources/plugins/fakeobjects/lang/cs.js new file mode 100644 index 0000000..66706f8 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/cs.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'cs', { | ||
6 | anchor: 'Záložka', | ||
7 | flash: 'Flash animace', | ||
8 | hiddenfield: 'Skryté pole', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Neznámý objekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/cy.js b/sources/plugins/fakeobjects/lang/cy.js new file mode 100644 index 0000000..f1f359c --- /dev/null +++ b/sources/plugins/fakeobjects/lang/cy.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'cy', { | ||
6 | anchor: 'Angor', | ||
7 | flash: 'Animeiddiant Flash', | ||
8 | hiddenfield: 'Maes Cudd', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Gwrthrych Anhysbys' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/da.js b/sources/plugins/fakeobjects/lang/da.js new file mode 100644 index 0000000..b9d291c --- /dev/null +++ b/sources/plugins/fakeobjects/lang/da.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'da', { | ||
6 | anchor: 'Anker', | ||
7 | flash: 'Flashanimation', | ||
8 | hiddenfield: 'Skjult felt', | ||
9 | iframe: 'Iframe', | ||
10 | unknown: 'Ukendt objekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/de-ch.js b/sources/plugins/fakeobjects/lang/de-ch.js new file mode 100644 index 0000000..866e26b --- /dev/null +++ b/sources/plugins/fakeobjects/lang/de-ch.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'de-ch', { | ||
6 | anchor: 'Anker', | ||
7 | flash: 'Flash-Animation', | ||
8 | hiddenfield: 'Verstecktes Feld', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Unbekanntes Objekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/de.js b/sources/plugins/fakeobjects/lang/de.js new file mode 100644 index 0000000..508e5ba --- /dev/null +++ b/sources/plugins/fakeobjects/lang/de.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'de', { | ||
6 | anchor: 'Anker', | ||
7 | flash: 'Flash-Animation', | ||
8 | hiddenfield: 'Verstecktes Feld', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Unbekanntes Objekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/el.js b/sources/plugins/fakeobjects/lang/el.js new file mode 100644 index 0000000..46852d8 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/el.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'el', { | ||
6 | anchor: 'Άγκυρα', | ||
7 | flash: 'Ταινία Flash', | ||
8 | hiddenfield: 'Κρυφό Πεδίο', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Άγνωστο Αντικείμενο' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/en-au.js b/sources/plugins/fakeobjects/lang/en-au.js new file mode 100644 index 0000000..ec075ff --- /dev/null +++ b/sources/plugins/fakeobjects/lang/en-au.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'en-au', { | ||
6 | anchor: 'Anchor', // MISSING | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'Hidden Field', // MISSING | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/en-ca.js b/sources/plugins/fakeobjects/lang/en-ca.js new file mode 100644 index 0000000..11c5e00 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/en-ca.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'en-ca', { | ||
6 | anchor: 'Anchor', // MISSING | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'Hidden Field', // MISSING | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/en-gb.js b/sources/plugins/fakeobjects/lang/en-gb.js new file mode 100644 index 0000000..4b91eba --- /dev/null +++ b/sources/plugins/fakeobjects/lang/en-gb.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'en-gb', { | ||
6 | anchor: 'Anchor', | ||
7 | flash: 'Flash Animation', | ||
8 | hiddenfield: 'Hidden Field', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Unknown Object' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/en.js b/sources/plugins/fakeobjects/lang/en.js new file mode 100644 index 0000000..c86f562 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/en.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'en', { | ||
6 | anchor: 'Anchor', | ||
7 | flash: 'Flash Animation', | ||
8 | hiddenfield: 'Hidden Field', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Unknown Object' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/eo.js b/sources/plugins/fakeobjects/lang/eo.js new file mode 100644 index 0000000..3a9eb96 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/eo.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'eo', { | ||
6 | anchor: 'Ankro', | ||
7 | flash: 'FlaŝAnimacio', | ||
8 | hiddenfield: 'Kaŝita kampo', | ||
9 | iframe: 'Enlinia Kadro (IFrame)', | ||
10 | unknown: 'Nekonata objekto' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/es.js b/sources/plugins/fakeobjects/lang/es.js new file mode 100644 index 0000000..9eadf45 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/es.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'es', { | ||
6 | anchor: 'Ancla', | ||
7 | flash: 'Animación flash', | ||
8 | hiddenfield: 'Campo oculto', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Objeto desconocido' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/et.js b/sources/plugins/fakeobjects/lang/et.js new file mode 100644 index 0000000..dc7b354 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/et.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'et', { | ||
6 | anchor: 'Ankur', | ||
7 | flash: 'Flashi animatsioon', | ||
8 | hiddenfield: 'Varjatud väli', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Tundmatu objekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/eu.js b/sources/plugins/fakeobjects/lang/eu.js new file mode 100644 index 0000000..93c9dad --- /dev/null +++ b/sources/plugins/fakeobjects/lang/eu.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'eu', { | ||
6 | anchor: 'Aingura', | ||
7 | flash: 'Flash animazioa', | ||
8 | hiddenfield: 'Ezkutuko eremua', | ||
9 | iframe: 'IFrame-a', | ||
10 | unknown: 'Objektu ezezaguna' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/fa.js b/sources/plugins/fakeobjects/lang/fa.js new file mode 100644 index 0000000..bc9f8b5 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/fa.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'fa', { | ||
6 | anchor: 'لنگر', | ||
7 | flash: 'انیمشن فلش', | ||
8 | hiddenfield: 'فیلد پنهان', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'شیء ناشناخته' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/fi.js b/sources/plugins/fakeobjects/lang/fi.js new file mode 100644 index 0000000..07e302d --- /dev/null +++ b/sources/plugins/fakeobjects/lang/fi.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'fi', { | ||
6 | anchor: 'Ankkuri', | ||
7 | flash: 'Flash animaatio', | ||
8 | hiddenfield: 'Piilokenttä', | ||
9 | iframe: 'IFrame-kehys', | ||
10 | unknown: 'Tuntematon objekti' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/fo.js b/sources/plugins/fakeobjects/lang/fo.js new file mode 100644 index 0000000..604d5dc --- /dev/null +++ b/sources/plugins/fakeobjects/lang/fo.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'fo', { | ||
6 | anchor: 'Anchor', | ||
7 | flash: 'Flash Animation', | ||
8 | hiddenfield: 'Fjaldur teigur', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Ókent Object' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/fr-ca.js b/sources/plugins/fakeobjects/lang/fr-ca.js new file mode 100644 index 0000000..b4e6d2f --- /dev/null +++ b/sources/plugins/fakeobjects/lang/fr-ca.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'fr-ca', { | ||
6 | anchor: 'Ancre', | ||
7 | flash: 'Animation Flash', | ||
8 | hiddenfield: 'Champ caché', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Objet inconnu' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/fr.js b/sources/plugins/fakeobjects/lang/fr.js new file mode 100644 index 0000000..6ab4497 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/fr.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'fr', { | ||
6 | anchor: 'Ancre', | ||
7 | flash: 'Animation Flash', | ||
8 | hiddenfield: 'Champ caché', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Objet inconnu' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/gl.js b/sources/plugins/fakeobjects/lang/gl.js new file mode 100644 index 0000000..3209234 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/gl.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'gl', { | ||
6 | anchor: 'Ancoraxe', | ||
7 | flash: 'Animación «Flash»', | ||
8 | hiddenfield: 'Campo agochado', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Obxecto descoñecido' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/gu.js b/sources/plugins/fakeobjects/lang/gu.js new file mode 100644 index 0000000..8d7f364 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/gu.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'gu', { | ||
6 | anchor: 'અનકર', | ||
7 | flash: 'ફ્લેશ ', | ||
8 | hiddenfield: 'હિડન ', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'અનનોન ઓબ્જેક્ટ' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/he.js b/sources/plugins/fakeobjects/lang/he.js new file mode 100644 index 0000000..393ceb1 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/he.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'he', { | ||
6 | anchor: 'עוגן', | ||
7 | flash: 'סרטון פלאש', | ||
8 | hiddenfield: 'שדה חבוי', | ||
9 | iframe: 'חלון פנימי (iframe)', | ||
10 | unknown: 'אובייקט לא ידוע' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/hi.js b/sources/plugins/fakeobjects/lang/hi.js new file mode 100644 index 0000000..c3e6903 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/hi.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'hi', { | ||
6 | anchor: 'ऐंकर इन्सर्ट/संपादन', | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'गुप्त फ़ील्ड', | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/hr.js b/sources/plugins/fakeobjects/lang/hr.js new file mode 100644 index 0000000..8a321a0 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/hr.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'hr', { | ||
6 | anchor: 'Sidro', | ||
7 | flash: 'Flash animacija', | ||
8 | hiddenfield: 'Sakriveno polje', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Nepoznati objekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/hu.js b/sources/plugins/fakeobjects/lang/hu.js new file mode 100644 index 0000000..abe5ed7 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/hu.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'hu', { | ||
6 | anchor: 'Horgony', | ||
7 | flash: 'Flash animáció', | ||
8 | hiddenfield: 'Rejtett mezõ', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Ismeretlen objektum' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/id.js b/sources/plugins/fakeobjects/lang/id.js new file mode 100644 index 0000000..fad6ad1 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/id.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'id', { | ||
6 | anchor: 'Anchor', // MISSING | ||
7 | flash: 'Animasi Flash', | ||
8 | hiddenfield: 'Kolom Tersembunyi', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Obyek Tak Dikenal' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/is.js b/sources/plugins/fakeobjects/lang/is.js new file mode 100644 index 0000000..c71602b --- /dev/null +++ b/sources/plugins/fakeobjects/lang/is.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'is', { | ||
6 | anchor: 'Anchor', // MISSING | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'Hidden Field', // MISSING | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/it.js b/sources/plugins/fakeobjects/lang/it.js new file mode 100644 index 0000000..ba893e2 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/it.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'it', { | ||
6 | anchor: 'Ancora', | ||
7 | flash: 'Animazione Flash', | ||
8 | hiddenfield: 'Campo Nascosto', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Oggetto sconosciuto' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/ja.js b/sources/plugins/fakeobjects/lang/ja.js new file mode 100644 index 0000000..af24002 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/ja.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'ja', { | ||
6 | anchor: 'アンカー', | ||
7 | flash: 'Flash Animation', | ||
8 | hiddenfield: '不可視フィールド', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Unknown Object' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/ka.js b/sources/plugins/fakeobjects/lang/ka.js new file mode 100644 index 0000000..cc65e9a --- /dev/null +++ b/sources/plugins/fakeobjects/lang/ka.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'ka', { | ||
6 | anchor: 'ღუზა', | ||
7 | flash: 'Flash ანიმაცია', | ||
8 | hiddenfield: 'მალული ველი', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'უცნობი ობიექტი' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/km.js b/sources/plugins/fakeobjects/lang/km.js new file mode 100644 index 0000000..a8c1a1d --- /dev/null +++ b/sources/plugins/fakeobjects/lang/km.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'km', { | ||
6 | anchor: 'យុថ្កា', | ||
7 | flash: 'Flash មានចលនា', | ||
8 | hiddenfield: 'វាលកំបាំង', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'វត្ថុមិនស្គាល់' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/ko.js b/sources/plugins/fakeobjects/lang/ko.js new file mode 100644 index 0000000..e9f97ac --- /dev/null +++ b/sources/plugins/fakeobjects/lang/ko.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'ko', { | ||
6 | anchor: '책갈피', | ||
7 | flash: '플래시 애니메이션', | ||
8 | hiddenfield: '숨은 입력 칸', | ||
9 | iframe: '아이프레임', | ||
10 | unknown: '알 수 없는 객체' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/ku.js b/sources/plugins/fakeobjects/lang/ku.js new file mode 100644 index 0000000..5ef378b --- /dev/null +++ b/sources/plugins/fakeobjects/lang/ku.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'ku', { | ||
6 | anchor: 'لەنگەر', | ||
7 | flash: 'فلاش', | ||
8 | hiddenfield: 'شاردنەوەی خانه', | ||
9 | iframe: 'لەچوارچێوە', | ||
10 | unknown: 'بەرکارێکی نەناسراو' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/lt.js b/sources/plugins/fakeobjects/lang/lt.js new file mode 100644 index 0000000..54a6ce6 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/lt.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'lt', { | ||
6 | anchor: 'Žymė', | ||
7 | flash: 'Flash animacija', | ||
8 | hiddenfield: 'Paslėptas laukas', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Nežinomas objektas' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/lv.js b/sources/plugins/fakeobjects/lang/lv.js new file mode 100644 index 0000000..81dbb2d --- /dev/null +++ b/sources/plugins/fakeobjects/lang/lv.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'lv', { | ||
6 | anchor: 'Iezīme', | ||
7 | flash: 'Flash animācija', | ||
8 | hiddenfield: 'Slēpts lauks', | ||
9 | iframe: 'Iframe', | ||
10 | unknown: 'Nezināms objekts' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/mk.js b/sources/plugins/fakeobjects/lang/mk.js new file mode 100644 index 0000000..a6871cc --- /dev/null +++ b/sources/plugins/fakeobjects/lang/mk.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'mk', { | ||
6 | anchor: 'Anchor', | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'Скриено поле', | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/mn.js b/sources/plugins/fakeobjects/lang/mn.js new file mode 100644 index 0000000..a8f6e00 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/mn.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'mn', { | ||
6 | anchor: 'Зангуу', | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'Нууц талбар', | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/ms.js b/sources/plugins/fakeobjects/lang/ms.js new file mode 100644 index 0000000..4008746 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/ms.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'ms', { | ||
6 | anchor: 'Anchor', // MISSING | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'Hidden Field', // MISSING | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/nb.js b/sources/plugins/fakeobjects/lang/nb.js new file mode 100644 index 0000000..8d1cb97 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/nb.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'nb', { | ||
6 | anchor: 'Anker', | ||
7 | flash: 'Flash-animasjon', | ||
8 | hiddenfield: 'Skjult felt', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Ukjent objekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/nl.js b/sources/plugins/fakeobjects/lang/nl.js new file mode 100644 index 0000000..e997794 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/nl.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'nl', { | ||
6 | anchor: 'Interne link', | ||
7 | flash: 'Flash animatie', | ||
8 | hiddenfield: 'Verborgen veld', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Onbekend object' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/no.js b/sources/plugins/fakeobjects/lang/no.js new file mode 100644 index 0000000..1b35b24 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/no.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'no', { | ||
6 | anchor: 'Anker', | ||
7 | flash: 'Flash-animasjon', | ||
8 | hiddenfield: 'Skjult felt', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Ukjent objekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/pl.js b/sources/plugins/fakeobjects/lang/pl.js new file mode 100644 index 0000000..6555db9 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/pl.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'pl', { | ||
6 | anchor: 'Kotwica', | ||
7 | flash: 'Animacja Flash', | ||
8 | hiddenfield: 'Pole ukryte', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Nieznany obiekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/pt-br.js b/sources/plugins/fakeobjects/lang/pt-br.js new file mode 100644 index 0000000..70b4c28 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/pt-br.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'pt-br', { | ||
6 | anchor: 'Âncora', | ||
7 | flash: 'Animação em Flash', | ||
8 | hiddenfield: 'Campo Oculto', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Objeto desconhecido' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/pt.js b/sources/plugins/fakeobjects/lang/pt.js new file mode 100644 index 0000000..9ca5f62 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/pt.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'pt', { | ||
6 | anchor: ' Inserir/Editar Âncora', | ||
7 | flash: 'Animação Flash', | ||
8 | hiddenfield: 'Campo oculto', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Objeto Desconhecido' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/ro.js b/sources/plugins/fakeobjects/lang/ro.js new file mode 100644 index 0000000..882bb3a --- /dev/null +++ b/sources/plugins/fakeobjects/lang/ro.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'ro', { | ||
6 | anchor: 'Inserează/Editează ancoră', | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'Câmp ascuns (HiddenField)', | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/ru.js b/sources/plugins/fakeobjects/lang/ru.js new file mode 100644 index 0000000..fe94054 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/ru.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'ru', { | ||
6 | anchor: 'Якорь', | ||
7 | flash: 'Flash анимация', | ||
8 | hiddenfield: 'Скрытое поле', | ||
9 | iframe: 'iFrame', | ||
10 | unknown: 'Неизвестный объект' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/si.js b/sources/plugins/fakeobjects/lang/si.js new file mode 100644 index 0000000..7af0c8e --- /dev/null +++ b/sources/plugins/fakeobjects/lang/si.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'si', { | ||
6 | anchor: 'ආධාරය', | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'සැඟවුණු ප්රදේශය', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/sk.js b/sources/plugins/fakeobjects/lang/sk.js new file mode 100644 index 0000000..384b76c --- /dev/null +++ b/sources/plugins/fakeobjects/lang/sk.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'sk', { | ||
6 | anchor: 'Kotva', | ||
7 | flash: 'Flash animácia', | ||
8 | hiddenfield: 'Skryté pole', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Neznámy objekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/sl.js b/sources/plugins/fakeobjects/lang/sl.js new file mode 100644 index 0000000..892725a --- /dev/null +++ b/sources/plugins/fakeobjects/lang/sl.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'sl', { | ||
6 | anchor: 'Sidro', | ||
7 | flash: 'Flash animacija', | ||
8 | hiddenfield: 'Skrito polje', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Neznan objekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/sq.js b/sources/plugins/fakeobjects/lang/sq.js new file mode 100644 index 0000000..6c0026a --- /dev/null +++ b/sources/plugins/fakeobjects/lang/sq.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'sq', { | ||
6 | anchor: 'Spirancë', | ||
7 | flash: 'Objekt flash', | ||
8 | hiddenfield: 'Fushë e fshehur', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Objekt i Panjohur' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/sr-latn.js b/sources/plugins/fakeobjects/lang/sr-latn.js new file mode 100644 index 0000000..36e66f7 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/sr-latn.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'sr-latn', { | ||
6 | anchor: 'Unesi/izmeni sidro', | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'Skriveno polje', | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/sr.js b/sources/plugins/fakeobjects/lang/sr.js new file mode 100644 index 0000000..05c6404 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/sr.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'sr', { | ||
6 | anchor: 'Anchor', // MISSING | ||
7 | flash: 'Flash Animation', // MISSING | ||
8 | hiddenfield: 'Hidden Field', // MISSING | ||
9 | iframe: 'IFrame', // MISSING | ||
10 | unknown: 'Unknown Object' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/sv.js b/sources/plugins/fakeobjects/lang/sv.js new file mode 100644 index 0000000..2108b28 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/sv.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'sv', { | ||
6 | anchor: 'Ankare', | ||
7 | flash: 'Flashanimation', | ||
8 | hiddenfield: 'Gömt fält', | ||
9 | iframe: 'iFrame', | ||
10 | unknown: 'Okänt objekt' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/th.js b/sources/plugins/fakeobjects/lang/th.js new file mode 100644 index 0000000..813e479 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/th.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'th', { | ||
6 | anchor: 'แทรก/แก้ไข Anchor', | ||
7 | flash: 'ภาพอนิเมชั่นแฟลช', | ||
8 | hiddenfield: 'ฮิดเดนฟิลด์', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'วัตถุไม่ทราบชนิด' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/tr.js b/sources/plugins/fakeobjects/lang/tr.js new file mode 100644 index 0000000..c68ab3e --- /dev/null +++ b/sources/plugins/fakeobjects/lang/tr.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'tr', { | ||
6 | anchor: 'Bağlantı', | ||
7 | flash: 'Flash Animasyonu', | ||
8 | hiddenfield: 'Gizli Alan', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Bilinmeyen Nesne' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/tt.js b/sources/plugins/fakeobjects/lang/tt.js new file mode 100644 index 0000000..df6b172 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/tt.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'tt', { | ||
6 | anchor: 'Якорь', | ||
7 | flash: 'Флеш анимациясы', | ||
8 | hiddenfield: 'Яшерен кыр', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Танылмаган объект' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/ug.js b/sources/plugins/fakeobjects/lang/ug.js new file mode 100644 index 0000000..3e6404f --- /dev/null +++ b/sources/plugins/fakeobjects/lang/ug.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'ug', { | ||
6 | anchor: 'لەڭگەرلىك نۇقتا', | ||
7 | flash: 'Flash جانلاندۇرۇم', | ||
8 | hiddenfield: 'يوشۇرۇن دائىرە', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'يوچۇن نەڭ' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/uk.js b/sources/plugins/fakeobjects/lang/uk.js new file mode 100644 index 0000000..9fcf85b --- /dev/null +++ b/sources/plugins/fakeobjects/lang/uk.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'uk', { | ||
6 | anchor: 'Якір', | ||
7 | flash: 'Flash-анімація', | ||
8 | hiddenfield: 'Приховані Поля', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Невідомий об\'єкт' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/vi.js b/sources/plugins/fakeobjects/lang/vi.js new file mode 100644 index 0000000..0d9d68b --- /dev/null +++ b/sources/plugins/fakeobjects/lang/vi.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'vi', { | ||
6 | anchor: 'Điểm neo', | ||
7 | flash: 'Flash', | ||
8 | hiddenfield: 'Trường ẩn', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: 'Đối tượng không rõ ràng' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/zh-cn.js b/sources/plugins/fakeobjects/lang/zh-cn.js new file mode 100644 index 0000000..5328ae6 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/zh-cn.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'zh-cn', { | ||
6 | anchor: '锚点', | ||
7 | flash: 'Flash 动画', | ||
8 | hiddenfield: '隐藏域', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: '未知对象' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/lang/zh.js b/sources/plugins/fakeobjects/lang/zh.js new file mode 100644 index 0000000..d4aea58 --- /dev/null +++ b/sources/plugins/fakeobjects/lang/zh.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'fakeobjects', 'zh', { | ||
6 | anchor: '錨點', | ||
7 | flash: 'Flash 動畫', | ||
8 | hiddenfield: '隱藏欄位', | ||
9 | iframe: 'IFrame', | ||
10 | unknown: '無法辨識的物件' | ||
11 | } ); | ||
diff --git a/sources/plugins/fakeobjects/plugin.js b/sources/plugins/fakeobjects/plugin.js new file mode 100644 index 0000000..a054a99 --- /dev/null +++ b/sources/plugins/fakeobjects/plugin.js | |||
@@ -0,0 +1,183 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | var cssStyle = CKEDITOR.htmlParser.cssStyle, | ||
8 | cssLength = CKEDITOR.tools.cssLength; | ||
9 | |||
10 | var cssLengthRegex = /^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i; | ||
11 | |||
12 | // Replacing the former CSS length value with the later one, with | ||
13 | // adjustment to the length unit. | ||
14 | function replaceCssLength( length1, length2 ) { | ||
15 | var parts1 = cssLengthRegex.exec( length1 ), | ||
16 | parts2 = cssLengthRegex.exec( length2 ); | ||
17 | |||
18 | // Omit pixel length unit when necessary, | ||
19 | // e.g. replaceCssLength( 10, '20px' ) -> 20 | ||
20 | if ( parts1 ) { | ||
21 | if ( !parts1[ 2 ] && parts2[ 2 ] == 'px' ) | ||
22 | return parts2[ 1 ]; | ||
23 | if ( parts1[ 2 ] == 'px' && !parts2[ 2 ] ) | ||
24 | return parts2[ 1 ] + 'px'; | ||
25 | } | ||
26 | |||
27 | return length2; | ||
28 | } | ||
29 | |||
30 | var htmlFilterRules = { | ||
31 | elements: { | ||
32 | $: function( element ) { | ||
33 | var attributes = element.attributes, | ||
34 | realHtml = attributes && attributes[ 'data-cke-realelement' ], | ||
35 | realFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( decodeURIComponent( realHtml ) ), | ||
36 | realElement = realFragment && realFragment.children[ 0 ]; | ||
37 | |||
38 | // Width/height in the fake object are subjected to clone into the real element. | ||
39 | if ( realElement && element.attributes[ 'data-cke-resizable' ] ) { | ||
40 | var styles = new cssStyle( element ).rules, | ||
41 | realAttrs = realElement.attributes, | ||
42 | width = styles.width, | ||
43 | height = styles.height; | ||
44 | |||
45 | width && ( realAttrs.width = replaceCssLength( realAttrs.width, width ) ); | ||
46 | height && ( realAttrs.height = replaceCssLength( realAttrs.height, height ) ); | ||
47 | } | ||
48 | |||
49 | return realElement; | ||
50 | } | ||
51 | } | ||
52 | }; | ||
53 | |||
54 | CKEDITOR.plugins.add( 'fakeobjects', { | ||
55 | // jscs:disable maximumLineLength | ||
56 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
57 | // jscs:enable maximumLineLength | ||
58 | |||
59 | init: function( editor ) { | ||
60 | // Allow image with all styles and classes plus src, alt and title attributes. | ||
61 | // We need them when fakeobject is pasted. | ||
62 | editor.filter.allow( 'img[!data-cke-realelement,src,alt,title](*){*}', 'fakeobjects' ); | ||
63 | }, | ||
64 | |||
65 | afterInit: function( editor ) { | ||
66 | var dataProcessor = editor.dataProcessor, | ||
67 | htmlFilter = dataProcessor && dataProcessor.htmlFilter; | ||
68 | |||
69 | if ( htmlFilter ) { | ||
70 | htmlFilter.addRules( htmlFilterRules, { | ||
71 | applyToAll: true | ||
72 | } ); | ||
73 | } | ||
74 | } | ||
75 | } ); | ||
76 | |||
77 | /** | ||
78 | * @member CKEDITOR.editor | ||
79 | * @todo | ||
80 | */ | ||
81 | CKEDITOR.editor.prototype.createFakeElement = function( realElement, className, realElementType, isResizable ) { | ||
82 | var lang = this.lang.fakeobjects, | ||
83 | label = lang[ realElementType ] || lang.unknown; | ||
84 | |||
85 | var attributes = { | ||
86 | 'class': className, | ||
87 | 'data-cke-realelement': encodeURIComponent( realElement.getOuterHtml() ), | ||
88 | 'data-cke-real-node-type': realElement.type, | ||
89 | alt: label, | ||
90 | title: label, | ||
91 | align: realElement.getAttribute( 'align' ) || '' | ||
92 | }; | ||
93 | |||
94 | // Do not set "src" on high-contrast so the alt text is displayed. (#8945) | ||
95 | if ( !CKEDITOR.env.hc ) | ||
96 | attributes.src = CKEDITOR.tools.transparentImageData; | ||
97 | |||
98 | if ( realElementType ) | ||
99 | attributes[ 'data-cke-real-element-type' ] = realElementType; | ||
100 | |||
101 | if ( isResizable ) { | ||
102 | attributes[ 'data-cke-resizable' ] = isResizable; | ||
103 | |||
104 | var fakeStyle = new cssStyle(); | ||
105 | |||
106 | var width = realElement.getAttribute( 'width' ), | ||
107 | height = realElement.getAttribute( 'height' ); | ||
108 | |||
109 | width && ( fakeStyle.rules.width = cssLength( width ) ); | ||
110 | height && ( fakeStyle.rules.height = cssLength( height ) ); | ||
111 | fakeStyle.populate( attributes ); | ||
112 | } | ||
113 | |||
114 | return this.document.createElement( 'img', { attributes: attributes } ); | ||
115 | }; | ||
116 | |||
117 | /** | ||
118 | * @member CKEDITOR.editor | ||
119 | * @todo | ||
120 | */ | ||
121 | CKEDITOR.editor.prototype.createFakeParserElement = function( realElement, className, realElementType, isResizable ) { | ||
122 | var lang = this.lang.fakeobjects, | ||
123 | label = lang[ realElementType ] || lang.unknown, | ||
124 | html; | ||
125 | |||
126 | var writer = new CKEDITOR.htmlParser.basicWriter(); | ||
127 | realElement.writeHtml( writer ); | ||
128 | html = writer.getHtml(); | ||
129 | |||
130 | var attributes = { | ||
131 | 'class': className, | ||
132 | 'data-cke-realelement': encodeURIComponent( html ), | ||
133 | 'data-cke-real-node-type': realElement.type, | ||
134 | alt: label, | ||
135 | title: label, | ||
136 | align: realElement.attributes.align || '' | ||
137 | }; | ||
138 | |||
139 | // Do not set "src" on high-contrast so the alt text is displayed. (#8945) | ||
140 | if ( !CKEDITOR.env.hc ) | ||
141 | attributes.src = CKEDITOR.tools.transparentImageData; | ||
142 | |||
143 | if ( realElementType ) | ||
144 | attributes[ 'data-cke-real-element-type' ] = realElementType; | ||
145 | |||
146 | if ( isResizable ) { | ||
147 | attributes[ 'data-cke-resizable' ] = isResizable; | ||
148 | var realAttrs = realElement.attributes, | ||
149 | fakeStyle = new cssStyle(); | ||
150 | |||
151 | var width = realAttrs.width, | ||
152 | height = realAttrs.height; | ||
153 | |||
154 | width !== undefined && ( fakeStyle.rules.width = cssLength( width ) ); | ||
155 | height !== undefined && ( fakeStyle.rules.height = cssLength( height ) ); | ||
156 | fakeStyle.populate( attributes ); | ||
157 | } | ||
158 | |||
159 | return new CKEDITOR.htmlParser.element( 'img', attributes ); | ||
160 | }; | ||
161 | |||
162 | /** | ||
163 | * @member CKEDITOR.editor | ||
164 | * @todo | ||
165 | */ | ||
166 | CKEDITOR.editor.prototype.restoreRealElement = function( fakeElement ) { | ||
167 | if ( fakeElement.data( 'cke-real-node-type' ) != CKEDITOR.NODE_ELEMENT ) | ||
168 | return null; | ||
169 | |||
170 | var element = CKEDITOR.dom.element.createFromHtml( decodeURIComponent( fakeElement.data( 'cke-realelement' ) ), this.document ); | ||
171 | |||
172 | if ( fakeElement.data( 'cke-resizable' ) ) { | ||
173 | var width = fakeElement.getStyle( 'width' ), | ||
174 | height = fakeElement.getStyle( 'height' ); | ||
175 | |||
176 | width && element.setAttribute( 'width', replaceCssLength( element.getAttribute( 'width' ), width ) ); | ||
177 | height && element.setAttribute( 'height', replaceCssLength( element.getAttribute( 'height' ), height ) ); | ||
178 | } | ||
179 | |||
180 | return element; | ||
181 | }; | ||
182 | |||
183 | } )(); | ||
diff --git a/sources/plugins/filebrowser/plugin.js b/sources/plugins/filebrowser/plugin.js new file mode 100644 index 0000000..6d27146 --- /dev/null +++ b/sources/plugins/filebrowser/plugin.js | |||
@@ -0,0 +1,573 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview The "filebrowser" plugin that adds support for file uploads and | ||
8 | * browsing. | ||
9 | * | ||
10 | * When a file is uploaded or selected inside the file browser, its URL is | ||
11 | * inserted automatically into a field defined in the <code>filebrowser</code> | ||
12 | * attribute. In order to specify a field that should be updated, pass the tab ID and | ||
13 | * the element ID, separated with a colon.<br /><br /> | ||
14 | * | ||
15 | * <strong>Example 1: (Browse)</strong> | ||
16 | * | ||
17 | * <pre> | ||
18 | * { | ||
19 | * type : 'button', | ||
20 | * id : 'browse', | ||
21 | * filebrowser : 'tabId:elementId', | ||
22 | * label : editor.lang.common.browseServer | ||
23 | * } | ||
24 | * </pre> | ||
25 | * | ||
26 | * If you set the <code>filebrowser</code> attribute for an element other than | ||
27 | * the <code>fileButton</code>, the <code>Browse</code> action will be triggered.<br /><br /> | ||
28 | * | ||
29 | * <strong>Example 2: (Quick Upload)</strong> | ||
30 | * | ||
31 | * <pre> | ||
32 | * { | ||
33 | * type : 'fileButton', | ||
34 | * id : 'uploadButton', | ||
35 | * filebrowser : 'tabId:elementId', | ||
36 | * label : editor.lang.common.uploadSubmit, | ||
37 | * 'for' : [ 'upload', 'upload' ] | ||
38 | * } | ||
39 | * </pre> | ||
40 | * | ||
41 | * If you set the <code>filebrowser</code> attribute for a <code>fileButton</code> | ||
42 | * element, the <code>QuickUpload</code> action will be executed.<br /><br /> | ||
43 | * | ||
44 | * The filebrowser plugin also supports more advanced configuration performed through | ||
45 | * a JavaScript object. | ||
46 | * | ||
47 | * The following settings are supported: | ||
48 | * | ||
49 | * <ul> | ||
50 | * <li><code>action</code> – <code>Browse</code> or <code>QuickUpload</code>.</li> | ||
51 | * <li><code>target</code> – the field to update in the <code><em>tabId:elementId</em></code> format.</li> | ||
52 | * <li><code>params</code> – additional arguments to be passed to the server connector (optional).</li> | ||
53 | * <li><code>onSelect</code> – a function to execute when the file is selected/uploaded (optional).</li> | ||
54 | * <li><code>url</code> – the URL to be called (optional).</li> | ||
55 | * </ul> | ||
56 | * | ||
57 | * <strong>Example 3: (Quick Upload)</strong> | ||
58 | * | ||
59 | * <pre> | ||
60 | * { | ||
61 | * type : 'fileButton', | ||
62 | * label : editor.lang.common.uploadSubmit, | ||
63 | * id : 'buttonId', | ||
64 | * filebrowser : | ||
65 | * { | ||
66 | * action : 'QuickUpload', // required | ||
67 | * target : 'tab1:elementId', // required | ||
68 | * params : // optional | ||
69 | * { | ||
70 | * type : 'Files', | ||
71 | * currentFolder : '/folder/' | ||
72 | * }, | ||
73 | * onSelect : function( fileUrl, errorMessage ) // optional | ||
74 | * { | ||
75 | * // Do not call the built-in selectFuntion. | ||
76 | * // return false; | ||
77 | * } | ||
78 | * }, | ||
79 | * 'for' : [ 'tab1', 'myFile' ] | ||
80 | * } | ||
81 | * </pre> | ||
82 | * | ||
83 | * Suppose you have a file element with an ID of <code>myFile</code>, a text | ||
84 | * field with an ID of <code>elementId</code> and a <code>fileButton</code>. | ||
85 | * If the <code>filebowser.url</code> attribute is not specified explicitly, | ||
86 | * the form action will be set to <code>filebrowser[<em>DialogWindowName</em>]UploadUrl</code> | ||
87 | * or, if not specified, to <code>filebrowserUploadUrl</code>. Additional parameters | ||
88 | * from the <code>params</code> object will be added to the query string. It is | ||
89 | * possible to create your own <code>uploadHandler</code> and cancel the built-in | ||
90 | * <code>updateTargetElement</code> command.<br /><br /> | ||
91 | * | ||
92 | * <strong>Example 4: (Browse)</strong> | ||
93 | * | ||
94 | * <pre> | ||
95 | * { | ||
96 | * type : 'button', | ||
97 | * id : 'buttonId', | ||
98 | * label : editor.lang.common.browseServer, | ||
99 | * filebrowser : | ||
100 | * { | ||
101 | * action : 'Browse', | ||
102 | * url : '/ckfinder/ckfinder.html&type=Images', | ||
103 | * target : 'tab1:elementId' | ||
104 | * } | ||
105 | * } | ||
106 | * </pre> | ||
107 | * | ||
108 | * In this example, when the button is pressed, the file browser will be opened in a | ||
109 | * popup window. If you do not specify the <code>filebrowser.url</code> attribute, | ||
110 | * <code>filebrowser[<em>DialogName</em>]BrowseUrl</code> or | ||
111 | * <code>filebrowserBrowseUrl</code> will be used. After selecting a file in the file | ||
112 | * browser, an element with an ID of <code>elementId</code> will be updated. Just | ||
113 | * like in the third example, a custom <code>onSelect</code> function may be defined. | ||
114 | */ | ||
115 | |||
116 | ( function() { | ||
117 | // Default input element name for CSRF protection token. | ||
118 | var TOKEN_INPUT_NAME = 'ckCsrfToken'; | ||
119 | |||
120 | // Adds (additional) arguments to given url. | ||
121 | // | ||
122 | // @param {String} | ||
123 | // url The url. | ||
124 | // @param {Object} | ||
125 | // params Additional parameters. | ||
126 | function addQueryString( url, params ) { | ||
127 | var queryString = []; | ||
128 | |||
129 | if ( !params ) | ||
130 | return url; | ||
131 | else { | ||
132 | for ( var i in params ) | ||
133 | queryString.push( i + '=' + encodeURIComponent( params[ i ] ) ); | ||
134 | } | ||
135 | |||
136 | return url + ( ( url.indexOf( '?' ) != -1 ) ? '&' : '?' ) + queryString.join( '&' ); | ||
137 | } | ||
138 | |||
139 | // Make a string's first character uppercase. | ||
140 | // | ||
141 | // @param {String} | ||
142 | // str String. | ||
143 | function ucFirst( str ) { | ||
144 | str += ''; | ||
145 | var f = str.charAt( 0 ).toUpperCase(); | ||
146 | return f + str.substr( 1 ); | ||
147 | } | ||
148 | |||
149 | // The onlick function assigned to the 'Browse Server' button. Opens the | ||
150 | // file browser and updates target field when file is selected. | ||
151 | // | ||
152 | // @param {CKEDITOR.event} | ||
153 | // evt The event object. | ||
154 | function browseServer() { | ||
155 | var dialog = this.getDialog(); | ||
156 | var editor = dialog.getParentEditor(); | ||
157 | |||
158 | editor._.filebrowserSe = this; | ||
159 | |||
160 | var width = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowWidth' ] || editor.config.filebrowserWindowWidth || '80%'; | ||
161 | var height = editor.config[ 'filebrowser' + ucFirst( dialog.getName() ) + 'WindowHeight' ] || editor.config.filebrowserWindowHeight || '70%'; | ||
162 | |||
163 | var params = this.filebrowser.params || {}; | ||
164 | params.CKEditor = editor.name; | ||
165 | params.CKEditorFuncNum = editor._.filebrowserFn; | ||
166 | if ( !params.langCode ) | ||
167 | params.langCode = editor.langCode; | ||
168 | |||
169 | var url = addQueryString( this.filebrowser.url, params ); | ||
170 | // TODO: V4: Remove backward compatibility (#8163). | ||
171 | editor.popup( url, width, height, editor.config.filebrowserWindowFeatures || editor.config.fileBrowserWindowFeatures ); | ||
172 | } | ||
173 | |||
174 | // Appends token preventing CSRF attacks to the form of provided file input. | ||
175 | // | ||
176 | // @since 4.5.6 | ||
177 | // @param {CKEDITOR.dom.element} fileInput | ||
178 | function appendToken( fileInput ) { | ||
179 | var tokenElement; | ||
180 | var form = new CKEDITOR.dom.element( fileInput.$.form ); | ||
181 | |||
182 | if ( form ) { | ||
183 | // Check if token input element already exists. | ||
184 | tokenElement = form.$.elements[ TOKEN_INPUT_NAME ]; | ||
185 | |||
186 | // Create new if needed. | ||
187 | if ( !tokenElement ) { | ||
188 | tokenElement = new CKEDITOR.dom.element( 'input' ); | ||
189 | tokenElement.setAttributes( { | ||
190 | name: TOKEN_INPUT_NAME, | ||
191 | type: 'hidden' | ||
192 | } ); | ||
193 | |||
194 | form.append( tokenElement ); | ||
195 | } else { | ||
196 | tokenElement = new CKEDITOR.dom.element( tokenElement ); | ||
197 | } | ||
198 | |||
199 | tokenElement.setAttribute( 'value', CKEDITOR.tools.getCsrfToken() ); | ||
200 | } | ||
201 | } | ||
202 | |||
203 | // The onlick function assigned to the 'Upload' button. Makes the final | ||
204 | // decision whether form is really submitted and updates target field when | ||
205 | // file is uploaded. | ||
206 | // | ||
207 | // @param {CKEDITOR.event} | ||
208 | // evt The event object. | ||
209 | function uploadFile() { | ||
210 | var dialog = this.getDialog(); | ||
211 | var editor = dialog.getParentEditor(); | ||
212 | |||
213 | editor._.filebrowserSe = this; | ||
214 | |||
215 | // If user didn't select the file, stop the upload. | ||
216 | if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getInputElement().$.value ) | ||
217 | return false; | ||
218 | |||
219 | if ( !dialog.getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getAction() ) | ||
220 | return false; | ||
221 | |||
222 | return true; | ||
223 | } | ||
224 | |||
225 | // Setups the file element. | ||
226 | // | ||
227 | // @param {CKEDITOR.ui.dialog.file} | ||
228 | // fileInput The file element used during file upload. | ||
229 | // @param {Object} | ||
230 | // filebrowser Object containing filebrowser settings assigned to | ||
231 | // the fileButton associated with this file element. | ||
232 | function setupFileElement( editor, fileInput, filebrowser ) { | ||
233 | var params = filebrowser.params || {}; | ||
234 | params.CKEditor = editor.name; | ||
235 | params.CKEditorFuncNum = editor._.filebrowserFn; | ||
236 | if ( !params.langCode ) | ||
237 | params.langCode = editor.langCode; | ||
238 | |||
239 | fileInput.action = addQueryString( filebrowser.url, params ); | ||
240 | fileInput.filebrowser = filebrowser; | ||
241 | } | ||
242 | |||
243 | // Traverse through the content definition and attach filebrowser to | ||
244 | // elements with 'filebrowser' attribute. | ||
245 | // | ||
246 | // @param String | ||
247 | // dialogName Dialog name. | ||
248 | // @param {CKEDITOR.dialog.definitionObject} | ||
249 | // definition Dialog definition. | ||
250 | // @param {Array} | ||
251 | // elements Array of {@link CKEDITOR.dialog.definition.content} | ||
252 | // objects. | ||
253 | function attachFileBrowser( editor, dialogName, definition, elements ) { | ||
254 | if ( !elements || !elements.length ) | ||
255 | return; | ||
256 | |||
257 | var element; | ||
258 | |||
259 | for ( var i = elements.length; i--; ) { | ||
260 | element = elements[ i ]; | ||
261 | |||
262 | if ( element.type == 'hbox' || element.type == 'vbox' || element.type == 'fieldset' ) | ||
263 | attachFileBrowser( editor, dialogName, definition, element.children ); | ||
264 | |||
265 | if ( !element.filebrowser ) | ||
266 | continue; | ||
267 | |||
268 | if ( typeof element.filebrowser == 'string' ) { | ||
269 | var fb = { | ||
270 | action: ( element.type == 'fileButton' ) ? 'QuickUpload' : 'Browse', | ||
271 | target: element.filebrowser | ||
272 | }; | ||
273 | element.filebrowser = fb; | ||
274 | } | ||
275 | |||
276 | if ( element.filebrowser.action == 'Browse' ) { | ||
277 | var url = element.filebrowser.url; | ||
278 | if ( url === undefined ) { | ||
279 | url = editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'BrowseUrl' ]; | ||
280 | if ( url === undefined ) | ||
281 | url = editor.config.filebrowserBrowseUrl; | ||
282 | } | ||
283 | |||
284 | if ( url ) { | ||
285 | element.onClick = browseServer; | ||
286 | element.filebrowser.url = url; | ||
287 | element.hidden = false; | ||
288 | } | ||
289 | } else if ( element.filebrowser.action == 'QuickUpload' && element[ 'for' ] ) { | ||
290 | url = element.filebrowser.url; | ||
291 | if ( url === undefined ) { | ||
292 | url = editor.config[ 'filebrowser' + ucFirst( dialogName ) + 'UploadUrl' ]; | ||
293 | if ( url === undefined ) | ||
294 | url = editor.config.filebrowserUploadUrl; | ||
295 | } | ||
296 | |||
297 | if ( url ) { | ||
298 | var onClick = element.onClick; | ||
299 | element.onClick = function( evt ) { | ||
300 | // "element" here means the definition object, so we need to find the correct | ||
301 | // button to scope the event call | ||
302 | var sender = evt.sender; | ||
303 | if ( onClick && onClick.call( sender, evt ) === false ) | ||
304 | return false; | ||
305 | |||
306 | if ( uploadFile.call( sender, evt ) ) { | ||
307 | var fileInput = sender.getDialog().getContentElement( this[ 'for' ][ 0 ], this[ 'for' ][ 1 ] ).getInputElement(); | ||
308 | |||
309 | // Append token preventing CSRF attacks. | ||
310 | appendToken( fileInput ); | ||
311 | return true; | ||
312 | } | ||
313 | |||
314 | |||
315 | return false; | ||
316 | }; | ||
317 | |||
318 | element.filebrowser.url = url; | ||
319 | element.hidden = false; | ||
320 | setupFileElement( editor, definition.getContents( element[ 'for' ][ 0 ] ).get( element[ 'for' ][ 1 ] ), element.filebrowser ); | ||
321 | } | ||
322 | } | ||
323 | } | ||
324 | } | ||
325 | |||
326 | // Updates the target element with the url of uploaded/selected file. | ||
327 | // | ||
328 | // @param {String} | ||
329 | // url The url of a file. | ||
330 | function updateTargetElement( url, sourceElement ) { | ||
331 | var dialog = sourceElement.getDialog(); | ||
332 | var targetElement = sourceElement.filebrowser.target || null; | ||
333 | |||
334 | // If there is a reference to targetElement, update it. | ||
335 | if ( targetElement ) { | ||
336 | var target = targetElement.split( ':' ); | ||
337 | var element = dialog.getContentElement( target[ 0 ], target[ 1 ] ); | ||
338 | if ( element ) { | ||
339 | element.setValue( url ); | ||
340 | dialog.selectPage( target[ 0 ] ); | ||
341 | } | ||
342 | } | ||
343 | } | ||
344 | |||
345 | // Returns true if filebrowser is configured in one of the elements. | ||
346 | // | ||
347 | // @param {CKEDITOR.dialog.definitionObject} | ||
348 | // definition Dialog definition. | ||
349 | // @param String | ||
350 | // tabId The tab id where element(s) can be found. | ||
351 | // @param String | ||
352 | // elementId The element id (or ids, separated with a semicolon) to check. | ||
353 | function isConfigured( definition, tabId, elementId ) { | ||
354 | if ( elementId.indexOf( ';' ) !== -1 ) { | ||
355 | var ids = elementId.split( ';' ); | ||
356 | for ( var i = 0; i < ids.length; i++ ) { | ||
357 | if ( isConfigured( definition, tabId, ids[ i ] ) ) | ||
358 | return true; | ||
359 | } | ||
360 | return false; | ||
361 | } | ||
362 | |||
363 | var elementFileBrowser = definition.getContents( tabId ).get( elementId ).filebrowser; | ||
364 | return ( elementFileBrowser && elementFileBrowser.url ); | ||
365 | } | ||
366 | |||
367 | function setUrl( fileUrl, data ) { | ||
368 | var dialog = this._.filebrowserSe.getDialog(), | ||
369 | targetInput = this._.filebrowserSe[ 'for' ], | ||
370 | onSelect = this._.filebrowserSe.filebrowser.onSelect; | ||
371 | |||
372 | if ( targetInput ) | ||
373 | dialog.getContentElement( targetInput[ 0 ], targetInput[ 1 ] ).reset(); | ||
374 | |||
375 | if ( typeof data == 'function' && data.call( this._.filebrowserSe ) === false ) | ||
376 | return; | ||
377 | |||
378 | if ( onSelect && onSelect.call( this._.filebrowserSe, fileUrl, data ) === false ) | ||
379 | return; | ||
380 | |||
381 | // The "data" argument may be used to pass the error message to the editor. | ||
382 | if ( typeof data == 'string' && data ) | ||
383 | alert( data ); // jshint ignore:line | ||
384 | |||
385 | if ( fileUrl ) | ||
386 | updateTargetElement( fileUrl, this._.filebrowserSe ); | ||
387 | } | ||
388 | |||
389 | CKEDITOR.plugins.add( 'filebrowser', { | ||
390 | requires: 'popup', | ||
391 | init: function( editor ) { | ||
392 | editor._.filebrowserFn = CKEDITOR.tools.addFunction( setUrl, editor ); | ||
393 | editor.on( 'destroy', function() { | ||
394 | CKEDITOR.tools.removeFunction( this._.filebrowserFn ); | ||
395 | } ); | ||
396 | } | ||
397 | } ); | ||
398 | |||
399 | CKEDITOR.on( 'dialogDefinition', function( evt ) { | ||
400 | // We require filebrowser plugin to be loaded. | ||
401 | if ( !evt.editor.plugins.filebrowser ) | ||
402 | return; | ||
403 | |||
404 | var definition = evt.data.definition, | ||
405 | element; | ||
406 | // Associate filebrowser to elements with 'filebrowser' attribute. | ||
407 | for ( var i = 0; i < definition.contents.length; ++i ) { | ||
408 | if ( ( element = definition.contents[ i ] ) ) { | ||
409 | attachFileBrowser( evt.editor, evt.data.name, definition, element.elements ); | ||
410 | if ( element.hidden && element.filebrowser ) | ||
411 | element.hidden = !isConfigured( definition, element.id, element.filebrowser ); | ||
412 | |||
413 | } | ||
414 | } | ||
415 | } ); | ||
416 | |||
417 | } )(); | ||
418 | |||
419 | /** | ||
420 | * The location of an external file manager that should be launched when the **Browse Server** | ||
421 | * button is pressed. If configured, the **Browse Server** button will appear in the | ||
422 | * **Link**, **Image**, and **Flash** dialog windows. | ||
423 | * | ||
424 | * Read more in the [documentation](#!/guide/dev_file_browse_upload) | ||
425 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html). | ||
426 | * | ||
427 | * config.filebrowserBrowseUrl = '/browser/browse.php'; | ||
428 | * | ||
429 | * @since 3.0 | ||
430 | * @cfg {String} [filebrowserBrowseUrl='' (empty string = disabled)] | ||
431 | * @member CKEDITOR.config | ||
432 | */ | ||
433 | |||
434 | /** | ||
435 | * The location of the script that handles file uploads. | ||
436 | * If set, the **Upload** tab will appear in the **Link**, **Image**, | ||
437 | * and **Flash** dialog windows. | ||
438 | * | ||
439 | * Read more in the [documentation](#!/guide/dev_file_browse_upload) | ||
440 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html). | ||
441 | * | ||
442 | * config.filebrowserUploadUrl = '/uploader/upload.php'; | ||
443 | * | ||
444 | * **Note:** This is a configuration setting for a [file browser/uploader](#!/guide/dev_file_browse_upload). | ||
445 | * To configure [uploading dropped or pasted files](#!/guide/dev_file_upload) use the {@link CKEDITOR.config#uploadUrl} | ||
446 | * configuration option. | ||
447 | * | ||
448 | * @since 3.0 | ||
449 | * @cfg {String} [filebrowserUploadUrl='' (empty string = disabled)] | ||
450 | * @member CKEDITOR.config | ||
451 | */ | ||
452 | |||
453 | /** | ||
454 | * The location of an external file manager that should be launched when the **Browse Server** | ||
455 | * button is pressed in the **Image** dialog window. | ||
456 | * | ||
457 | * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserBrowseUrl}. | ||
458 | * | ||
459 | * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-adding-file-manager-scripts-for-selected-dialog-windows) | ||
460 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html). | ||
461 | * | ||
462 | * config.filebrowserImageBrowseUrl = '/browser/browse.php?type=Images'; | ||
463 | * | ||
464 | * @since 3.0 | ||
465 | * @cfg {String} [filebrowserImageBrowseUrl='' (empty string = disabled)] | ||
466 | * @member CKEDITOR.config | ||
467 | */ | ||
468 | |||
469 | /** | ||
470 | * The location of an external file browser that should be launched when the **Browse Server** | ||
471 | * button is pressed in the **Flash** dialog window. | ||
472 | * | ||
473 | * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserBrowseUrl}. | ||
474 | * | ||
475 | * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-adding-file-manager-scripts-for-selected-dialog-windows) | ||
476 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html). | ||
477 | * | ||
478 | * config.filebrowserFlashBrowseUrl = '/browser/browse.php?type=Flash'; | ||
479 | * | ||
480 | * @since 3.0 | ||
481 | * @cfg {String} [filebrowserFlashBrowseUrl='' (empty string = disabled)] | ||
482 | * @member CKEDITOR.config | ||
483 | */ | ||
484 | |||
485 | /** | ||
486 | * The location of the script that handles file uploads in the **Image** dialog window. | ||
487 | * | ||
488 | * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserUploadUrl}. | ||
489 | * | ||
490 | * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-adding-file-manager-scripts-for-selected-dialog-windows) | ||
491 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html). | ||
492 | * | ||
493 | * config.filebrowserImageUploadUrl = '/uploader/upload.php?type=Images'; | ||
494 | * | ||
495 | * **Note:** This is a configuration setting for a [file browser/uploader](#!/guide/dev_file_browse_upload). | ||
496 | * To configure [uploading dropped or pasted files](#!/guide/dev_file_upload) use the {@link CKEDITOR.config#uploadUrl} | ||
497 | * or {@link CKEDITOR.config#imageUploadUrl} configuration option. | ||
498 | * | ||
499 | * @since 3.0 | ||
500 | * @cfg {String} [filebrowserImageUploadUrl='' (empty string = disabled)] | ||
501 | * @member CKEDITOR.config | ||
502 | */ | ||
503 | |||
504 | /** | ||
505 | * The location of the script that handles file uploads in the **Flash** dialog window. | ||
506 | * | ||
507 | * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserUploadUrl}. | ||
508 | * | ||
509 | * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-adding-file-manager-scripts-for-selected-dialog-windows) | ||
510 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html). | ||
511 | * | ||
512 | * config.filebrowserFlashUploadUrl = '/uploader/upload.php?type=Flash'; | ||
513 | * | ||
514 | * @since 3.0 | ||
515 | * @cfg {String} filebrowserFlashUploadUrl='' (empty string = disabled)] | ||
516 | * @member CKEDITOR.config | ||
517 | */ | ||
518 | |||
519 | /** | ||
520 | * The location of an external file manager that should be launched when the **Browse Server** | ||
521 | * button is pressed in the **Link** tab of the **Image** dialog window. | ||
522 | * | ||
523 | * If not set, CKEditor will use {@link CKEDITOR.config#filebrowserBrowseUrl}. | ||
524 | * | ||
525 | * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-adding-file-manager-scripts-for-selected-dialog-windows) | ||
526 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html). | ||
527 | * | ||
528 | * config.filebrowserImageBrowseLinkUrl = '/browser/browse.php'; | ||
529 | * | ||
530 | * @since 3.2 | ||
531 | * @cfg {String} [filebrowserImageBrowseLinkUrl='' (empty string = disabled)] | ||
532 | * @member CKEDITOR.config | ||
533 | */ | ||
534 | |||
535 | /** | ||
536 | * The features to use in the file manager popup window. | ||
537 | * | ||
538 | * config.filebrowserWindowFeatures = 'resizable=yes,scrollbars=no'; | ||
539 | * | ||
540 | * @since 3.4.1 | ||
541 | * @cfg {String} [filebrowserWindowFeatures='location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes'] | ||
542 | * @member CKEDITOR.config | ||
543 | */ | ||
544 | |||
545 | /** | ||
546 | * The width of the file manager popup window. It can be a number denoting a value in | ||
547 | * pixels or a percent string. | ||
548 | * | ||
549 | * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-file-manager-window-size) | ||
550 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html). | ||
551 | * | ||
552 | * config.filebrowserWindowWidth = 750; | ||
553 | * | ||
554 | * config.filebrowserWindowWidth = '50%'; | ||
555 | * | ||
556 | * @cfg {Number/String} [filebrowserWindowWidth='80%'] | ||
557 | * @member CKEDITOR.config | ||
558 | */ | ||
559 | |||
560 | /** | ||
561 | * The height of the file manager popup window. It can be a number denoting a value in | ||
562 | * pixels or a percent string. | ||
563 | * | ||
564 | * Read more in the [documentation](#!/guide/dev_file_manager_configuration-section-file-manager-window-size) | ||
565 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/fileupload.html). | ||
566 | * | ||
567 | * config.filebrowserWindowHeight = 580; | ||
568 | * | ||
569 | * config.filebrowserWindowHeight = '50%'; | ||
570 | * | ||
571 | * @cfg {Number/String} [filebrowserWindowHeight='70%'] | ||
572 | * @member CKEDITOR.config | ||
573 | */ | ||
diff --git a/sources/plugins/floatingspace/plugin.js b/sources/plugins/floatingspace/plugin.js new file mode 100644 index 0000000..70e0ce9 --- /dev/null +++ b/sources/plugins/floatingspace/plugin.js | |||
@@ -0,0 +1,406 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | var win = CKEDITOR.document.getWindow(), | ||
8 | pixelate = CKEDITOR.tools.cssLength; | ||
9 | |||
10 | CKEDITOR.plugins.add( 'floatingspace', { | ||
11 | init: function( editor ) { | ||
12 | // Add listener with lower priority than that in themedui creator. | ||
13 | // Thereby floatingspace will be created only if themedui wasn't used. | ||
14 | editor.on( 'loaded', function() { | ||
15 | attach( this ); | ||
16 | }, null, null, 20 ); | ||
17 | } | ||
18 | } ); | ||
19 | |||
20 | function scrollOffset( side ) { | ||
21 | var pageOffset = side == 'left' ? 'pageXOffset' : 'pageYOffset', | ||
22 | docScrollOffset = side == 'left' ? 'scrollLeft' : 'scrollTop'; | ||
23 | |||
24 | return ( pageOffset in win.$ ) ? win.$[ pageOffset ] : CKEDITOR.document.$.documentElement[ docScrollOffset ]; | ||
25 | } | ||
26 | |||
27 | function attach( editor ) { | ||
28 | var config = editor.config, | ||
29 | |||
30 | // Get the HTML for the predefined spaces. | ||
31 | topHtml = editor.fire( 'uiSpace', { space: 'top', html: '' } ).html, | ||
32 | |||
33 | // Re-positioning of the space. | ||
34 | layout = ( function() { | ||
35 | // Mode indicates the vertical aligning mode. | ||
36 | var mode, editable, | ||
37 | spaceRect, editorRect, viewRect, spaceHeight, pageScrollX, | ||
38 | |||
39 | // Allow minor adjustments of the float space from custom configs. | ||
40 | dockedOffsetX = config.floatSpaceDockedOffsetX || 0, | ||
41 | dockedOffsetY = config.floatSpaceDockedOffsetY || 0, | ||
42 | pinnedOffsetX = config.floatSpacePinnedOffsetX || 0, | ||
43 | pinnedOffsetY = config.floatSpacePinnedOffsetY || 0; | ||
44 | |||
45 | // Update the float space position. | ||
46 | function updatePos( pos, prop, val ) { | ||
47 | floatSpace.setStyle( prop, pixelate( val ) ); | ||
48 | floatSpace.setStyle( 'position', pos ); | ||
49 | } | ||
50 | |||
51 | // Change the current mode and update float space position accordingly. | ||
52 | function changeMode( newMode ) { | ||
53 | var editorPos = editable.getDocumentPosition(); | ||
54 | |||
55 | switch ( newMode ) { | ||
56 | case 'top': | ||
57 | updatePos( 'absolute', 'top', editorPos.y - spaceHeight - dockedOffsetY ); | ||
58 | break; | ||
59 | case 'pin': | ||
60 | updatePos( 'fixed', 'top', pinnedOffsetY ); | ||
61 | break; | ||
62 | case 'bottom': | ||
63 | updatePos( 'absolute', 'top', editorPos.y + ( editorRect.height || editorRect.bottom - editorRect.top ) + dockedOffsetY ); | ||
64 | break; | ||
65 | } | ||
66 | |||
67 | mode = newMode; | ||
68 | } | ||
69 | |||
70 | return function( evt ) { | ||
71 | // #10112 Do not fail on editable-less editor. | ||
72 | if ( !( editable = editor.editable() ) ) | ||
73 | return; | ||
74 | |||
75 | var show = ( evt && evt.name == 'focus' ); | ||
76 | |||
77 | // Show up the space on focus gain. | ||
78 | if ( show ) { | ||
79 | floatSpace.show(); | ||
80 | } | ||
81 | |||
82 | editor.fire( 'floatingSpaceLayout', { show: show } ); | ||
83 | |||
84 | // Reset the horizontal position for below measurement. | ||
85 | floatSpace.removeStyle( 'left' ); | ||
86 | floatSpace.removeStyle( 'right' ); | ||
87 | |||
88 | // Compute the screen position from the TextRectangle object would | ||
89 | // be very simple, even though the "width"/"height" property is not | ||
90 | // available for all, it's safe to figure that out from the rest. | ||
91 | |||
92 | // http://help.dottoro.com/ljgupwlp.php | ||
93 | spaceRect = floatSpace.getClientRect(); | ||
94 | editorRect = editable.getClientRect(); | ||
95 | viewRect = win.getViewPaneSize(); | ||
96 | spaceHeight = spaceRect.height; | ||
97 | pageScrollX = scrollOffset( 'left' ); | ||
98 | |||
99 | // We initialize it as pin mode. | ||
100 | if ( !mode ) { | ||
101 | mode = 'pin'; | ||
102 | changeMode( 'pin' ); | ||
103 | // Call for a refresh to the actual layout. | ||
104 | layout( evt ); | ||
105 | return; | ||
106 | } | ||
107 | |||
108 | // +------------------------ Viewport -+ \ | ||
109 | // | | |-> floatSpaceDockedOffsetY | ||
110 | // | ................................. | / | ||
111 | // | | | ||
112 | // | +------ Space -+ | | ||
113 | // | | | | | ||
114 | // | +--------------+ | | ||
115 | // | +------------------ Editor -+ | | ||
116 | // | | | | | ||
117 | // | ||
118 | if ( spaceHeight + dockedOffsetY <= editorRect.top ) | ||
119 | changeMode( 'top' ); | ||
120 | |||
121 | // +- - - - - - - - - Editor -+ | ||
122 | // | | | ||
123 | // +------------------------ Viewport -+ \ | ||
124 | // | | | | |-> floatSpacePinnedOffsetY | ||
125 | // | ................................. | / | ||
126 | // | +------ Space -+ | | | ||
127 | // | | | | | | ||
128 | // | +--------------+ | | | ||
129 | // | | | | | ||
130 | // | +---------------------------+ | | ||
131 | // +-----------------------------------+ | ||
132 | // | ||
133 | else if ( spaceHeight + dockedOffsetY > viewRect.height - editorRect.bottom ) | ||
134 | changeMode( 'pin' ); | ||
135 | |||
136 | // +- - - - - - - - - Editor -+ | ||
137 | // | | | ||
138 | // +------------------------ Viewport -+ \ | ||
139 | // | | | | |-> floatSpacePinnedOffsetY | ||
140 | // | ................................. | / | ||
141 | // | | | | | ||
142 | // | | | | | ||
143 | // | +---------------------------+ | | ||
144 | // | +------ Space -+ | | ||
145 | // | | | | | ||
146 | // | +--------------+ | | ||
147 | // | ||
148 | else | ||
149 | changeMode( 'bottom' ); | ||
150 | |||
151 | var mid = viewRect.width / 2, | ||
152 | alignSide, offset; | ||
153 | |||
154 | if ( config.floatSpacePreferRight ) { | ||
155 | alignSide = 'right'; | ||
156 | } else if ( editorRect.left > 0 && editorRect.right < viewRect.width && editorRect.width > spaceRect.width ) { | ||
157 | alignSide = config.contentsLangDirection == 'rtl' ? 'right' : 'left'; | ||
158 | } else { | ||
159 | alignSide = mid - editorRect.left > editorRect.right - mid ? 'left' : 'right'; | ||
160 | } | ||
161 | |||
162 | // (#9769) If viewport width is less than space width, | ||
163 | // make sure space never cross the left boundary of the viewport. | ||
164 | // In other words: top-left corner of the space is always visible. | ||
165 | if ( spaceRect.width > viewRect.width ) { | ||
166 | alignSide = 'left'; | ||
167 | offset = 0; | ||
168 | } | ||
169 | else { | ||
170 | if ( alignSide == 'left' ) { | ||
171 | // If the space rect fits into viewport, align it | ||
172 | // to the left edge of editor: | ||
173 | // | ||
174 | // +------------------------ Viewport -+ | ||
175 | // | | | ||
176 | // | +------------- Space -+ | | ||
177 | // | | | | | ||
178 | // | +---------------------+ | | ||
179 | // | +------------------ Editor -+ | | ||
180 | // | | | | | ||
181 | // | ||
182 | if ( editorRect.left > 0 ) | ||
183 | offset = editorRect.left; | ||
184 | |||
185 | // If the left part of the editor is cut off by the left | ||
186 | // edge of the viewport, stick the space to the viewport: | ||
187 | // | ||
188 | // +------------------------ Viewport -+ | ||
189 | // | | | ||
190 | // +---------------- Space -+ | | ||
191 | // | | | | ||
192 | // +------------------------+ | | ||
193 | // +----|------------- Editor -+ | | ||
194 | // | | | | | ||
195 | // | ||
196 | else | ||
197 | offset = 0; | ||
198 | } | ||
199 | else { | ||
200 | // If the space rect fits into viewport, align it | ||
201 | // to the right edge of editor: | ||
202 | // | ||
203 | // +------------------------ Viewport -+ | ||
204 | // | | | ||
205 | // | +------------- Space -+ | | ||
206 | // | | | | | ||
207 | // | +---------------------+ | | ||
208 | // | +------------------ Editor -+ | | ||
209 | // | | | | | ||
210 | // | ||
211 | if ( editorRect.right < viewRect.width ) | ||
212 | offset = viewRect.width - editorRect.right; | ||
213 | |||
214 | // If the right part of the editor is cut off by the right | ||
215 | // edge of the viewport, stick the space to the viewport: | ||
216 | // | ||
217 | // +------------------------ Viewport -+ | ||
218 | // | | | ||
219 | // | +------------- Space -+ | ||
220 | // | | | | ||
221 | // | +---------------------+ | ||
222 | // | +-----------------|- Editor -+ | ||
223 | // | | | | | ||
224 | // | ||
225 | else | ||
226 | offset = 0; | ||
227 | } | ||
228 | |||
229 | // (#9769) Finally, stick the space to the opposite side of | ||
230 | // the viewport when it's cut off horizontally on the left/right | ||
231 | // side like below. | ||
232 | // | ||
233 | // This trick reveals cut off space in some edge cases and | ||
234 | // hence it improves accessibility. | ||
235 | // | ||
236 | // +------------------------ Viewport -+ | ||
237 | // | | | ||
238 | // | +--------------------|-- Space -+ | ||
239 | // | | | | | ||
240 | // | +--------------------|----------+ | ||
241 | // | +------- Editor -+ | | ||
242 | // | | | | | ||
243 | // | ||
244 | // becomes: | ||
245 | // | ||
246 | // +------------------------ Viewport -+ | ||
247 | // | | | ||
248 | // | +----------------------- Space -+ | ||
249 | // | | | | ||
250 | // | +-------------------------------+ | ||
251 | // | +------- Editor -+ | | ||
252 | // | | | | | ||
253 | // | ||
254 | if ( offset + spaceRect.width > viewRect.width ) { | ||
255 | alignSide = alignSide == 'left' ? 'right' : 'left'; | ||
256 | offset = 0; | ||
257 | } | ||
258 | } | ||
259 | |||
260 | // Pin mode is fixed, so don't include scroll-x. | ||
261 | // (#9903) For mode is "top" or "bottom", add opposite scroll-x for right-aligned space. | ||
262 | var scroll = mode == 'pin' ? 0 : alignSide == 'left' ? pageScrollX : -pageScrollX; | ||
263 | |||
264 | floatSpace.setStyle( alignSide, pixelate( ( mode == 'pin' ? pinnedOffsetX : dockedOffsetX ) + offset + scroll ) ); | ||
265 | }; | ||
266 | } )(); | ||
267 | |||
268 | if ( topHtml ) { | ||
269 | var floatSpaceTpl = new CKEDITOR.template( | ||
270 | '<div' + | ||
271 | ' id="cke_{name}"' + | ||
272 | ' class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} ' + CKEDITOR.env.cssClass + '"' + | ||
273 | ' dir="{langDir}"' + | ||
274 | ' title="' + ( CKEDITOR.env.gecko ? ' ' : '' ) + '"' + | ||
275 | ' lang="{langCode}"' + | ||
276 | ' role="application"' + | ||
277 | ' style="{style}"' + | ||
278 | ( editor.title ? ' aria-labelledby="cke_{name}_arialbl"' : ' ' ) + | ||
279 | '>' + | ||
280 | ( editor.title ? '<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>' : ' ' ) + | ||
281 | '<div class="cke_inner">' + | ||
282 | '<div id="{topId}" class="cke_top" role="presentation">{content}</div>' + | ||
283 | '</div>' + | ||
284 | '</div>' ), | ||
285 | floatSpace = CKEDITOR.document.getBody().append( CKEDITOR.dom.element.createFromHtml( floatSpaceTpl.output( { | ||
286 | content: topHtml, | ||
287 | id: editor.id, | ||
288 | langDir: editor.lang.dir, | ||
289 | langCode: editor.langCode, | ||
290 | name: editor.name, | ||
291 | style: 'display:none;z-index:' + ( config.baseFloatZIndex - 1 ), | ||
292 | topId: editor.ui.spaceId( 'top' ), | ||
293 | voiceLabel: editor.title | ||
294 | } ) ) ), | ||
295 | |||
296 | // Use event buffers to reduce CPU load when tons of events are fired. | ||
297 | changeBuffer = CKEDITOR.tools.eventsBuffer( 500, layout ), | ||
298 | uiBuffer = CKEDITOR.tools.eventsBuffer( 100, layout ); | ||
299 | |||
300 | // There's no need for the floatSpace to be selectable. | ||
301 | floatSpace.unselectable(); | ||
302 | |||
303 | // Prevent clicking on non-buttons area of the space from blurring editor. | ||
304 | floatSpace.on( 'mousedown', function( evt ) { | ||
305 | evt = evt.data; | ||
306 | if ( !evt.getTarget().hasAscendant( 'a', 1 ) ) | ||
307 | evt.preventDefault(); | ||
308 | } ); | ||
309 | |||
310 | editor.on( 'focus', function( evt ) { | ||
311 | layout( evt ); | ||
312 | editor.on( 'change', changeBuffer.input ); | ||
313 | win.on( 'scroll', uiBuffer.input ); | ||
314 | win.on( 'resize', uiBuffer.input ); | ||
315 | } ); | ||
316 | |||
317 | editor.on( 'blur', function() { | ||
318 | floatSpace.hide(); | ||
319 | editor.removeListener( 'change', changeBuffer.input ); | ||
320 | win.removeListener( 'scroll', uiBuffer.input ); | ||
321 | win.removeListener( 'resize', uiBuffer.input ); | ||
322 | } ); | ||
323 | |||
324 | editor.on( 'destroy', function() { | ||
325 | win.removeListener( 'scroll', uiBuffer.input ); | ||
326 | win.removeListener( 'resize', uiBuffer.input ); | ||
327 | floatSpace.clearCustomData(); | ||
328 | floatSpace.remove(); | ||
329 | } ); | ||
330 | |||
331 | // Handle initial focus. | ||
332 | if ( editor.focusManager.hasFocus ) | ||
333 | floatSpace.show(); | ||
334 | |||
335 | // Register this UI space to the focus manager. | ||
336 | editor.focusManager.add( floatSpace, 1 ); | ||
337 | } | ||
338 | } | ||
339 | } )(); | ||
340 | |||
341 | /** | ||
342 | * Along with {@link #floatSpaceDockedOffsetY} it defines the | ||
343 | * amount of offset (in pixels) between the float space and the editable left/right | ||
344 | * boundaries when the space element is docked on either side of the editable. | ||
345 | * | ||
346 | * config.floatSpaceDockedOffsetX = 10; | ||
347 | * | ||
348 | * @cfg {Number} [floatSpaceDockedOffsetX=0] | ||
349 | * @member CKEDITOR.config | ||
350 | */ | ||
351 | |||
352 | /** | ||
353 | * Along with {@link #floatSpaceDockedOffsetX} it defines the | ||
354 | * amount of offset (in pixels) between the float space and the editable top/bottom | ||
355 | * boundaries when the space element is docked on either side of the editable. | ||
356 | * | ||
357 | * config.floatSpaceDockedOffsetY = 10; | ||
358 | * | ||
359 | * @cfg {Number} [floatSpaceDockedOffsetY=0] | ||
360 | * @member CKEDITOR.config | ||
361 | */ | ||
362 | |||
363 | /** | ||
364 | * Along with {@link #floatSpacePinnedOffsetY} it defines the | ||
365 | * amount of offset (in pixels) between the float space and the viewport boundaries | ||
366 | * when the space element is pinned. | ||
367 | * | ||
368 | * config.floatSpacePinnedOffsetX = 20; | ||
369 | * | ||
370 | * @cfg {Number} [floatSpacePinnedOffsetX=0] | ||
371 | * @member CKEDITOR.config | ||
372 | */ | ||
373 | |||
374 | /** | ||
375 | * Along with {@link #floatSpacePinnedOffsetX} it defines the | ||
376 | * amount of offset (in pixels) between the float space and the viewport boundaries | ||
377 | * when the space element is pinned. | ||
378 | * | ||
379 | * config.floatSpacePinnedOffsetY = 20; | ||
380 | * | ||
381 | * @cfg {Number} [floatSpacePinnedOffsetY=0] | ||
382 | * @member CKEDITOR.config | ||
383 | */ | ||
384 | |||
385 | /** | ||
386 | * Indicates that the float space should be aligned to the right side | ||
387 | * of the editable area rather than to the left (if possible). | ||
388 | * | ||
389 | * config.floatSpacePreferRight = true; | ||
390 | * | ||
391 | * @since 4.5 | ||
392 | * @cfg {Boolean} [floatSpacePreferRight=false] | ||
393 | * @member CKEDITOR.config | ||
394 | */ | ||
395 | |||
396 | /** | ||
397 | * Fired when the viewport or editor parameters change and the floating space needs to check and | ||
398 | * eventually update its position and dimensions. | ||
399 | * | ||
400 | * @since 4.5 | ||
401 | * @event floatingSpaceLayout | ||
402 | * @member CKEDITOR.editor | ||
403 | * @param {CKEDITOR.editor} editor The editor instance. | ||
404 | * @param data | ||
405 | * @param {Boolean} data.show True if the float space should show up as a result of this event. | ||
406 | */ | ||
diff --git a/sources/plugins/floatpanel/plugin.js b/sources/plugins/floatpanel/plugin.js new file mode 100644 index 0000000..0de3e5e --- /dev/null +++ b/sources/plugins/floatpanel/plugin.js | |||
@@ -0,0 +1,598 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.add( 'floatpanel', { | ||
7 | requires: 'panel' | ||
8 | } ); | ||
9 | |||
10 | ( function() { | ||
11 | var panels = {}; | ||
12 | |||
13 | function getPanel( editor, doc, parentElement, definition, level ) { | ||
14 | // Generates the panel key: docId-eleId-skinName-langDir[-uiColor][-CSSs][-level] | ||
15 | var key = CKEDITOR.tools.genKey( doc.getUniqueId(), parentElement.getUniqueId(), editor.lang.dir, editor.uiColor || '', definition.css || '', level || '' ), | ||
16 | panel = panels[ key ]; | ||
17 | |||
18 | if ( !panel ) { | ||
19 | panel = panels[ key ] = new CKEDITOR.ui.panel( doc, definition ); | ||
20 | panel.element = parentElement.append( CKEDITOR.dom.element.createFromHtml( panel.render( editor ), doc ) ); | ||
21 | |||
22 | panel.element.setStyles( { | ||
23 | display: 'none', | ||
24 | position: 'absolute' | ||
25 | } ); | ||
26 | } | ||
27 | |||
28 | return panel; | ||
29 | } | ||
30 | |||
31 | /** | ||
32 | * Represents a floating panel UI element. | ||
33 | * | ||
34 | * It is reused by rich combos, color combos, menus, etc. | ||
35 | * and it renders its content using {@link CKEDITOR.ui.panel}. | ||
36 | * | ||
37 | * @class | ||
38 | * @todo | ||
39 | */ | ||
40 | CKEDITOR.ui.floatPanel = CKEDITOR.tools.createClass( { | ||
41 | /** | ||
42 | * Creates a floatPanel class instance. | ||
43 | * | ||
44 | * @constructor | ||
45 | * @param {CKEDITOR.editor} editor | ||
46 | * @param {CKEDITOR.dom.element} parentElement | ||
47 | * @param {Object} definition Definition of the panel that will be floating. | ||
48 | * @param {Number} level | ||
49 | */ | ||
50 | $: function( editor, parentElement, definition, level ) { | ||
51 | definition.forceIFrame = 1; | ||
52 | |||
53 | // In case of editor with floating toolbar append panels that should float | ||
54 | // to the main UI element. | ||
55 | if ( definition.toolbarRelated && editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ) | ||
56 | parentElement = CKEDITOR.document.getById( 'cke_' + editor.name ); | ||
57 | |||
58 | var doc = parentElement.getDocument(), | ||
59 | panel = getPanel( editor, doc, parentElement, definition, level || 0 ), | ||
60 | element = panel.element, | ||
61 | iframe = element.getFirst(), | ||
62 | that = this; | ||
63 | |||
64 | // Disable native browser menu. (#4825) | ||
65 | element.disableContextMenu(); | ||
66 | |||
67 | this.element = element; | ||
68 | |||
69 | this._ = { | ||
70 | editor: editor, | ||
71 | // The panel that will be floating. | ||
72 | panel: panel, | ||
73 | parentElement: parentElement, | ||
74 | definition: definition, | ||
75 | document: doc, | ||
76 | iframe: iframe, | ||
77 | children: [], | ||
78 | dir: editor.lang.dir, | ||
79 | showBlockParams: null | ||
80 | }; | ||
81 | |||
82 | editor.on( 'mode', hide ); | ||
83 | editor.on( 'resize', hide ); | ||
84 | |||
85 | // When resize of the window is triggered floatpanel should be repositioned according to new dimensions. | ||
86 | // #11724. Fixes issue with undesired panel hiding on Android and iOS. | ||
87 | doc.getWindow().on( 'resize', function() { | ||
88 | this.reposition(); | ||
89 | }, this ); | ||
90 | |||
91 | // We need a wrapper because events implementation doesn't allow to attach | ||
92 | // one listener more than once for the same event on the same object. | ||
93 | // Remember that floatPanel#hide is shared between all instances. | ||
94 | function hide() { | ||
95 | that.hide(); | ||
96 | } | ||
97 | }, | ||
98 | |||
99 | proto: { | ||
100 | /** | ||
101 | * @todo | ||
102 | */ | ||
103 | addBlock: function( name, block ) { | ||
104 | return this._.panel.addBlock( name, block ); | ||
105 | }, | ||
106 | |||
107 | /** | ||
108 | * @todo | ||
109 | */ | ||
110 | addListBlock: function( name, multiSelect ) { | ||
111 | return this._.panel.addListBlock( name, multiSelect ); | ||
112 | }, | ||
113 | |||
114 | /** | ||
115 | * @todo | ||
116 | */ | ||
117 | getBlock: function( name ) { | ||
118 | return this._.panel.getBlock( name ); | ||
119 | }, | ||
120 | |||
121 | /** | ||
122 | * Shows the panel block. | ||
123 | * | ||
124 | * @param {String} name | ||
125 | * @param {CKEDITOR.dom.element} offsetParent Positioned parent. | ||
126 | * @param {Number} corner | ||
127 | * | ||
128 | * * For LTR (left to right) oriented editor: | ||
129 | * * `1` = top-left | ||
130 | * * `2` = top-right | ||
131 | * * `3` = bottom-right | ||
132 | * * `4` = bottom-left | ||
133 | * * For RTL (right to left): | ||
134 | * * `1` = top-right | ||
135 | * * `2` = top-left | ||
136 | * * `3` = bottom-left | ||
137 | * * `4` = bottom-right | ||
138 | * | ||
139 | * @param {Number} [offsetX=0] | ||
140 | * @param {Number} [offsetY=0] | ||
141 | * @param {Function} [callback] A callback function executed when block positioning is done. | ||
142 | * @todo what do exactly these params mean (especially corner)? | ||
143 | */ | ||
144 | showBlock: function( name, offsetParent, corner, offsetX, offsetY, callback ) { | ||
145 | var panel = this._.panel, | ||
146 | block = panel.showBlock( name ); | ||
147 | |||
148 | this._.showBlockParams = [].slice.call( arguments ); | ||
149 | this.allowBlur( false ); | ||
150 | |||
151 | // Record from where the focus is when open panel. | ||
152 | var editable = this._.editor.editable(); | ||
153 | this._.returnFocus = editable.hasFocus ? editable : new CKEDITOR.dom.element( CKEDITOR.document.$.activeElement ); | ||
154 | this._.hideTimeout = 0; | ||
155 | |||
156 | var element = this.element, | ||
157 | iframe = this._.iframe, | ||
158 | // Edge prefers iframe's window to the iframe, just like the rest of the browsers (#13143). | ||
159 | focused = CKEDITOR.env.ie && !CKEDITOR.env.edge ? iframe : new CKEDITOR.dom.window( iframe.$.contentWindow ), | ||
160 | doc = element.getDocument(), | ||
161 | positionedAncestor = this._.parentElement.getPositionedAncestor(), | ||
162 | position = offsetParent.getDocumentPosition( doc ), | ||
163 | positionedAncestorPosition = positionedAncestor ? positionedAncestor.getDocumentPosition( doc ) : { x: 0, y: 0 }, | ||
164 | rtl = this._.dir == 'rtl', | ||
165 | left = position.x + ( offsetX || 0 ) - positionedAncestorPosition.x, | ||
166 | top = position.y + ( offsetY || 0 ) - positionedAncestorPosition.y; | ||
167 | |||
168 | // Floating panels are off by (-1px, 0px) in RTL mode. (#3438) | ||
169 | if ( rtl && ( corner == 1 || corner == 4 ) ) | ||
170 | left += offsetParent.$.offsetWidth; | ||
171 | else if ( !rtl && ( corner == 2 || corner == 3 ) ) | ||
172 | left += offsetParent.$.offsetWidth - 1; | ||
173 | |||
174 | if ( corner == 3 || corner == 4 ) | ||
175 | top += offsetParent.$.offsetHeight - 1; | ||
176 | |||
177 | // Memorize offsetParent by it's ID. | ||
178 | this._.panel._.offsetParentId = offsetParent.getId(); | ||
179 | |||
180 | element.setStyles( { | ||
181 | top: top + 'px', | ||
182 | left: 0, | ||
183 | display: '' | ||
184 | } ); | ||
185 | |||
186 | // Don't use display or visibility style because we need to | ||
187 | // calculate the rendering layout later and focus the element. | ||
188 | element.setOpacity( 0 ); | ||
189 | |||
190 | // To allow the context menu to decrease back their width | ||
191 | element.getFirst().removeStyle( 'width' ); | ||
192 | |||
193 | // Report to focus manager. | ||
194 | this._.editor.focusManager.add( focused ); | ||
195 | |||
196 | // Configure the IFrame blur event. Do that only once. | ||
197 | if ( !this._.blurSet ) { | ||
198 | |||
199 | // With addEventListener compatible browsers, we must | ||
200 | // useCapture when registering the focus/blur events to | ||
201 | // guarantee they will be firing in all situations. (#3068, #3222 ) | ||
202 | CKEDITOR.event.useCapture = true; | ||
203 | |||
204 | focused.on( 'blur', function( ev ) { | ||
205 | // As we are using capture to register the listener, | ||
206 | // the blur event may get fired even when focusing | ||
207 | // inside the window itself, so we must ensure the | ||
208 | // target is out of it. | ||
209 | if ( !this.allowBlur() || ev.data.getPhase() != CKEDITOR.EVENT_PHASE_AT_TARGET ) | ||
210 | return; | ||
211 | |||
212 | if ( this.visible && !this._.activeChild ) { | ||
213 | // [iOS] Allow hide to be prevented if touch is bound | ||
214 | // to any parent of the iframe blur happens before touch (#10714). | ||
215 | if ( CKEDITOR.env.iOS ) { | ||
216 | if ( !this._.hideTimeout ) | ||
217 | this._.hideTimeout = CKEDITOR.tools.setTimeout( doHide, 0, this ); | ||
218 | } else { | ||
219 | doHide.call( this ); | ||
220 | } | ||
221 | } | ||
222 | |||
223 | function doHide() { | ||
224 | // Panel close is caused by user's navigating away the focus, e.g. click outside the panel. | ||
225 | // DO NOT restore focus in this case. | ||
226 | delete this._.returnFocus; | ||
227 | this.hide(); | ||
228 | } | ||
229 | }, this ); | ||
230 | |||
231 | focused.on( 'focus', function() { | ||
232 | this._.focused = true; | ||
233 | this.hideChild(); | ||
234 | this.allowBlur( true ); | ||
235 | }, this ); | ||
236 | |||
237 | // [iOS] if touch is bound to any parent of the iframe blur | ||
238 | // happens twice before touchstart and before touchend (#10714). | ||
239 | if ( CKEDITOR.env.iOS ) { | ||
240 | // Prevent false hiding on blur. | ||
241 | // We don't need to return focus here because touchend will fire anyway. | ||
242 | // If user scrolls and pointer gets out of the panel area touchend will also fire. | ||
243 | focused.on( 'touchstart', function() { | ||
244 | clearTimeout( this._.hideTimeout ); | ||
245 | }, this ); | ||
246 | |||
247 | // Set focus back to handle blur and hide panel when needed. | ||
248 | focused.on( 'touchend', function() { | ||
249 | this._.hideTimeout = 0; | ||
250 | this.focus(); | ||
251 | }, this ); | ||
252 | } | ||
253 | |||
254 | CKEDITOR.event.useCapture = false; | ||
255 | |||
256 | this._.blurSet = 1; | ||
257 | } | ||
258 | |||
259 | panel.onEscape = CKEDITOR.tools.bind( function( keystroke ) { | ||
260 | if ( this.onEscape && this.onEscape( keystroke ) === false ) | ||
261 | return false; | ||
262 | }, this ); | ||
263 | |||
264 | CKEDITOR.tools.setTimeout( function() { | ||
265 | var panelLoad = CKEDITOR.tools.bind( function() { | ||
266 | var target = element; | ||
267 | |||
268 | // Reset panel width as the new content can be narrower | ||
269 | // than the old one. (#9355) | ||
270 | target.removeStyle( 'width' ); | ||
271 | |||
272 | if ( block.autoSize ) { | ||
273 | var panelDoc = block.element.getDocument(); | ||
274 | var width = ( CKEDITOR.env.webkit ? block.element : panelDoc.getBody() ).$.scrollWidth; | ||
275 | |||
276 | // Account for extra height needed due to IE quirks box model bug: | ||
277 | // http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug | ||
278 | // (#3426) | ||
279 | if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && width > 0 ) | ||
280 | width += ( target.$.offsetWidth || 0 ) - ( target.$.clientWidth || 0 ) + 3; | ||
281 | |||
282 | // Add some extra pixels to improve the appearance. | ||
283 | width += 10; | ||
284 | |||
285 | target.setStyle( 'width', width + 'px' ); | ||
286 | |||
287 | var height = block.element.$.scrollHeight; | ||
288 | |||
289 | // Account for extra height needed due to IE quirks box model bug: | ||
290 | // http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug | ||
291 | // (#3426) | ||
292 | if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && height > 0 ) | ||
293 | height += ( target.$.offsetHeight || 0 ) - ( target.$.clientHeight || 0 ) + 3; | ||
294 | |||
295 | target.setStyle( 'height', height + 'px' ); | ||
296 | |||
297 | // Fix IE < 8 visibility. | ||
298 | panel._.currentBlock.element.setStyle( 'display', 'none' ).removeStyle( 'display' ); | ||
299 | } else { | ||
300 | target.removeStyle( 'height' ); | ||
301 | } | ||
302 | |||
303 | // Flip panel layout horizontally in RTL with known width. | ||
304 | if ( rtl ) | ||
305 | left -= element.$.offsetWidth; | ||
306 | |||
307 | // Pop the style now for measurement. | ||
308 | element.setStyle( 'left', left + 'px' ); | ||
309 | |||
310 | /* panel layout smartly fit the viewport size. */ | ||
311 | var panelElement = panel.element, | ||
312 | panelWindow = panelElement.getWindow(), | ||
313 | rect = element.$.getBoundingClientRect(), | ||
314 | viewportSize = panelWindow.getViewPaneSize(); | ||
315 | |||
316 | // Compensation for browsers that dont support "width" and "height". | ||
317 | var rectWidth = rect.width || rect.right - rect.left, | ||
318 | rectHeight = rect.height || rect.bottom - rect.top; | ||
319 | |||
320 | // Check if default horizontal layout is impossible. | ||
321 | var spaceAfter = rtl ? rect.right : viewportSize.width - rect.left, | ||
322 | spaceBefore = rtl ? viewportSize.width - rect.right : rect.left; | ||
323 | |||
324 | if ( rtl ) { | ||
325 | if ( spaceAfter < rectWidth ) { | ||
326 | // Flip to show on right. | ||
327 | if ( spaceBefore > rectWidth ) | ||
328 | left += rectWidth; | ||
329 | // Align to window left. | ||
330 | else if ( viewportSize.width > rectWidth ) | ||
331 | left = left - rect.left; | ||
332 | // Align to window right, never cutting the panel at right. | ||
333 | else | ||
334 | left = left - rect.right + viewportSize.width; | ||
335 | } | ||
336 | } else if ( spaceAfter < rectWidth ) { | ||
337 | // Flip to show on left. | ||
338 | if ( spaceBefore > rectWidth ) | ||
339 | left -= rectWidth; | ||
340 | // Align to window right. | ||
341 | else if ( viewportSize.width > rectWidth ) | ||
342 | left = left - rect.right + viewportSize.width; | ||
343 | // Align to window left, never cutting the panel at left. | ||
344 | else | ||
345 | left = left - rect.left; | ||
346 | } | ||
347 | |||
348 | |||
349 | // Check if the default vertical layout is possible. | ||
350 | var spaceBelow = viewportSize.height - rect.top, | ||
351 | spaceAbove = rect.top; | ||
352 | |||
353 | if ( spaceBelow < rectHeight ) { | ||
354 | // Flip to show above. | ||
355 | if ( spaceAbove > rectHeight ) | ||
356 | top -= rectHeight; | ||
357 | // Align to window bottom. | ||
358 | else if ( viewportSize.height > rectHeight ) | ||
359 | top = top - rect.bottom + viewportSize.height; | ||
360 | // Align to top, never cutting the panel at top. | ||
361 | else | ||
362 | top = top - rect.top; | ||
363 | } | ||
364 | |||
365 | // If IE is in RTL, we have troubles with absolute | ||
366 | // position and horizontal scrolls. Here we have a | ||
367 | // series of hacks to workaround it. (#6146) | ||
368 | if ( CKEDITOR.env.ie ) { | ||
369 | var offsetParent = new CKEDITOR.dom.element( element.$.offsetParent ), | ||
370 | scrollParent = offsetParent; | ||
371 | |||
372 | // Quirks returns <body>, but standards returns <html>. | ||
373 | if ( scrollParent.getName() == 'html' ) | ||
374 | scrollParent = scrollParent.getDocument().getBody(); | ||
375 | |||
376 | if ( scrollParent.getComputedStyle( 'direction' ) == 'rtl' ) { | ||
377 | // For IE8, there is not much logic on this, but it works. | ||
378 | if ( CKEDITOR.env.ie8Compat ) | ||
379 | left -= element.getDocument().getDocumentElement().$.scrollLeft * 2; | ||
380 | else | ||
381 | left -= ( offsetParent.$.scrollWidth - offsetParent.$.clientWidth ); | ||
382 | } | ||
383 | } | ||
384 | |||
385 | // Trigger the onHide event of the previously active panel to prevent | ||
386 | // incorrect styles from being applied (#6170) | ||
387 | var innerElement = element.getFirst(), | ||
388 | activePanel; | ||
389 | if ( ( activePanel = innerElement.getCustomData( 'activePanel' ) ) ) | ||
390 | activePanel.onHide && activePanel.onHide.call( this, 1 ); | ||
391 | innerElement.setCustomData( 'activePanel', this ); | ||
392 | |||
393 | element.setStyles( { | ||
394 | top: top + 'px', | ||
395 | left: left + 'px' | ||
396 | } ); | ||
397 | element.setOpacity( 1 ); | ||
398 | |||
399 | callback && callback(); | ||
400 | }, this ); | ||
401 | |||
402 | panel.isLoaded ? panelLoad() : panel.onLoad = panelLoad; | ||
403 | |||
404 | CKEDITOR.tools.setTimeout( function() { | ||
405 | var scrollTop = CKEDITOR.env.webkit && CKEDITOR.document.getWindow().getScrollPosition().y; | ||
406 | |||
407 | // Focus the panel frame first, so blur gets fired. | ||
408 | this.focus(); | ||
409 | |||
410 | // Focus the block now. | ||
411 | block.element.focus(); | ||
412 | |||
413 | // #10623, #10951 - restore the viewport's scroll position after focusing list element. | ||
414 | if ( CKEDITOR.env.webkit ) | ||
415 | CKEDITOR.document.getBody().$.scrollTop = scrollTop; | ||
416 | |||
417 | // We need this get fired manually because of unfired focus() function. | ||
418 | this.allowBlur( true ); | ||
419 | this._.editor.fire( 'panelShow', this ); | ||
420 | }, 0, this ); | ||
421 | }, CKEDITOR.env.air ? 200 : 0, this ); | ||
422 | this.visible = 1; | ||
423 | |||
424 | if ( this.onShow ) | ||
425 | this.onShow.call( this ); | ||
426 | }, | ||
427 | |||
428 | /** | ||
429 | * Repositions the panel with the same parameters that were used in the last {@link #showBlock} call. | ||
430 | * | ||
431 | * @since 4.5.4 | ||
432 | */ | ||
433 | reposition: function() { | ||
434 | var blockParams = this._.showBlockParams; | ||
435 | |||
436 | if ( this.visible && this._.showBlockParams ) { | ||
437 | this.hide(); | ||
438 | this.showBlock.apply( this, blockParams ); | ||
439 | } | ||
440 | }, | ||
441 | |||
442 | /** | ||
443 | * Restores the last focused element or simply focuses the panel window. | ||
444 | */ | ||
445 | focus: function() { | ||
446 | // Webkit requires to blur any previous focused page element, in | ||
447 | // order to properly fire the "focus" event. | ||
448 | if ( CKEDITOR.env.webkit ) { | ||
449 | var active = CKEDITOR.document.getActive(); | ||
450 | active && !active.equals( this._.iframe ) && active.$.blur(); | ||
451 | } | ||
452 | |||
453 | // Restore last focused element or simply focus panel window. | ||
454 | var focus = this._.lastFocused || this._.iframe.getFrameDocument().getWindow(); | ||
455 | focus.focus(); | ||
456 | }, | ||
457 | |||
458 | /** | ||
459 | * @todo | ||
460 | */ | ||
461 | blur: function() { | ||
462 | var doc = this._.iframe.getFrameDocument(), | ||
463 | active = doc.getActive(); | ||
464 | |||
465 | active && active.is( 'a' ) && ( this._.lastFocused = active ); | ||
466 | }, | ||
467 | |||
468 | /** | ||
469 | * Hides the panel. | ||
470 | * | ||
471 | * @todo | ||
472 | */ | ||
473 | hide: function( returnFocus ) { | ||
474 | if ( this.visible && ( !this.onHide || this.onHide.call( this ) !== true ) ) { | ||
475 | this.hideChild(); | ||
476 | // Blur previously focused element. (#6671) | ||
477 | CKEDITOR.env.gecko && this._.iframe.getFrameDocument().$.activeElement.blur(); | ||
478 | this.element.setStyle( 'display', 'none' ); | ||
479 | this.visible = 0; | ||
480 | this.element.getFirst().removeCustomData( 'activePanel' ); | ||
481 | |||
482 | // Return focus properly. (#6247) | ||
483 | var focusReturn = returnFocus && this._.returnFocus; | ||
484 | if ( focusReturn ) { | ||
485 | // Webkit requires focus moved out panel iframe first. | ||
486 | if ( CKEDITOR.env.webkit && focusReturn.type ) | ||
487 | focusReturn.getWindow().$.focus(); | ||
488 | |||
489 | focusReturn.focus(); | ||
490 | } | ||
491 | |||
492 | delete this._.lastFocused; | ||
493 | this._.showBlockParams = null; | ||
494 | |||
495 | this._.editor.fire( 'panelHide', this ); | ||
496 | } | ||
497 | }, | ||
498 | |||
499 | /** | ||
500 | * @todo | ||
501 | */ | ||
502 | allowBlur: function( allow ) { | ||
503 | // Prevent editor from hiding the panel. (#3222) | ||
504 | var panel = this._.panel; | ||
505 | if ( allow !== undefined ) | ||
506 | panel.allowBlur = allow; | ||
507 | |||
508 | return panel.allowBlur; | ||
509 | }, | ||
510 | |||
511 | /** | ||
512 | * Shows the specified panel as a child of one block of this one. | ||
513 | * | ||
514 | * @param {CKEDITOR.ui.floatPanel} panel | ||
515 | * @param {String} blockName | ||
516 | * @param {CKEDITOR.dom.element} offsetParent Positioned parent. | ||
517 | * @param {Number} corner | ||
518 | * | ||
519 | * * For LTR (left to right) oriented editor: | ||
520 | * * `1` = top-left | ||
521 | * * `2` = top-right | ||
522 | * * `3` = bottom-right | ||
523 | * * `4` = bottom-left | ||
524 | * * For RTL (right to left): | ||
525 | * * `1` = top-right | ||
526 | * * `2` = top-left | ||
527 | * * `3` = bottom-left | ||
528 | * * `4` = bottom-right | ||
529 | * | ||
530 | * @param {Number} [offsetX=0] | ||
531 | * @param {Number} [offsetY=0] | ||
532 | * @todo | ||
533 | */ | ||
534 | showAsChild: function( panel, blockName, offsetParent, corner, offsetX, offsetY ) { | ||
535 | // Skip reshowing of child which is already visible. | ||
536 | if ( this._.activeChild == panel && panel._.panel._.offsetParentId == offsetParent.getId() ) | ||
537 | return; | ||
538 | |||
539 | this.hideChild(); | ||
540 | |||
541 | panel.onHide = CKEDITOR.tools.bind( function() { | ||
542 | // Use a timeout, so we give time for this menu to get | ||
543 | // potentially focused. | ||
544 | CKEDITOR.tools.setTimeout( function() { | ||
545 | if ( !this._.focused ) | ||
546 | this.hide(); | ||
547 | }, 0, this ); | ||
548 | }, this ); | ||
549 | |||
550 | this._.activeChild = panel; | ||
551 | this._.focused = false; | ||
552 | |||
553 | panel.showBlock( blockName, offsetParent, corner, offsetX, offsetY ); | ||
554 | this.blur(); | ||
555 | |||
556 | /* #3767 IE: Second level menu may not have borders */ | ||
557 | if ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) { | ||
558 | setTimeout( function() { | ||
559 | panel.element.getChild( 0 ).$.style.cssText += ''; | ||
560 | }, 100 ); | ||
561 | } | ||
562 | }, | ||
563 | |||
564 | /** | ||
565 | * @todo | ||
566 | */ | ||
567 | hideChild: function( restoreFocus ) { | ||
568 | var activeChild = this._.activeChild; | ||
569 | |||
570 | if ( activeChild ) { | ||
571 | delete activeChild.onHide; | ||
572 | delete this._.activeChild; | ||
573 | activeChild.hide(); | ||
574 | |||
575 | // At this point focus should be moved back to parent panel. | ||
576 | restoreFocus && this.focus(); | ||
577 | } | ||
578 | } | ||
579 | } | ||
580 | } ); | ||
581 | |||
582 | CKEDITOR.on( 'instanceDestroyed', function() { | ||
583 | var isLastInstance = CKEDITOR.tools.isEmpty( CKEDITOR.instances ); | ||
584 | |||
585 | for ( var i in panels ) { | ||
586 | var panel = panels[ i ]; | ||
587 | // Safe to destroy it since there're no more instances.(#4241) | ||
588 | if ( isLastInstance ) | ||
589 | panel.destroy(); | ||
590 | // Panel might be used by other instances, just hide them.(#4552) | ||
591 | else | ||
592 | panel.element.hide(); | ||
593 | } | ||
594 | // Remove the registration. | ||
595 | isLastInstance && ( panels = {} ); | ||
596 | |||
597 | } ); | ||
598 | } )(); | ||
diff --git a/sources/plugins/format/lang/af.js b/sources/plugins/format/lang/af.js new file mode 100644 index 0000000..787e39f --- /dev/null +++ b/sources/plugins/format/lang/af.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'af', { | ||
6 | label: 'Opmaak', | ||
7 | panelTitle: 'Opmaak', | ||
8 | tag_address: 'Adres', | ||
9 | tag_div: 'Normaal (DIV)', | ||
10 | tag_h1: 'Opskrif 1', | ||
11 | tag_h2: 'Opskrif 2', | ||
12 | tag_h3: 'Opskrif 3', | ||
13 | tag_h4: 'Opskrif 4', | ||
14 | tag_h5: 'Opskrif 5', | ||
15 | tag_h6: 'Opskrif 6', | ||
16 | tag_p: 'Normaal', | ||
17 | tag_pre: 'Opgemaak' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/ar.js b/sources/plugins/format/lang/ar.js new file mode 100644 index 0000000..e891d1a --- /dev/null +++ b/sources/plugins/format/lang/ar.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'ar', { | ||
6 | label: 'تنسيق', | ||
7 | panelTitle: 'تنسيق الفقرة', | ||
8 | tag_address: 'عنوان', | ||
9 | tag_div: 'عادي (DIV)', | ||
10 | tag_h1: 'العنوان 1', | ||
11 | tag_h2: 'العنوان 2', | ||
12 | tag_h3: 'العنوان 3', | ||
13 | tag_h4: 'العنوان 4', | ||
14 | tag_h5: 'العنوان 5', | ||
15 | tag_h6: 'العنوان 6', | ||
16 | tag_p: 'عادي', | ||
17 | tag_pre: 'منسّق' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/bg.js b/sources/plugins/format/lang/bg.js new file mode 100644 index 0000000..c32fb94 --- /dev/null +++ b/sources/plugins/format/lang/bg.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'bg', { | ||
6 | label: 'Формат', | ||
7 | panelTitle: 'Формат', | ||
8 | tag_address: 'Адрес', | ||
9 | tag_div: 'Параграф (DIV)', | ||
10 | tag_h1: 'Заглавие 1', | ||
11 | tag_h2: 'Заглавие 2', | ||
12 | tag_h3: 'Заглавие 3', | ||
13 | tag_h4: 'Заглавие 4', | ||
14 | tag_h5: 'Заглавие 5', | ||
15 | tag_h6: 'Заглавие 6', | ||
16 | tag_p: 'Нормален', | ||
17 | tag_pre: 'Форматиран' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/bn.js b/sources/plugins/format/lang/bn.js new file mode 100644 index 0000000..43a2cdc --- /dev/null +++ b/sources/plugins/format/lang/bn.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'bn', { | ||
6 | label: 'ফন্ট ফরমেট', | ||
7 | panelTitle: 'ফন্ট ফরমেট', | ||
8 | tag_address: 'ঠিকানা', | ||
9 | tag_div: 'শীর্ষক (DIV)', | ||
10 | tag_h1: 'শীর্ষক ১', | ||
11 | tag_h2: 'শীর্ষক ২', | ||
12 | tag_h3: 'শীর্ষক ৩', | ||
13 | tag_h4: 'শীর্ষক ৪', | ||
14 | tag_h5: 'শীর্ষক ৫', | ||
15 | tag_h6: 'শীর্ষক ৬', | ||
16 | tag_p: 'সাধারণ', | ||
17 | tag_pre: 'ফর্মেটেড' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/bs.js b/sources/plugins/format/lang/bs.js new file mode 100644 index 0000000..192663b --- /dev/null +++ b/sources/plugins/format/lang/bs.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'bs', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Format', | ||
8 | tag_address: 'Address', | ||
9 | tag_div: 'Normal (DIV)', // MISSING | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatted' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/ca.js b/sources/plugins/format/lang/ca.js new file mode 100644 index 0000000..a2c172a --- /dev/null +++ b/sources/plugins/format/lang/ca.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'ca', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Format', | ||
8 | tag_address: 'Adreça', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Encapçalament 1', | ||
11 | tag_h2: 'Encapçalament 2', | ||
12 | tag_h3: 'Encapçalament 3', | ||
13 | tag_h4: 'Encapçalament 4', | ||
14 | tag_h5: 'Encapçalament 5', | ||
15 | tag_h6: 'Encapçalament 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatejat' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/cs.js b/sources/plugins/format/lang/cs.js new file mode 100644 index 0000000..cb0a016 --- /dev/null +++ b/sources/plugins/format/lang/cs.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'cs', { | ||
6 | label: 'Formát', | ||
7 | panelTitle: 'Formát', | ||
8 | tag_address: 'Adresa', | ||
9 | tag_div: 'Normální (DIV)', | ||
10 | tag_h1: 'Nadpis 1', | ||
11 | tag_h2: 'Nadpis 2', | ||
12 | tag_h3: 'Nadpis 3', | ||
13 | tag_h4: 'Nadpis 4', | ||
14 | tag_h5: 'Nadpis 5', | ||
15 | tag_h6: 'Nadpis 6', | ||
16 | tag_p: 'Normální', | ||
17 | tag_pre: 'Naformátováno' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/cy.js b/sources/plugins/format/lang/cy.js new file mode 100644 index 0000000..8fe80f8 --- /dev/null +++ b/sources/plugins/format/lang/cy.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'cy', { | ||
6 | label: 'Fformat', | ||
7 | panelTitle: 'Fformat Paragraff', | ||
8 | tag_address: 'Cyfeiriad', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Pennawd 1', | ||
11 | tag_h2: 'Pennawd 2', | ||
12 | tag_h3: 'Pennawd 3', | ||
13 | tag_h4: 'Pennawd 4', | ||
14 | tag_h5: 'Pennawd 5', | ||
15 | tag_h6: 'Pennawd 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Wedi\'i Fformatio' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/da.js b/sources/plugins/format/lang/da.js new file mode 100644 index 0000000..9d99d63 --- /dev/null +++ b/sources/plugins/format/lang/da.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'da', { | ||
6 | label: 'Formatering', | ||
7 | panelTitle: 'Formatering', | ||
8 | tag_address: 'Adresse', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Overskrift 1', | ||
11 | tag_h2: 'Overskrift 2', | ||
12 | tag_h3: 'Overskrift 3', | ||
13 | tag_h4: 'Overskrift 4', | ||
14 | tag_h5: 'Overskrift 5', | ||
15 | tag_h6: 'Overskrift 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formateret' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/de-ch.js b/sources/plugins/format/lang/de-ch.js new file mode 100644 index 0000000..906269a --- /dev/null +++ b/sources/plugins/format/lang/de-ch.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'de-ch', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Absatzformat', | ||
8 | tag_address: 'Adresse', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Überschrift 1', | ||
11 | tag_h2: 'Überschrift 2', | ||
12 | tag_h3: 'Überschrift 3', | ||
13 | tag_h4: 'Überschrift 4', | ||
14 | tag_h5: 'Überschrift 5', | ||
15 | tag_h6: 'Überschrift 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatiert' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/de.js b/sources/plugins/format/lang/de.js new file mode 100644 index 0000000..7a66720 --- /dev/null +++ b/sources/plugins/format/lang/de.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'de', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Absatzformat', | ||
8 | tag_address: 'Adresse', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Überschrift 1', | ||
11 | tag_h2: 'Überschrift 2', | ||
12 | tag_h3: 'Überschrift 3', | ||
13 | tag_h4: 'Überschrift 4', | ||
14 | tag_h5: 'Überschrift 5', | ||
15 | tag_h6: 'Überschrift 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatiert' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/el.js b/sources/plugins/format/lang/el.js new file mode 100644 index 0000000..83e845e --- /dev/null +++ b/sources/plugins/format/lang/el.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'el', { | ||
6 | label: 'Μορφοποίηση', | ||
7 | panelTitle: 'Μορφοποίηση Παραγράφου', | ||
8 | tag_address: 'Διεύθυνση', | ||
9 | tag_div: 'Κανονική (DIV)', | ||
10 | tag_h1: 'Κεφαλίδα 1', | ||
11 | tag_h2: 'Κεφαλίδα 2', | ||
12 | tag_h3: 'Κεφαλίδα 3', | ||
13 | tag_h4: 'Κεφαλίδα 4', | ||
14 | tag_h5: 'Κεφαλίδα 5', | ||
15 | tag_h6: 'Κεφαλίδα 6', | ||
16 | tag_p: 'Κανονική', | ||
17 | tag_pre: 'Προ-μορφοποιημένη' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/en-au.js b/sources/plugins/format/lang/en-au.js new file mode 100644 index 0000000..3fae041 --- /dev/null +++ b/sources/plugins/format/lang/en-au.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'en-au', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Paragraph Format', | ||
8 | tag_address: 'Address', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatted' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/en-ca.js b/sources/plugins/format/lang/en-ca.js new file mode 100644 index 0000000..bc36609 --- /dev/null +++ b/sources/plugins/format/lang/en-ca.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'en-ca', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Paragraph Format', | ||
8 | tag_address: 'Address', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatted' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/en-gb.js b/sources/plugins/format/lang/en-gb.js new file mode 100644 index 0000000..0cbf24a --- /dev/null +++ b/sources/plugins/format/lang/en-gb.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'en-gb', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Paragraph Format', | ||
8 | tag_address: 'Address', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatted' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/en.js b/sources/plugins/format/lang/en.js new file mode 100644 index 0000000..0ae1b65 --- /dev/null +++ b/sources/plugins/format/lang/en.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'en', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Paragraph Format', | ||
8 | tag_address: 'Address', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatted' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/eo.js b/sources/plugins/format/lang/eo.js new file mode 100644 index 0000000..7bac1bc --- /dev/null +++ b/sources/plugins/format/lang/eo.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'eo', { | ||
6 | label: 'Formato', | ||
7 | panelTitle: 'ParagrafFormato', | ||
8 | tag_address: 'Adreso', | ||
9 | tag_div: 'Normala (DIV)', | ||
10 | tag_h1: 'Titolo 1', | ||
11 | tag_h2: 'Titolo 2', | ||
12 | tag_h3: 'Titolo 3', | ||
13 | tag_h4: 'Titolo 4', | ||
14 | tag_h5: 'Titolo 5', | ||
15 | tag_h6: 'Titolo 6', | ||
16 | tag_p: 'Normala', | ||
17 | tag_pre: 'Formatita' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/es.js b/sources/plugins/format/lang/es.js new file mode 100644 index 0000000..8cba087 --- /dev/null +++ b/sources/plugins/format/lang/es.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'es', { | ||
6 | label: 'Formato', | ||
7 | panelTitle: 'Formato', | ||
8 | tag_address: 'Dirección', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Encabezado 1', | ||
11 | tag_h2: 'Encabezado 2', | ||
12 | tag_h3: 'Encabezado 3', | ||
13 | tag_h4: 'Encabezado 4', | ||
14 | tag_h5: 'Encabezado 5', | ||
15 | tag_h6: 'Encabezado 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Con formato' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/et.js b/sources/plugins/format/lang/et.js new file mode 100644 index 0000000..3f717b5 --- /dev/null +++ b/sources/plugins/format/lang/et.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'et', { | ||
6 | label: 'Vorming', | ||
7 | panelTitle: 'Vorming', | ||
8 | tag_address: 'Aadress', | ||
9 | tag_div: 'Tavaline (DIV)', | ||
10 | tag_h1: 'Pealkiri 1', | ||
11 | tag_h2: 'Pealkiri 2', | ||
12 | tag_h3: 'Pealkiri 3', | ||
13 | tag_h4: 'Pealkiri 4', | ||
14 | tag_h5: 'Pealkiri 5', | ||
15 | tag_h6: 'Pealkiri 6', | ||
16 | tag_p: 'Tavaline', | ||
17 | tag_pre: 'Vormindatud' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/eu.js b/sources/plugins/format/lang/eu.js new file mode 100644 index 0000000..4629fdf --- /dev/null +++ b/sources/plugins/format/lang/eu.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'eu', { | ||
6 | label: 'Formatua', | ||
7 | panelTitle: 'Paragrafoaren formatua', | ||
8 | tag_address: 'Helbidea', | ||
9 | tag_div: 'Normala (DIV)', | ||
10 | tag_h1: 'Izenburua 1', | ||
11 | tag_h2: 'Izenburua 2', | ||
12 | tag_h3: 'Izenburua 3', | ||
13 | tag_h4: 'Izenburua 4', | ||
14 | tag_h5: 'Izenburua 5', | ||
15 | tag_h6: 'Izenburua 6', | ||
16 | tag_p: 'Normala', | ||
17 | tag_pre: 'Formatuduna' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/fa.js b/sources/plugins/format/lang/fa.js new file mode 100644 index 0000000..af6f8b2 --- /dev/null +++ b/sources/plugins/format/lang/fa.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'fa', { | ||
6 | label: 'قالب', | ||
7 | panelTitle: 'قالب بند', | ||
8 | tag_address: 'نشانی', | ||
9 | tag_div: 'بند', | ||
10 | tag_h1: 'سرنویس ۱', | ||
11 | tag_h2: 'سرنویس ۲', | ||
12 | tag_h3: 'سرنویس ۳', | ||
13 | tag_h4: 'سرنویس ۴', | ||
14 | tag_h5: 'سرنویس ۵', | ||
15 | tag_h6: 'سرنویس ۶', | ||
16 | tag_p: 'معمولی', | ||
17 | tag_pre: 'قالبدار' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/fi.js b/sources/plugins/format/lang/fi.js new file mode 100644 index 0000000..6595551 --- /dev/null +++ b/sources/plugins/format/lang/fi.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'fi', { | ||
6 | label: 'Muotoilu', | ||
7 | panelTitle: 'Muotoilu', | ||
8 | tag_address: 'Osoite', | ||
9 | tag_div: 'Normaali (DIV)', | ||
10 | tag_h1: 'Otsikko 1', | ||
11 | tag_h2: 'Otsikko 2', | ||
12 | tag_h3: 'Otsikko 3', | ||
13 | tag_h4: 'Otsikko 4', | ||
14 | tag_h5: 'Otsikko 5', | ||
15 | tag_h6: 'Otsikko 6', | ||
16 | tag_p: 'Normaali', | ||
17 | tag_pre: 'Muotoiltu' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/fo.js b/sources/plugins/format/lang/fo.js new file mode 100644 index 0000000..2e89522 --- /dev/null +++ b/sources/plugins/format/lang/fo.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'fo', { | ||
6 | label: 'Skriftsnið', | ||
7 | panelTitle: 'Skriftsnið', | ||
8 | tag_address: 'Adressa', | ||
9 | tag_div: 'Vanligt (DIV)', | ||
10 | tag_h1: 'Yvirskrift 1', | ||
11 | tag_h2: 'Yvirskrift 2', | ||
12 | tag_h3: 'Yvirskrift 3', | ||
13 | tag_h4: 'Yvirskrift 4', | ||
14 | tag_h5: 'Yvirskrift 5', | ||
15 | tag_h6: 'Yvirskrift 6', | ||
16 | tag_p: 'Vanligt', | ||
17 | tag_pre: 'Sniðgivið' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/fr-ca.js b/sources/plugins/format/lang/fr-ca.js new file mode 100644 index 0000000..167850b --- /dev/null +++ b/sources/plugins/format/lang/fr-ca.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'fr-ca', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Format de paragraphe', | ||
8 | tag_address: 'Adresse', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'En-tête 1', | ||
11 | tag_h2: 'En-tête 2', | ||
12 | tag_h3: 'En-tête 3', | ||
13 | tag_h4: 'En-tête 4', | ||
14 | tag_h5: 'En-tête 5', | ||
15 | tag_h6: 'En-tête 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formaté' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/fr.js b/sources/plugins/format/lang/fr.js new file mode 100644 index 0000000..4a76b58 --- /dev/null +++ b/sources/plugins/format/lang/fr.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'fr', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Format de paragraphe', | ||
8 | tag_address: 'Adresse', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Titre 1', | ||
11 | tag_h2: 'Titre 2', | ||
12 | tag_h3: 'Titre 3', | ||
13 | tag_h4: 'Titre 4', | ||
14 | tag_h5: 'Titre 5', | ||
15 | tag_h6: 'Titre 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formaté' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/gl.js b/sources/plugins/format/lang/gl.js new file mode 100644 index 0000000..78b96c5 --- /dev/null +++ b/sources/plugins/format/lang/gl.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'gl', { | ||
6 | label: 'Formato', | ||
7 | panelTitle: 'Formato do parágrafo', | ||
8 | tag_address: 'Enderezo', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Enacabezado 1', | ||
11 | tag_h2: 'Encabezado 2', | ||
12 | tag_h3: 'Encabezado 3', | ||
13 | tag_h4: 'Encabezado 4', | ||
14 | tag_h5: 'Encabezado 5', | ||
15 | tag_h6: 'Encabezado 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatado' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/gu.js b/sources/plugins/format/lang/gu.js new file mode 100644 index 0000000..27e5836 --- /dev/null +++ b/sources/plugins/format/lang/gu.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'gu', { | ||
6 | label: 'ફૉન્ટ ફૉર્મટ, રચનાની શૈલી', | ||
7 | panelTitle: 'ફૉન્ટ ફૉર્મટ, રચનાની શૈલી', | ||
8 | tag_address: 'સરનામું', | ||
9 | tag_div: 'શીર્ષક (DIV)', | ||
10 | tag_h1: 'શીર્ષક 1', | ||
11 | tag_h2: 'શીર્ષક 2', | ||
12 | tag_h3: 'શીર્ષક 3', | ||
13 | tag_h4: 'શીર્ષક 4', | ||
14 | tag_h5: 'શીર્ષક 5', | ||
15 | tag_h6: 'શીર્ષક 6', | ||
16 | tag_p: 'સામાન્ય', | ||
17 | tag_pre: 'ફૉર્મટેડ' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/he.js b/sources/plugins/format/lang/he.js new file mode 100644 index 0000000..c5a6a81 --- /dev/null +++ b/sources/plugins/format/lang/he.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'he', { | ||
6 | label: 'עיצוב', | ||
7 | panelTitle: 'עיצוב', | ||
8 | tag_address: 'כתובת', | ||
9 | tag_div: 'נורמלי (DIV)', | ||
10 | tag_h1: 'כותרת', | ||
11 | tag_h2: 'כותרת 2', | ||
12 | tag_h3: 'כותרת 3', | ||
13 | tag_h4: 'כותרת 4', | ||
14 | tag_h5: 'כותרת 5', | ||
15 | tag_h6: 'כותרת 6', | ||
16 | tag_p: 'נורמלי', | ||
17 | tag_pre: 'קוד' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/hi.js b/sources/plugins/format/lang/hi.js new file mode 100644 index 0000000..0e490c3 --- /dev/null +++ b/sources/plugins/format/lang/hi.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'hi', { | ||
6 | label: 'फ़ॉर्मैट', | ||
7 | panelTitle: 'फ़ॉर्मैट', | ||
8 | tag_address: 'पता', | ||
9 | tag_div: 'शीर्षक (DIV)', | ||
10 | tag_h1: 'शीर्षक 1', | ||
11 | tag_h2: 'शीर्षक 2', | ||
12 | tag_h3: 'शीर्षक 3', | ||
13 | tag_h4: 'शीर्षक 4', | ||
14 | tag_h5: 'शीर्षक 5', | ||
15 | tag_h6: 'शीर्षक 6', | ||
16 | tag_p: 'साधारण', | ||
17 | tag_pre: 'फ़ॉर्मैटॅड' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/hr.js b/sources/plugins/format/lang/hr.js new file mode 100644 index 0000000..004b853 --- /dev/null +++ b/sources/plugins/format/lang/hr.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'hr', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Format', | ||
8 | tag_address: 'Address', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatirano' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/hu.js b/sources/plugins/format/lang/hu.js new file mode 100644 index 0000000..dc1c6b3 --- /dev/null +++ b/sources/plugins/format/lang/hu.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'hu', { | ||
6 | label: 'Formátum', | ||
7 | panelTitle: 'Formátum', | ||
8 | tag_address: 'Címsor', | ||
9 | tag_div: 'Bekezdés (DIV)', | ||
10 | tag_h1: 'Fejléc 1', | ||
11 | tag_h2: 'Fejléc 2', | ||
12 | tag_h3: 'Fejléc 3', | ||
13 | tag_h4: 'Fejléc 4', | ||
14 | tag_h5: 'Fejléc 5', | ||
15 | tag_h6: 'Fejléc 6', | ||
16 | tag_p: 'Normál', | ||
17 | tag_pre: 'Formázott' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/id.js b/sources/plugins/format/lang/id.js new file mode 100644 index 0000000..3abaaa5 --- /dev/null +++ b/sources/plugins/format/lang/id.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'id', { | ||
6 | label: 'Bentuk', | ||
7 | panelTitle: 'Bentuk Paragraf', | ||
8 | tag_address: 'Alamat', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Membentuk' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/is.js b/sources/plugins/format/lang/is.js new file mode 100644 index 0000000..eb13f4a --- /dev/null +++ b/sources/plugins/format/lang/is.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'is', { | ||
6 | label: 'Stílsnið', | ||
7 | panelTitle: 'Stílsnið', | ||
8 | tag_address: 'Vistfang', | ||
9 | tag_div: 'Venjulegt (DIV)', | ||
10 | tag_h1: 'Fyrirsögn 1', | ||
11 | tag_h2: 'Fyrirsögn 2', | ||
12 | tag_h3: 'Fyrirsögn 3', | ||
13 | tag_h4: 'Fyrirsögn 4', | ||
14 | tag_h5: 'Fyrirsögn 5', | ||
15 | tag_h6: 'Fyrirsögn 6', | ||
16 | tag_p: 'Venjulegt letur', | ||
17 | tag_pre: 'Forsniðið' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/it.js b/sources/plugins/format/lang/it.js new file mode 100644 index 0000000..973f76f --- /dev/null +++ b/sources/plugins/format/lang/it.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'it', { | ||
6 | label: 'Formato', | ||
7 | panelTitle: 'Formato', | ||
8 | tag_address: 'Indirizzo', | ||
9 | tag_div: 'Paragrafo (DIV)', | ||
10 | tag_h1: 'Titolo 1', | ||
11 | tag_h2: 'Titolo 2', | ||
12 | tag_h3: 'Titolo 3', | ||
13 | tag_h4: 'Titolo 4', | ||
14 | tag_h5: 'Titolo 5', | ||
15 | tag_h6: 'Titolo 6', | ||
16 | tag_p: 'Normale', | ||
17 | tag_pre: 'Formattato' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/ja.js b/sources/plugins/format/lang/ja.js new file mode 100644 index 0000000..7b826b1 --- /dev/null +++ b/sources/plugins/format/lang/ja.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'ja', { | ||
6 | label: '書式', | ||
7 | panelTitle: '段落の書式', | ||
8 | tag_address: 'アドレス', | ||
9 | tag_div: '標準 (DIV)', | ||
10 | tag_h1: '見出し 1', | ||
11 | tag_h2: '見出し 2', | ||
12 | tag_h3: '見出し 3', | ||
13 | tag_h4: '見出し 4', | ||
14 | tag_h5: '見出し 5', | ||
15 | tag_h6: '見出し 6', | ||
16 | tag_p: '標準', | ||
17 | tag_pre: '書式付き' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/ka.js b/sources/plugins/format/lang/ka.js new file mode 100644 index 0000000..9c23b82 --- /dev/null +++ b/sources/plugins/format/lang/ka.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'ka', { | ||
6 | label: 'ფიორმატირება', | ||
7 | panelTitle: 'ფორმატირება', | ||
8 | tag_address: 'მისამართი', | ||
9 | tag_div: 'ჩვეულებრივი (DIV)', | ||
10 | tag_h1: 'სათაური 1', | ||
11 | tag_h2: 'სათაური 2', | ||
12 | tag_h3: 'სათაური 3', | ||
13 | tag_h4: 'სათაური 4', | ||
14 | tag_h5: 'სათაური 5', | ||
15 | tag_h6: 'სათაური 6', | ||
16 | tag_p: 'ჩვეულებრივი', | ||
17 | tag_pre: 'ფორმატირებული' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/km.js b/sources/plugins/format/lang/km.js new file mode 100644 index 0000000..5e385bc --- /dev/null +++ b/sources/plugins/format/lang/km.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'km', { | ||
6 | label: 'ទម្រង់', | ||
7 | panelTitle: 'ទម្រង់កថាខណ្ឌ', | ||
8 | tag_address: 'អាសយដ្ឋាន', | ||
9 | tag_div: 'ធម្មតា (DIV)', | ||
10 | tag_h1: 'ចំណងជើង 1', | ||
11 | tag_h2: 'ចំណងជើង 2', | ||
12 | tag_h3: 'ចំណងជើង 3', | ||
13 | tag_h4: 'ចំណងជើង 4', | ||
14 | tag_h5: 'ចំណងជើង 5', | ||
15 | tag_h6: 'ចំណងជើង 6', | ||
16 | tag_p: 'ធម្មតា', | ||
17 | tag_pre: 'Formatted' // MISSING | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/ko.js b/sources/plugins/format/lang/ko.js new file mode 100644 index 0000000..db08c82 --- /dev/null +++ b/sources/plugins/format/lang/ko.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'ko', { | ||
6 | label: '문단', | ||
7 | panelTitle: '문단 형식', | ||
8 | tag_address: '글쓴이', | ||
9 | tag_div: '기본 (DIV)', | ||
10 | tag_h1: '제목 1', | ||
11 | tag_h2: '제목 2', | ||
12 | tag_h3: '제목 3', | ||
13 | tag_h4: '제목 4', | ||
14 | tag_h5: '제목 5', | ||
15 | tag_h6: '제목 6', | ||
16 | tag_p: '본문', | ||
17 | tag_pre: '정형 문단' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/ku.js b/sources/plugins/format/lang/ku.js new file mode 100644 index 0000000..4a94342 --- /dev/null +++ b/sources/plugins/format/lang/ku.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'ku', { | ||
6 | label: 'ڕازاندنەوە', | ||
7 | panelTitle: 'بەشی ڕازاندنەوه', | ||
8 | tag_address: 'ناونیشان', | ||
9 | tag_div: '(DIV)-ی ئاسایی', | ||
10 | tag_h1: 'سەرنووسەی ١', | ||
11 | tag_h2: 'سەرنووسەی ٢', | ||
12 | tag_h3: 'سەرنووسەی ٣', | ||
13 | tag_h4: 'سەرنووسەی ٤', | ||
14 | tag_h5: 'سەرنووسەی ٥', | ||
15 | tag_h6: 'سەرنووسەی ٦', | ||
16 | tag_p: 'ئاسایی', | ||
17 | tag_pre: 'شێوازکراو' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/lt.js b/sources/plugins/format/lang/lt.js new file mode 100644 index 0000000..06e55f5 --- /dev/null +++ b/sources/plugins/format/lang/lt.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'lt', { | ||
6 | label: 'Šrifto formatas', | ||
7 | panelTitle: 'Šrifto formatas', | ||
8 | tag_address: 'Kreipinio', | ||
9 | tag_div: 'Normalus (DIV)', | ||
10 | tag_h1: 'Antraštinis 1', | ||
11 | tag_h2: 'Antraštinis 2', | ||
12 | tag_h3: 'Antraštinis 3', | ||
13 | tag_h4: 'Antraštinis 4', | ||
14 | tag_h5: 'Antraštinis 5', | ||
15 | tag_h6: 'Antraštinis 6', | ||
16 | tag_p: 'Normalus', | ||
17 | tag_pre: 'Formuotas' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/lv.js b/sources/plugins/format/lang/lv.js new file mode 100644 index 0000000..7cf1391 --- /dev/null +++ b/sources/plugins/format/lang/lv.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'lv', { | ||
6 | label: 'Formāts', | ||
7 | panelTitle: 'Formāts', | ||
8 | tag_address: 'Adrese', | ||
9 | tag_div: 'Rindkopa (DIV)', | ||
10 | tag_h1: 'Virsraksts 1', | ||
11 | tag_h2: 'Virsraksts 2', | ||
12 | tag_h3: 'Virsraksts 3', | ||
13 | tag_h4: 'Virsraksts 4', | ||
14 | tag_h5: 'Virsraksts 5', | ||
15 | tag_h6: 'Virsraksts 6', | ||
16 | tag_p: 'Normāls teksts', | ||
17 | tag_pre: 'Formatēts teksts' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/mk.js b/sources/plugins/format/lang/mk.js new file mode 100644 index 0000000..7ff725a --- /dev/null +++ b/sources/plugins/format/lang/mk.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'mk', { | ||
6 | label: 'Format', // MISSING | ||
7 | panelTitle: 'Paragraph Format', // MISSING | ||
8 | tag_address: 'Address', // MISSING | ||
9 | tag_div: 'Normal (DIV)', // MISSING | ||
10 | tag_h1: 'Heading 1', // MISSING | ||
11 | tag_h2: 'Heading 2', // MISSING | ||
12 | tag_h3: 'Heading 3', // MISSING | ||
13 | tag_h4: 'Heading 4', // MISSING | ||
14 | tag_h5: 'Heading 5', // MISSING | ||
15 | tag_h6: 'Heading 6', // MISSING | ||
16 | tag_p: 'Normal', // MISSING | ||
17 | tag_pre: 'Formatted' // MISSING | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/mn.js b/sources/plugins/format/lang/mn.js new file mode 100644 index 0000000..15f58e1 --- /dev/null +++ b/sources/plugins/format/lang/mn.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'mn', { | ||
6 | label: 'Параргафын загвар', | ||
7 | panelTitle: 'Параргафын загвар', | ||
8 | tag_address: 'Хаяг', | ||
9 | tag_div: 'Paragraph (DIV)', | ||
10 | tag_h1: 'Гарчиг 1', | ||
11 | tag_h2: 'Гарчиг 2', | ||
12 | tag_h3: 'Гарчиг 3', | ||
13 | tag_h4: 'Гарчиг 4', | ||
14 | tag_h5: 'Гарчиг 5', | ||
15 | tag_h6: 'Гарчиг 6', | ||
16 | tag_p: 'Хэвийн', | ||
17 | tag_pre: 'Formatted' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/ms.js b/sources/plugins/format/lang/ms.js new file mode 100644 index 0000000..b41b828 --- /dev/null +++ b/sources/plugins/format/lang/ms.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'ms', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Format', | ||
8 | tag_address: 'Alamat', | ||
9 | tag_div: 'Perenggan (DIV)', | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Telah Diformat' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/nb.js b/sources/plugins/format/lang/nb.js new file mode 100644 index 0000000..a216014 --- /dev/null +++ b/sources/plugins/format/lang/nb.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'nb', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Avsnittsformat', | ||
8 | tag_address: 'Adresse', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Overskrift 1', | ||
11 | tag_h2: 'Overskrift 2', | ||
12 | tag_h3: 'Overskrift 3', | ||
13 | tag_h4: 'Overskrift 4', | ||
14 | tag_h5: 'Overskrift 5', | ||
15 | tag_h6: 'Overskrift 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatert' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/nl.js b/sources/plugins/format/lang/nl.js new file mode 100644 index 0000000..532b7f1 --- /dev/null +++ b/sources/plugins/format/lang/nl.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'nl', { | ||
6 | label: 'Opmaak', | ||
7 | panelTitle: 'Opmaak', | ||
8 | tag_address: 'Adres', | ||
9 | tag_div: 'Normaal (DIV)', | ||
10 | tag_h1: 'Kop 1', | ||
11 | tag_h2: 'Kop 2', | ||
12 | tag_h3: 'Kop 3', | ||
13 | tag_h4: 'Kop 4', | ||
14 | tag_h5: 'Kop 5', | ||
15 | tag_h6: 'Kop 6', | ||
16 | tag_p: 'Normaal', | ||
17 | tag_pre: 'Met opmaak' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/no.js b/sources/plugins/format/lang/no.js new file mode 100644 index 0000000..2995c96 --- /dev/null +++ b/sources/plugins/format/lang/no.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'no', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Avsnittsformat', | ||
8 | tag_address: 'Adresse', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Overskrift 1', | ||
11 | tag_h2: 'Overskrift 2', | ||
12 | tag_h3: 'Overskrift 3', | ||
13 | tag_h4: 'Overskrift 4', | ||
14 | tag_h5: 'Overskrift 5', | ||
15 | tag_h6: 'Overskrift 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatert' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/pl.js b/sources/plugins/format/lang/pl.js new file mode 100644 index 0000000..e1ca1c7 --- /dev/null +++ b/sources/plugins/format/lang/pl.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'pl', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Format', | ||
8 | tag_address: 'Adres', | ||
9 | tag_div: 'Normalny (DIV)', | ||
10 | tag_h1: 'Nagłówek 1', | ||
11 | tag_h2: 'Nagłówek 2', | ||
12 | tag_h3: 'Nagłówek 3', | ||
13 | tag_h4: 'Nagłówek 4', | ||
14 | tag_h5: 'Nagłówek 5', | ||
15 | tag_h6: 'Nagłówek 6', | ||
16 | tag_p: 'Normalny', | ||
17 | tag_pre: 'Tekst sformatowany' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/pt-br.js b/sources/plugins/format/lang/pt-br.js new file mode 100644 index 0000000..c8b28ea --- /dev/null +++ b/sources/plugins/format/lang/pt-br.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'pt-br', { | ||
6 | label: 'Formatação', | ||
7 | panelTitle: 'Formatação', | ||
8 | tag_address: 'Endereço', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Título 1', | ||
11 | tag_h2: 'Título 2', | ||
12 | tag_h3: 'Título 3', | ||
13 | tag_h4: 'Título 4', | ||
14 | tag_h5: 'Título 5', | ||
15 | tag_h6: 'Título 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatado' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/pt.js b/sources/plugins/format/lang/pt.js new file mode 100644 index 0000000..93f1ad0 --- /dev/null +++ b/sources/plugins/format/lang/pt.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'pt', { | ||
6 | label: 'Formatar', | ||
7 | panelTitle: 'Formatar Parágrafo', | ||
8 | tag_address: 'Endereço', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Título 1', | ||
11 | tag_h2: 'Título 2', | ||
12 | tag_h3: 'Título 3', | ||
13 | tag_h4: 'Título 4', | ||
14 | tag_h5: 'Título 5', | ||
15 | tag_h6: 'Título 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatado' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/ro.js b/sources/plugins/format/lang/ro.js new file mode 100644 index 0000000..5cb6a07 --- /dev/null +++ b/sources/plugins/format/lang/ro.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'ro', { | ||
6 | label: 'Formatare', | ||
7 | panelTitle: 'Formatare', | ||
8 | tag_address: 'Adresă', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatat' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/ru.js b/sources/plugins/format/lang/ru.js new file mode 100644 index 0000000..00d0407 --- /dev/null +++ b/sources/plugins/format/lang/ru.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'ru', { | ||
6 | label: 'Форматирование', | ||
7 | panelTitle: 'Форматирование', | ||
8 | tag_address: 'Адрес', | ||
9 | tag_div: 'Обычное (div)', | ||
10 | tag_h1: 'Заголовок 1', | ||
11 | tag_h2: 'Заголовок 2', | ||
12 | tag_h3: 'Заголовок 3', | ||
13 | tag_h4: 'Заголовок 4', | ||
14 | tag_h5: 'Заголовок 5', | ||
15 | tag_h6: 'Заголовок 6', | ||
16 | tag_p: 'Обычное', | ||
17 | tag_pre: 'Моноширинное' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/si.js b/sources/plugins/format/lang/si.js new file mode 100644 index 0000000..ae531f0 --- /dev/null +++ b/sources/plugins/format/lang/si.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'si', { | ||
6 | label: 'ආකෘතිය', | ||
7 | panelTitle: 'චේදයේ ', | ||
8 | tag_address: 'ලිපිනය', | ||
9 | tag_div: 'සාමාන්ය(DIV)', | ||
10 | tag_h1: 'ශීර්ෂය 1', | ||
11 | tag_h2: 'ශීර්ෂය 2', | ||
12 | tag_h3: 'ශීර්ෂය 3', | ||
13 | tag_h4: 'ශීර්ෂය 4', | ||
14 | tag_h5: 'ශීර්ෂය 5', | ||
15 | tag_h6: 'ශීර්ෂය 6', | ||
16 | tag_p: 'සාමාන්ය', | ||
17 | tag_pre: 'ආකෘතියන්' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/sk.js b/sources/plugins/format/lang/sk.js new file mode 100644 index 0000000..4edfa2e --- /dev/null +++ b/sources/plugins/format/lang/sk.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'sk', { | ||
6 | label: 'Formát', | ||
7 | panelTitle: 'Odsek', | ||
8 | tag_address: 'Adresa', | ||
9 | tag_div: 'Normálny (DIV)', | ||
10 | tag_h1: 'Nadpis 1', | ||
11 | tag_h2: 'Nadpis 2', | ||
12 | tag_h3: 'Nadpis 3', | ||
13 | tag_h4: 'Nadpis 4', | ||
14 | tag_h5: 'Nadpis 5', | ||
15 | tag_h6: 'Nadpis 6', | ||
16 | tag_p: 'Normálny', | ||
17 | tag_pre: 'Formátovaný' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/sl.js b/sources/plugins/format/lang/sl.js new file mode 100644 index 0000000..0019aab --- /dev/null +++ b/sources/plugins/format/lang/sl.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'sl', { | ||
6 | label: 'Oblika', | ||
7 | panelTitle: 'Oblika', | ||
8 | tag_address: 'Napis', | ||
9 | tag_div: 'Navaden (DIV)', | ||
10 | tag_h1: 'Naslov 1', | ||
11 | tag_h2: 'Naslov 2', | ||
12 | tag_h3: 'Naslov 3', | ||
13 | tag_h4: 'Naslov 4', | ||
14 | tag_h5: 'Naslov 5', | ||
15 | tag_h6: 'Naslov 6', | ||
16 | tag_p: 'Navaden', | ||
17 | tag_pre: 'Oblikovan' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/sq.js b/sources/plugins/format/lang/sq.js new file mode 100644 index 0000000..8945d05 --- /dev/null +++ b/sources/plugins/format/lang/sq.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'sq', { | ||
6 | label: 'Formati', | ||
7 | panelTitle: 'Formati i Paragrafit', | ||
8 | tag_address: 'Adresa', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Titulli 1', | ||
11 | tag_h2: 'Titulli 2', | ||
12 | tag_h3: 'Titulli 3', | ||
13 | tag_h4: 'Titulli 4', | ||
14 | tag_h5: 'Titulli 5', | ||
15 | tag_h6: 'Titulli 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatuar' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/sr-latn.js b/sources/plugins/format/lang/sr-latn.js new file mode 100644 index 0000000..3e7449d --- /dev/null +++ b/sources/plugins/format/lang/sr-latn.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'sr-latn', { | ||
6 | label: 'Format', | ||
7 | panelTitle: 'Format', | ||
8 | tag_address: 'Adresa', | ||
9 | tag_div: 'Normalno (DIV)', | ||
10 | tag_h1: 'Naslov 1', | ||
11 | tag_h2: 'Naslov 2', | ||
12 | tag_h3: 'Naslov 3', | ||
13 | tag_h4: 'Naslov 4', | ||
14 | tag_h5: 'Naslov 5', | ||
15 | tag_h6: 'Naslov 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatirano' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/sr.js b/sources/plugins/format/lang/sr.js new file mode 100644 index 0000000..40f1d1c --- /dev/null +++ b/sources/plugins/format/lang/sr.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'sr', { | ||
6 | label: 'Формат', | ||
7 | panelTitle: 'Формат', | ||
8 | tag_address: 'Adresa', | ||
9 | tag_div: 'Нормално (DIV)', | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatirano' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/sv.js b/sources/plugins/format/lang/sv.js new file mode 100644 index 0000000..47dab57 --- /dev/null +++ b/sources/plugins/format/lang/sv.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'sv', { | ||
6 | label: 'Teckenformat', | ||
7 | panelTitle: 'Teckenformat', | ||
8 | tag_address: 'Adress', | ||
9 | tag_div: 'Normal (DIV)', | ||
10 | tag_h1: 'Rubrik 1', | ||
11 | tag_h2: 'Rubrik 2', | ||
12 | tag_h3: 'Rubrik 3', | ||
13 | tag_h4: 'Rubrik 4', | ||
14 | tag_h5: 'Rubrik 5', | ||
15 | tag_h6: 'Rubrik 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formaterad' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/th.js b/sources/plugins/format/lang/th.js new file mode 100644 index 0000000..31c0dba --- /dev/null +++ b/sources/plugins/format/lang/th.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'th', { | ||
6 | label: 'รูปแบบ', | ||
7 | panelTitle: 'รูปแบบ', | ||
8 | tag_address: 'Address', | ||
9 | tag_div: 'Paragraph (DIV)', | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Formatted' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/tr.js b/sources/plugins/format/lang/tr.js new file mode 100644 index 0000000..eb311a9 --- /dev/null +++ b/sources/plugins/format/lang/tr.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'tr', { | ||
6 | label: 'Biçim', | ||
7 | panelTitle: 'Biçim', | ||
8 | tag_address: 'Adres', | ||
9 | tag_div: 'Paragraf (DIV)', | ||
10 | tag_h1: 'Başlık 1', | ||
11 | tag_h2: 'Başlık 2', | ||
12 | tag_h3: 'Başlık 3', | ||
13 | tag_h4: 'Başlık 4', | ||
14 | tag_h5: 'Başlık 5', | ||
15 | tag_h6: 'Başlık 6', | ||
16 | tag_p: 'Normal', | ||
17 | tag_pre: 'Biçimli' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/tt.js b/sources/plugins/format/lang/tt.js new file mode 100644 index 0000000..d44a9ac --- /dev/null +++ b/sources/plugins/format/lang/tt.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'tt', { | ||
6 | label: 'Форматлау', | ||
7 | panelTitle: 'Параграф форматлавы', | ||
8 | tag_address: 'Адрес', | ||
9 | tag_div: 'Гади (DIV)', | ||
10 | tag_h1: 'Башлам 1', | ||
11 | tag_h2: 'Башлам 2', | ||
12 | tag_h3: 'Башлам 3', | ||
13 | tag_h4: 'Башлам 4', | ||
14 | tag_h5: 'Башлам 5', | ||
15 | tag_h6: 'Башлам 6', | ||
16 | tag_p: 'Гади', | ||
17 | tag_pre: 'Форматлаулы' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/ug.js b/sources/plugins/format/lang/ug.js new file mode 100644 index 0000000..504fee4 --- /dev/null +++ b/sources/plugins/format/lang/ug.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'ug', { | ||
6 | label: 'پىچىم', | ||
7 | panelTitle: 'پىچىم', | ||
8 | tag_address: 'ئادرېس', | ||
9 | tag_div: 'ئابزاس (DIV)', | ||
10 | tag_h1: 'ماۋزۇ 1', | ||
11 | tag_h2: 'ماۋزۇ 2', | ||
12 | tag_h3: 'ماۋزۇ 3', | ||
13 | tag_h4: 'ماۋزۇ 4', | ||
14 | tag_h5: 'ماۋزۇ 5', | ||
15 | tag_h6: 'ماۋزۇ 6', | ||
16 | tag_p: 'ئادەتتىكى', | ||
17 | tag_pre: 'تىزىلغان پىچىم' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/uk.js b/sources/plugins/format/lang/uk.js new file mode 100644 index 0000000..c3cffe1 --- /dev/null +++ b/sources/plugins/format/lang/uk.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'uk', { | ||
6 | label: 'Форматування', | ||
7 | panelTitle: 'Форматування параграфа', | ||
8 | tag_address: 'Адреса', | ||
9 | tag_div: 'Нормальний (div)', | ||
10 | tag_h1: 'Заголовок 1', | ||
11 | tag_h2: 'Заголовок 2', | ||
12 | tag_h3: 'Заголовок 3', | ||
13 | tag_h4: 'Заголовок 4', | ||
14 | tag_h5: 'Заголовок 5', | ||
15 | tag_h6: 'Заголовок 6', | ||
16 | tag_p: 'Нормальний', | ||
17 | tag_pre: 'Форматований' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/vi.js b/sources/plugins/format/lang/vi.js new file mode 100644 index 0000000..a066065 --- /dev/null +++ b/sources/plugins/format/lang/vi.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'vi', { | ||
6 | label: 'Định dạng', | ||
7 | panelTitle: 'Định dạng', | ||
8 | tag_address: 'Address', | ||
9 | tag_div: 'Bình thường (DIV)', | ||
10 | tag_h1: 'Heading 1', | ||
11 | tag_h2: 'Heading 2', | ||
12 | tag_h3: 'Heading 3', | ||
13 | tag_h4: 'Heading 4', | ||
14 | tag_h5: 'Heading 5', | ||
15 | tag_h6: 'Heading 6', | ||
16 | tag_p: 'Bình thường (P)', | ||
17 | tag_pre: 'Đã thiết lập' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/zh-cn.js b/sources/plugins/format/lang/zh-cn.js new file mode 100644 index 0000000..895be82 --- /dev/null +++ b/sources/plugins/format/lang/zh-cn.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'zh-cn', { | ||
6 | label: '格式', | ||
7 | panelTitle: '格式', | ||
8 | tag_address: '地址', | ||
9 | tag_div: '段落(DIV)', | ||
10 | tag_h1: '标题 1', | ||
11 | tag_h2: '标题 2', | ||
12 | tag_h3: '标题 3', | ||
13 | tag_h4: '标题 4', | ||
14 | tag_h5: '标题 5', | ||
15 | tag_h6: '标题 6', | ||
16 | tag_p: '普通', | ||
17 | tag_pre: '已编排格式' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/lang/zh.js b/sources/plugins/format/lang/zh.js new file mode 100644 index 0000000..ba826aa --- /dev/null +++ b/sources/plugins/format/lang/zh.js | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'format', 'zh', { | ||
6 | label: '格式', | ||
7 | panelTitle: '段落格式', | ||
8 | tag_address: '地址', | ||
9 | tag_div: '標準 (DIV)', | ||
10 | tag_h1: '標題 1', | ||
11 | tag_h2: '標題 2', | ||
12 | tag_h3: '標題 3', | ||
13 | tag_h4: '標題 4', | ||
14 | tag_h5: '標題 5', | ||
15 | tag_h6: '標題 6', | ||
16 | tag_p: '標準', | ||
17 | tag_pre: '格式設定' | ||
18 | } ); | ||
diff --git a/sources/plugins/format/plugin.js b/sources/plugins/format/plugin.js new file mode 100644 index 0000000..d990b8e --- /dev/null +++ b/sources/plugins/format/plugin.js | |||
@@ -0,0 +1,279 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.add( 'format', { | ||
7 | requires: 'richcombo', | ||
8 | // jscs:disable maximumLineLength | ||
9 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
10 | // jscs:enable maximumLineLength | ||
11 | init: function( editor ) { | ||
12 | if ( editor.blockless ) | ||
13 | return; | ||
14 | |||
15 | var config = editor.config, | ||
16 | lang = editor.lang.format; | ||
17 | |||
18 | // Gets the list of tags from the settings. | ||
19 | var tags = config.format_tags.split( ';' ); | ||
20 | |||
21 | // Create style objects for all defined styles. | ||
22 | var styles = {}, | ||
23 | stylesCount = 0, | ||
24 | allowedContent = []; | ||
25 | for ( var i = 0; i < tags.length; i++ ) { | ||
26 | var tag = tags[ i ]; | ||
27 | var style = new CKEDITOR.style( config[ 'format_' + tag ] ); | ||
28 | if ( !editor.filter.customConfig || editor.filter.check( style ) ) { | ||
29 | stylesCount++; | ||
30 | styles[ tag ] = style; | ||
31 | styles[ tag ]._.enterMode = editor.config.enterMode; | ||
32 | allowedContent.push( style ); | ||
33 | } | ||
34 | } | ||
35 | |||
36 | // Hide entire combo when all formats are rejected. | ||
37 | if ( stylesCount === 0 ) | ||
38 | return; | ||
39 | |||
40 | editor.ui.addRichCombo( 'Format', { | ||
41 | label: lang.label, | ||
42 | title: lang.panelTitle, | ||
43 | toolbar: 'styles,20', | ||
44 | allowedContent: allowedContent, | ||
45 | |||
46 | panel: { | ||
47 | css: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ), | ||
48 | multiSelect: false, | ||
49 | attributes: { 'aria-label': lang.panelTitle } | ||
50 | }, | ||
51 | |||
52 | init: function() { | ||
53 | this.startGroup( lang.panelTitle ); | ||
54 | |||
55 | for ( var tag in styles ) { | ||
56 | var label = lang[ 'tag_' + tag ]; | ||
57 | |||
58 | // Add the tag entry to the panel list. | ||
59 | this.add( tag, styles[ tag ].buildPreview( label ), label ); | ||
60 | } | ||
61 | }, | ||
62 | |||
63 | onClick: function( value ) { | ||
64 | editor.focus(); | ||
65 | editor.fire( 'saveSnapshot' ); | ||
66 | |||
67 | var style = styles[ value ], | ||
68 | elementPath = editor.elementPath(); | ||
69 | |||
70 | editor[ style.checkActive( elementPath, editor ) ? 'removeStyle' : 'applyStyle' ]( style ); | ||
71 | |||
72 | // Save the undo snapshot after all changes are affected. (#4899) | ||
73 | setTimeout( function() { | ||
74 | editor.fire( 'saveSnapshot' ); | ||
75 | }, 0 ); | ||
76 | }, | ||
77 | |||
78 | onRender: function() { | ||
79 | editor.on( 'selectionChange', function( ev ) { | ||
80 | var currentTag = this.getValue(), | ||
81 | elementPath = ev.data.path; | ||
82 | |||
83 | this.refresh(); | ||
84 | |||
85 | for ( var tag in styles ) { | ||
86 | if ( styles[ tag ].checkActive( elementPath, editor ) ) { | ||
87 | if ( tag != currentTag ) | ||
88 | this.setValue( tag, editor.lang.format[ 'tag_' + tag ] ); | ||
89 | return; | ||
90 | } | ||
91 | } | ||
92 | |||
93 | // If no styles match, just empty it. | ||
94 | this.setValue( '' ); | ||
95 | |||
96 | }, this ); | ||
97 | }, | ||
98 | |||
99 | onOpen: function() { | ||
100 | this.showAll(); | ||
101 | for ( var name in styles ) { | ||
102 | var style = styles[ name ]; | ||
103 | |||
104 | // Check if that style is enabled in activeFilter. | ||
105 | if ( !editor.activeFilter.check( style ) ) | ||
106 | this.hideItem( name ); | ||
107 | |||
108 | } | ||
109 | }, | ||
110 | |||
111 | refresh: function() { | ||
112 | var elementPath = editor.elementPath(); | ||
113 | |||
114 | if ( !elementPath ) | ||
115 | return; | ||
116 | |||
117 | // Check if element path contains 'p' element. | ||
118 | if ( !elementPath.isContextFor( 'p' ) ) { | ||
119 | this.setState( CKEDITOR.TRISTATE_DISABLED ); | ||
120 | return; | ||
121 | } | ||
122 | |||
123 | // Check if there is any available style. | ||
124 | for ( var name in styles ) { | ||
125 | if ( editor.activeFilter.check( styles[ name ] ) ) | ||
126 | return; | ||
127 | } | ||
128 | this.setState( CKEDITOR.TRISTATE_DISABLED ); | ||
129 | } | ||
130 | } ); | ||
131 | } | ||
132 | } ); | ||
133 | |||
134 | /** | ||
135 | * A list of semicolon-separated style names (by default: tags) representing | ||
136 | * the style definition for each entry to be displayed in the Format drop-down list | ||
137 | * in the toolbar. Each entry must have a corresponding configuration in a | ||
138 | * setting named `'format_(tagName)'`. For example, the `'p'` entry has its | ||
139 | * definition taken from [config.format_p](#!/api/CKEDITOR.config-cfg-format_p). | ||
140 | * | ||
141 | * Read more in the [documentation](#!/guide/dev_format) | ||
142 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html). | ||
143 | * | ||
144 | * config.format_tags = 'p;h2;h3;pre'; | ||
145 | * | ||
146 | * @cfg {String} [format_tags='p;h1;h2;h3;h4;h5;h6;pre;address;div'] | ||
147 | * @member CKEDITOR.config | ||
148 | */ | ||
149 | CKEDITOR.config.format_tags = 'p;h1;h2;h3;h4;h5;h6;pre;address;div'; | ||
150 | |||
151 | /** | ||
152 | * The style definition to be used to apply the `Normal` format. | ||
153 | * | ||
154 | * Read more in the [documentation](#!/guide/dev_format) | ||
155 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html). | ||
156 | * | ||
157 | * config.format_p = { element: 'p', attributes: { 'class': 'normalPara' } }; | ||
158 | * | ||
159 | * @cfg {Object} [format_p={ element: 'p' }] | ||
160 | * @member CKEDITOR.config | ||
161 | */ | ||
162 | CKEDITOR.config.format_p = { element: 'p' }; | ||
163 | |||
164 | /** | ||
165 | * The style definition to be used to apply the `Normal (DIV)` format. | ||
166 | * | ||
167 | * Read more in the [documentation](#!/guide/dev_format) | ||
168 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html). | ||
169 | * | ||
170 | * config.format_div = { element: 'div', attributes: { 'class': 'normalDiv' } }; | ||
171 | * | ||
172 | * @cfg {Object} [format_div={ element: 'div' }] | ||
173 | * @member CKEDITOR.config | ||
174 | */ | ||
175 | CKEDITOR.config.format_div = { element: 'div' }; | ||
176 | |||
177 | /** | ||
178 | * The style definition to be used to apply the `Formatted` format. | ||
179 | * | ||
180 | * Read more in the [documentation](#!/guide/dev_format) | ||
181 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html). | ||
182 | * | ||
183 | * config.format_pre = { element: 'pre', attributes: { 'class': 'code' } }; | ||
184 | * | ||
185 | * @cfg {Object} [format_pre={ element: 'pre' }] | ||
186 | * @member CKEDITOR.config | ||
187 | */ | ||
188 | CKEDITOR.config.format_pre = { element: 'pre' }; | ||
189 | |||
190 | /** | ||
191 | * The style definition to be used to apply the `Address` format. | ||
192 | * | ||
193 | * Read more in the [documentation](#!/guide/dev_format) | ||
194 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html). | ||
195 | * | ||
196 | * config.format_address = { element: 'address', attributes: { 'class': 'styledAddress' } }; | ||
197 | * | ||
198 | * @cfg {Object} [format_address={ element: 'address' }] | ||
199 | * @member CKEDITOR.config | ||
200 | */ | ||
201 | CKEDITOR.config.format_address = { element: 'address' }; | ||
202 | |||
203 | /** | ||
204 | * The style definition to be used to apply the `Heading 1` format. | ||
205 | * | ||
206 | * Read more in the [documentation](#!/guide/dev_format) | ||
207 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html). | ||
208 | * | ||
209 | * config.format_h1 = { element: 'h1', attributes: { 'class': 'contentTitle1' } }; | ||
210 | * | ||
211 | * @cfg {Object} [format_h1={ element: 'h1' }] | ||
212 | * @member CKEDITOR.config | ||
213 | */ | ||
214 | CKEDITOR.config.format_h1 = { element: 'h1' }; | ||
215 | |||
216 | /** | ||
217 | * The style definition to be used to apply the `Heading 2` format. | ||
218 | * | ||
219 | * Read more in the [documentation](#!/guide/dev_format) | ||
220 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html). | ||
221 | * | ||
222 | * config.format_h2 = { element: 'h2', attributes: { 'class': 'contentTitle2' } }; | ||
223 | * | ||
224 | * @cfg {Object} [format_h2={ element: 'h2' }] | ||
225 | * @member CKEDITOR.config | ||
226 | */ | ||
227 | CKEDITOR.config.format_h2 = { element: 'h2' }; | ||
228 | |||
229 | /** | ||
230 | * The style definition to be used to apply the `Heading 3` format. | ||
231 | * | ||
232 | * Read more in the [documentation](#!/guide/dev_format) | ||
233 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html). | ||
234 | * | ||
235 | * config.format_h3 = { element: 'h3', attributes: { 'class': 'contentTitle3' } }; | ||
236 | * | ||
237 | * @cfg {Object} [format_h3={ element: 'h3' }] | ||
238 | * @member CKEDITOR.config | ||
239 | */ | ||
240 | CKEDITOR.config.format_h3 = { element: 'h3' }; | ||
241 | |||
242 | /** | ||
243 | * The style definition to be used to apply the `Heading 4` format. | ||
244 | * | ||
245 | * Read more in the [documentation](#!/guide/dev_format) | ||
246 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html). | ||
247 | * | ||
248 | * config.format_h4 = { element: 'h4', attributes: { 'class': 'contentTitle4' } }; | ||
249 | * | ||
250 | * @cfg {Object} [format_h4={ element: 'h4' }] | ||
251 | * @member CKEDITOR.config | ||
252 | */ | ||
253 | CKEDITOR.config.format_h4 = { element: 'h4' }; | ||
254 | |||
255 | /** | ||
256 | * The style definition to be used to apply the `Heading 5` format. | ||
257 | * | ||
258 | * Read more in the [documentation](#!/guide/dev_format) | ||
259 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html). | ||
260 | * | ||
261 | * config.format_h5 = { element: 'h5', attributes: { 'class': 'contentTitle5' } }; | ||
262 | * | ||
263 | * @cfg {Object} [format_h5={ element: 'h5' }] | ||
264 | * @member CKEDITOR.config | ||
265 | */ | ||
266 | CKEDITOR.config.format_h5 = { element: 'h5' }; | ||
267 | |||
268 | /** | ||
269 | * The style definition to be used to apply the `Heading 6` format. | ||
270 | * | ||
271 | * Read more in the [documentation](#!/guide/dev_format) | ||
272 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html). | ||
273 | * | ||
274 | * config.format_h6 = { element: 'h6', attributes: { 'class': 'contentTitle6' } }; | ||
275 | * | ||
276 | * @cfg {Object} [format_h6={ element: 'h6' }] | ||
277 | * @member CKEDITOR.config | ||
278 | */ | ||
279 | CKEDITOR.config.format_h6 = { element: 'h6' }; | ||
diff --git a/sources/plugins/horizontalrule/icons/hidpi/horizontalrule.png b/sources/plugins/horizontalrule/icons/hidpi/horizontalrule.png new file mode 100644 index 0000000..433613d --- /dev/null +++ b/sources/plugins/horizontalrule/icons/hidpi/horizontalrule.png | |||
Binary files differ | |||
diff --git a/sources/plugins/horizontalrule/icons/horizontalrule.png b/sources/plugins/horizontalrule/icons/horizontalrule.png new file mode 100644 index 0000000..4af9bc8 --- /dev/null +++ b/sources/plugins/horizontalrule/icons/horizontalrule.png | |||
Binary files differ | |||
diff --git a/sources/plugins/horizontalrule/lang/af.js b/sources/plugins/horizontalrule/lang/af.js new file mode 100644 index 0000000..7a70679 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/af.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'af', { | ||
6 | toolbar: 'Horisontale lyn invoeg' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/ar.js b/sources/plugins/horizontalrule/lang/ar.js new file mode 100644 index 0000000..af5f04b --- /dev/null +++ b/sources/plugins/horizontalrule/lang/ar.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'ar', { | ||
6 | toolbar: 'خط فاصل' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/bg.js b/sources/plugins/horizontalrule/lang/bg.js new file mode 100644 index 0000000..9b66b34 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/bg.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'bg', { | ||
6 | toolbar: 'Вмъкване на хоризонтална линия' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/bn.js b/sources/plugins/horizontalrule/lang/bn.js new file mode 100644 index 0000000..d2b54cf --- /dev/null +++ b/sources/plugins/horizontalrule/lang/bn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'bn', { | ||
6 | toolbar: 'রেখা যুক্ত কর' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/bs.js b/sources/plugins/horizontalrule/lang/bs.js new file mode 100644 index 0000000..20643be --- /dev/null +++ b/sources/plugins/horizontalrule/lang/bs.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'bs', { | ||
6 | toolbar: 'Ubaci horizontalnu liniju' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/ca.js b/sources/plugins/horizontalrule/lang/ca.js new file mode 100644 index 0000000..cc37150 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'ca', { | ||
6 | toolbar: 'Insereix línia horitzontal' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/cs.js b/sources/plugins/horizontalrule/lang/cs.js new file mode 100644 index 0000000..385eb7d --- /dev/null +++ b/sources/plugins/horizontalrule/lang/cs.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'cs', { | ||
6 | toolbar: 'Vložit vodorovnou linku' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/cy.js b/sources/plugins/horizontalrule/lang/cy.js new file mode 100644 index 0000000..7f52495 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/cy.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'cy', { | ||
6 | toolbar: 'Mewnosod Llinell Lorweddol' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/da.js b/sources/plugins/horizontalrule/lang/da.js new file mode 100644 index 0000000..d1552dd --- /dev/null +++ b/sources/plugins/horizontalrule/lang/da.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'da', { | ||
6 | toolbar: 'Indsæt vandret streg' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/de-ch.js b/sources/plugins/horizontalrule/lang/de-ch.js new file mode 100644 index 0000000..94d29d3 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/de-ch.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'de-ch', { | ||
6 | toolbar: 'Horizontale Linie einfügen' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/de.js b/sources/plugins/horizontalrule/lang/de.js new file mode 100644 index 0000000..6a474f2 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/de.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'de', { | ||
6 | toolbar: 'Horizontale Linie einfügen' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/el.js b/sources/plugins/horizontalrule/lang/el.js new file mode 100644 index 0000000..293a090 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/el.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'el', { | ||
6 | toolbar: 'Εισαγωγή Οριζόντιας Γραμμής' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/en-au.js b/sources/plugins/horizontalrule/lang/en-au.js new file mode 100644 index 0000000..4491ce0 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/en-au.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'en-au', { | ||
6 | toolbar: 'Insert Horizontal Line' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/en-ca.js b/sources/plugins/horizontalrule/lang/en-ca.js new file mode 100644 index 0000000..0a7320d --- /dev/null +++ b/sources/plugins/horizontalrule/lang/en-ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'en-ca', { | ||
6 | toolbar: 'Insert Horizontal Line' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/en-gb.js b/sources/plugins/horizontalrule/lang/en-gb.js new file mode 100644 index 0000000..4946b57 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/en-gb.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'en-gb', { | ||
6 | toolbar: 'Insert Horizontal Line' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/en.js b/sources/plugins/horizontalrule/lang/en.js new file mode 100644 index 0000000..470b2d6 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/en.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'en', { | ||
6 | toolbar: 'Insert Horizontal Line' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/eo.js b/sources/plugins/horizontalrule/lang/eo.js new file mode 100644 index 0000000..d929aa2 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/eo.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'eo', { | ||
6 | toolbar: 'Enmeti Horizontalan Linion' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/es.js b/sources/plugins/horizontalrule/lang/es.js new file mode 100644 index 0000000..4d913c2 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/es.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'es', { | ||
6 | toolbar: 'Insertar Línea Horizontal' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/et.js b/sources/plugins/horizontalrule/lang/et.js new file mode 100644 index 0000000..e1ccddc --- /dev/null +++ b/sources/plugins/horizontalrule/lang/et.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'et', { | ||
6 | toolbar: 'Horisontaaljoone sisestamine' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/eu.js b/sources/plugins/horizontalrule/lang/eu.js new file mode 100644 index 0000000..dfdc82a --- /dev/null +++ b/sources/plugins/horizontalrule/lang/eu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'eu', { | ||
6 | toolbar: 'Txertatu marra horizontala' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/fa.js b/sources/plugins/horizontalrule/lang/fa.js new file mode 100644 index 0000000..7224067 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/fa.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'fa', { | ||
6 | toolbar: 'گنجاندن خط افقی' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/fi.js b/sources/plugins/horizontalrule/lang/fi.js new file mode 100644 index 0000000..8baa64b --- /dev/null +++ b/sources/plugins/horizontalrule/lang/fi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'fi', { | ||
6 | toolbar: 'Lisää murtoviiva' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/fo.js b/sources/plugins/horizontalrule/lang/fo.js new file mode 100644 index 0000000..72bf857 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/fo.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'fo', { | ||
6 | toolbar: 'Ger vatnrætta linju' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/fr-ca.js b/sources/plugins/horizontalrule/lang/fr-ca.js new file mode 100644 index 0000000..a220917 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/fr-ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'fr-ca', { | ||
6 | toolbar: 'Insérer un séparateur horizontale' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/fr.js b/sources/plugins/horizontalrule/lang/fr.js new file mode 100644 index 0000000..18d5d0a --- /dev/null +++ b/sources/plugins/horizontalrule/lang/fr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'fr', { | ||
6 | toolbar: 'Ligne horizontale' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/gl.js b/sources/plugins/horizontalrule/lang/gl.js new file mode 100644 index 0000000..f25cda4 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/gl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'gl', { | ||
6 | toolbar: 'Inserir unha liña horizontal' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/gu.js b/sources/plugins/horizontalrule/lang/gu.js new file mode 100644 index 0000000..e51de2c --- /dev/null +++ b/sources/plugins/horizontalrule/lang/gu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'gu', { | ||
6 | toolbar: 'સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/he.js b/sources/plugins/horizontalrule/lang/he.js new file mode 100644 index 0000000..620371b --- /dev/null +++ b/sources/plugins/horizontalrule/lang/he.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'he', { | ||
6 | toolbar: 'הוספת קו אופקי' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/hi.js b/sources/plugins/horizontalrule/lang/hi.js new file mode 100644 index 0000000..a7f6271 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/hi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'hi', { | ||
6 | toolbar: 'हॉरिज़ॉन्टल रेखा इन्सर्ट करें' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/hr.js b/sources/plugins/horizontalrule/lang/hr.js new file mode 100644 index 0000000..8f516aa --- /dev/null +++ b/sources/plugins/horizontalrule/lang/hr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'hr', { | ||
6 | toolbar: 'Ubaci vodoravnu liniju' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/hu.js b/sources/plugins/horizontalrule/lang/hu.js new file mode 100644 index 0000000..80ffd9c --- /dev/null +++ b/sources/plugins/horizontalrule/lang/hu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'hu', { | ||
6 | toolbar: 'Elválasztóvonal beillesztése' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/id.js b/sources/plugins/horizontalrule/lang/id.js new file mode 100644 index 0000000..0bc3596 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/id.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'id', { | ||
6 | toolbar: 'Sisip Garis Horisontal' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/is.js b/sources/plugins/horizontalrule/lang/is.js new file mode 100644 index 0000000..4d02e8a --- /dev/null +++ b/sources/plugins/horizontalrule/lang/is.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'is', { | ||
6 | toolbar: 'Lóðrétt lína' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/it.js b/sources/plugins/horizontalrule/lang/it.js new file mode 100644 index 0000000..e811c5e --- /dev/null +++ b/sources/plugins/horizontalrule/lang/it.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'it', { | ||
6 | toolbar: 'Inserisci riga orizzontale' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/ja.js b/sources/plugins/horizontalrule/lang/ja.js new file mode 100644 index 0000000..0f59213 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/ja.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'ja', { | ||
6 | toolbar: '水平線' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/ka.js b/sources/plugins/horizontalrule/lang/ka.js new file mode 100644 index 0000000..95498bd --- /dev/null +++ b/sources/plugins/horizontalrule/lang/ka.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'ka', { | ||
6 | toolbar: 'ჰორიზონტალური ხაზის ჩასმა' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/km.js b/sources/plugins/horizontalrule/lang/km.js new file mode 100644 index 0000000..dbc3082 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/km.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'km', { | ||
6 | toolbar: 'បន្ថែមបន្ទាត់ផ្តេក' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/ko.js b/sources/plugins/horizontalrule/lang/ko.js new file mode 100644 index 0000000..e91d21b --- /dev/null +++ b/sources/plugins/horizontalrule/lang/ko.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'ko', { | ||
6 | toolbar: '가로 줄 삽입' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/ku.js b/sources/plugins/horizontalrule/lang/ku.js new file mode 100644 index 0000000..530ee75 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/ku.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'ku', { | ||
6 | toolbar: 'دانانی هێلی ئاسۆیی' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/lt.js b/sources/plugins/horizontalrule/lang/lt.js new file mode 100644 index 0000000..a44e8cd --- /dev/null +++ b/sources/plugins/horizontalrule/lang/lt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'lt', { | ||
6 | toolbar: 'Įterpti horizontalią liniją' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/lv.js b/sources/plugins/horizontalrule/lang/lv.js new file mode 100644 index 0000000..9afbc93 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/lv.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'lv', { | ||
6 | toolbar: 'Ievietot horizontālu Atdalītājsvītru' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/mk.js b/sources/plugins/horizontalrule/lang/mk.js new file mode 100644 index 0000000..41607c7 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/mk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'mk', { | ||
6 | toolbar: 'Insert Horizontal Line' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/mn.js b/sources/plugins/horizontalrule/lang/mn.js new file mode 100644 index 0000000..92e4d5e --- /dev/null +++ b/sources/plugins/horizontalrule/lang/mn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'mn', { | ||
6 | toolbar: 'Хөндлөн зураас оруулах' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/ms.js b/sources/plugins/horizontalrule/lang/ms.js new file mode 100644 index 0000000..84da30f --- /dev/null +++ b/sources/plugins/horizontalrule/lang/ms.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'ms', { | ||
6 | toolbar: 'Masukkan Garisan Membujur' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/nb.js b/sources/plugins/horizontalrule/lang/nb.js new file mode 100644 index 0000000..49bc752 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/nb.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'nb', { | ||
6 | toolbar: 'Sett inn horisontal linje' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/nl.js b/sources/plugins/horizontalrule/lang/nl.js new file mode 100644 index 0000000..0030102 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/nl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'nl', { | ||
6 | toolbar: 'Horizontale lijn invoegen' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/no.js b/sources/plugins/horizontalrule/lang/no.js new file mode 100644 index 0000000..11c153e --- /dev/null +++ b/sources/plugins/horizontalrule/lang/no.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'no', { | ||
6 | toolbar: 'Sett inn horisontal linje' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/pl.js b/sources/plugins/horizontalrule/lang/pl.js new file mode 100644 index 0000000..0676e76 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/pl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'pl', { | ||
6 | toolbar: 'Wstaw poziomą linię' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/pt-br.js b/sources/plugins/horizontalrule/lang/pt-br.js new file mode 100644 index 0000000..2ef26de --- /dev/null +++ b/sources/plugins/horizontalrule/lang/pt-br.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'pt-br', { | ||
6 | toolbar: 'Inserir Linha Horizontal' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/pt.js b/sources/plugins/horizontalrule/lang/pt.js new file mode 100644 index 0000000..097c34d --- /dev/null +++ b/sources/plugins/horizontalrule/lang/pt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'pt', { | ||
6 | toolbar: 'Inserir Linha Horizontal' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/ro.js b/sources/plugins/horizontalrule/lang/ro.js new file mode 100644 index 0000000..7a82af9 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/ro.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'ro', { | ||
6 | toolbar: 'Inserează linie orizontală' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/ru.js b/sources/plugins/horizontalrule/lang/ru.js new file mode 100644 index 0000000..02751af --- /dev/null +++ b/sources/plugins/horizontalrule/lang/ru.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'ru', { | ||
6 | toolbar: 'Вставить горизонтальную линию' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/si.js b/sources/plugins/horizontalrule/lang/si.js new file mode 100644 index 0000000..d4a6e83 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/si.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'si', { | ||
6 | toolbar: 'තිරස් රේඛාවක් ඇතුලත් කරන්න' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/sk.js b/sources/plugins/horizontalrule/lang/sk.js new file mode 100644 index 0000000..b49d505 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/sk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'sk', { | ||
6 | toolbar: 'Vložiť vodorovnú čiaru' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/sl.js b/sources/plugins/horizontalrule/lang/sl.js new file mode 100644 index 0000000..0d51bdd --- /dev/null +++ b/sources/plugins/horizontalrule/lang/sl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'sl', { | ||
6 | toolbar: 'Vstavi vodoravno črto' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/sq.js b/sources/plugins/horizontalrule/lang/sq.js new file mode 100644 index 0000000..af33e7b --- /dev/null +++ b/sources/plugins/horizontalrule/lang/sq.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'sq', { | ||
6 | toolbar: 'Vendos Vijë Horizontale' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/sr-latn.js b/sources/plugins/horizontalrule/lang/sr-latn.js new file mode 100644 index 0000000..f29a557 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/sr-latn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'sr-latn', { | ||
6 | toolbar: 'Unesi horizontalnu liniju' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/sr.js b/sources/plugins/horizontalrule/lang/sr.js new file mode 100644 index 0000000..a76fe42 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/sr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'sr', { | ||
6 | toolbar: 'Унеси хоризонталну линију' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/sv.js b/sources/plugins/horizontalrule/lang/sv.js new file mode 100644 index 0000000..b1315e0 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/sv.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'sv', { | ||
6 | toolbar: 'Infoga horisontal linje' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/th.js b/sources/plugins/horizontalrule/lang/th.js new file mode 100644 index 0000000..a166cb3 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/th.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'th', { | ||
6 | toolbar: 'แทรกเส้นคั่นบรรทัด' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/tr.js b/sources/plugins/horizontalrule/lang/tr.js new file mode 100644 index 0000000..3fd721f --- /dev/null +++ b/sources/plugins/horizontalrule/lang/tr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'tr', { | ||
6 | toolbar: 'Yatay Satır Ekle' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/tt.js b/sources/plugins/horizontalrule/lang/tt.js new file mode 100644 index 0000000..74891c3 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/tt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'tt', { | ||
6 | toolbar: 'Ятма сызык өстәү' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/ug.js b/sources/plugins/horizontalrule/lang/ug.js new file mode 100644 index 0000000..bf2bfa7 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/ug.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'ug', { | ||
6 | toolbar: 'توغرا سىزىق قىستۇر' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/uk.js b/sources/plugins/horizontalrule/lang/uk.js new file mode 100644 index 0000000..b6b56ef --- /dev/null +++ b/sources/plugins/horizontalrule/lang/uk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'uk', { | ||
6 | toolbar: 'Горизонтальна лінія' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/vi.js b/sources/plugins/horizontalrule/lang/vi.js new file mode 100644 index 0000000..040055f --- /dev/null +++ b/sources/plugins/horizontalrule/lang/vi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'vi', { | ||
6 | toolbar: 'Chèn đường phân cách ngang' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/zh-cn.js b/sources/plugins/horizontalrule/lang/zh-cn.js new file mode 100644 index 0000000..29dc458 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/zh-cn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'zh-cn', { | ||
6 | toolbar: '插入水平线' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/lang/zh.js b/sources/plugins/horizontalrule/lang/zh.js new file mode 100644 index 0000000..79e80b0 --- /dev/null +++ b/sources/plugins/horizontalrule/lang/zh.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'horizontalrule', 'zh', { | ||
6 | toolbar: '插入水平線' | ||
7 | } ); | ||
diff --git a/sources/plugins/horizontalrule/plugin.js b/sources/plugins/horizontalrule/plugin.js new file mode 100644 index 0000000..c7faa89 --- /dev/null +++ b/sources/plugins/horizontalrule/plugin.js | |||
@@ -0,0 +1,43 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview Horizontal Rule plugin. | ||
8 | */ | ||
9 | |||
10 | ( function() { | ||
11 | var horizontalruleCmd = { | ||
12 | canUndo: false, // The undo snapshot will be handled by 'insertElement'. | ||
13 | exec: function( editor ) { | ||
14 | var hr = editor.document.createElement( 'hr' ); | ||
15 | editor.insertElement( hr ); | ||
16 | }, | ||
17 | |||
18 | allowedContent: 'hr', | ||
19 | requiredContent: 'hr' | ||
20 | }; | ||
21 | |||
22 | var pluginName = 'horizontalrule'; | ||
23 | |||
24 | // Register a plugin named "horizontalrule". | ||
25 | CKEDITOR.plugins.add( pluginName, { | ||
26 | // jscs:disable maximumLineLength | ||
27 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
28 | // jscs:enable maximumLineLength | ||
29 | icons: 'horizontalrule', // %REMOVE_LINE_CORE% | ||
30 | hidpi: true, // %REMOVE_LINE_CORE% | ||
31 | init: function( editor ) { | ||
32 | if ( editor.blockless ) | ||
33 | return; | ||
34 | |||
35 | editor.addCommand( pluginName, horizontalruleCmd ); | ||
36 | editor.ui.addButton && editor.ui.addButton( 'HorizontalRule', { | ||
37 | label: editor.lang.horizontalrule.toolbar, | ||
38 | command: pluginName, | ||
39 | toolbar: 'insert,40' | ||
40 | } ); | ||
41 | } | ||
42 | } ); | ||
43 | } )(); | ||
diff --git a/sources/plugins/htmlwriter/plugin.js b/sources/plugins/htmlwriter/plugin.js new file mode 100644 index 0000000..063c966 --- /dev/null +++ b/sources/plugins/htmlwriter/plugin.js | |||
@@ -0,0 +1,359 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.add( 'htmlwriter', { | ||
7 | init: function( editor ) { | ||
8 | var writer = new CKEDITOR.htmlWriter(); | ||
9 | |||
10 | writer.forceSimpleAmpersand = editor.config.forceSimpleAmpersand; | ||
11 | writer.indentationChars = editor.config.dataIndentationChars || '\t'; | ||
12 | |||
13 | // Overwrite default basicWriter initialized in hmtlDataProcessor constructor. | ||
14 | editor.dataProcessor.writer = writer; | ||
15 | } | ||
16 | } ); | ||
17 | |||
18 | /** | ||
19 | * The class used to write HTML data. | ||
20 | * | ||
21 | * var writer = new CKEDITOR.htmlWriter(); | ||
22 | * writer.openTag( 'p' ); | ||
23 | * writer.attribute( 'class', 'MyClass' ); | ||
24 | * writer.openTagClose( 'p' ); | ||
25 | * writer.text( 'Hello' ); | ||
26 | * writer.closeTag( 'p' ); | ||
27 | * alert( writer.getHtml() ); // '<p class="MyClass">Hello</p>' | ||
28 | * | ||
29 | * @class | ||
30 | * @extends CKEDITOR.htmlParser.basicWriter | ||
31 | */ | ||
32 | CKEDITOR.htmlWriter = CKEDITOR.tools.createClass( { | ||
33 | base: CKEDITOR.htmlParser.basicWriter, | ||
34 | |||
35 | /** | ||
36 | * Creates an `htmlWriter` class instance. | ||
37 | * | ||
38 | * @constructor | ||
39 | */ | ||
40 | $: function() { | ||
41 | // Call the base contructor. | ||
42 | this.base(); | ||
43 | |||
44 | /** | ||
45 | * The characters to be used for each indentation step. | ||
46 | * | ||
47 | * // Use tab for indentation. | ||
48 | * editorInstance.dataProcessor.writer.indentationChars = '\t'; | ||
49 | */ | ||
50 | this.indentationChars = '\t'; | ||
51 | |||
52 | /** | ||
53 | * The characters to be used to close "self-closing" elements, like `<br>` or `<img>`. | ||
54 | * | ||
55 | * // Use HTML4 notation for self-closing elements. | ||
56 | * editorInstance.dataProcessor.writer.selfClosingEnd = '>'; | ||
57 | */ | ||
58 | this.selfClosingEnd = ' />'; | ||
59 | |||
60 | /** | ||
61 | * The characters to be used for line breaks. | ||
62 | * | ||
63 | * // Use CRLF for line breaks. | ||
64 | * editorInstance.dataProcessor.writer.lineBreakChars = '\r\n'; | ||
65 | */ | ||
66 | this.lineBreakChars = '\n'; | ||
67 | |||
68 | this.sortAttributes = 1; | ||
69 | |||
70 | this._.indent = 0; | ||
71 | this._.indentation = ''; | ||
72 | // Indicate preformatted block context status. (#5789) | ||
73 | this._.inPre = 0; | ||
74 | this._.rules = {}; | ||
75 | |||
76 | var dtd = CKEDITOR.dtd; | ||
77 | |||
78 | for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { | ||
79 | this.setRules( e, { | ||
80 | indent: !dtd[ e ][ '#' ], | ||
81 | breakBeforeOpen: 1, | ||
82 | breakBeforeClose: !dtd[ e ][ '#' ], | ||
83 | breakAfterClose: 1, | ||
84 | needsSpace: ( e in dtd.$block ) && !( e in { li: 1, dt: 1, dd: 1 } ) | ||
85 | } ); | ||
86 | } | ||
87 | |||
88 | this.setRules( 'br', { breakAfterOpen: 1 } ); | ||
89 | |||
90 | this.setRules( 'title', { | ||
91 | indent: 0, | ||
92 | breakAfterOpen: 0 | ||
93 | } ); | ||
94 | |||
95 | this.setRules( 'style', { | ||
96 | indent: 0, | ||
97 | breakBeforeClose: 1 | ||
98 | } ); | ||
99 | |||
100 | this.setRules( 'pre', { | ||
101 | breakAfterOpen: 1, // Keep line break after the opening tag | ||
102 | indent: 0 // Disable indentation on <pre>. | ||
103 | } ); | ||
104 | }, | ||
105 | |||
106 | proto: { | ||
107 | /** | ||
108 | * Writes the tag opening part for an opener tag. | ||
109 | * | ||
110 | * // Writes '<p'. | ||
111 | * writer.openTag( 'p', { class : 'MyClass', id : 'MyId' } ); | ||
112 | * | ||
113 | * @param {String} tagName The element name for this tag. | ||
114 | * @param {Object} attributes The attributes defined for this tag. The | ||
115 | * attributes could be used to inspect the tag. | ||
116 | */ | ||
117 | openTag: function( tagName ) { | ||
118 | var rules = this._.rules[ tagName ]; | ||
119 | |||
120 | if ( this._.afterCloser && rules && rules.needsSpace && this._.needsSpace ) | ||
121 | this._.output.push( '\n' ); | ||
122 | |||
123 | if ( this._.indent ) | ||
124 | this.indentation(); | ||
125 | // Do not break if indenting. | ||
126 | else if ( rules && rules.breakBeforeOpen ) { | ||
127 | this.lineBreak(); | ||
128 | this.indentation(); | ||
129 | } | ||
130 | |||
131 | this._.output.push( '<', tagName ); | ||
132 | |||
133 | this._.afterCloser = 0; | ||
134 | }, | ||
135 | |||
136 | /** | ||
137 | * Writes the tag closing part for an opener tag. | ||
138 | * | ||
139 | * // Writes '>'. | ||
140 | * writer.openTagClose( 'p', false ); | ||
141 | * | ||
142 | * // Writes ' />'. | ||
143 | * writer.openTagClose( 'br', true ); | ||
144 | * | ||
145 | * @param {String} tagName The element name for this tag. | ||
146 | * @param {Boolean} isSelfClose Indicates that this is a self-closing tag, | ||
147 | * like `<br>` or `<img>`. | ||
148 | */ | ||
149 | openTagClose: function( tagName, isSelfClose ) { | ||
150 | var rules = this._.rules[ tagName ]; | ||
151 | |||
152 | if ( isSelfClose ) { | ||
153 | this._.output.push( this.selfClosingEnd ); | ||
154 | |||
155 | if ( rules && rules.breakAfterClose ) | ||
156 | this._.needsSpace = rules.needsSpace; | ||
157 | } else { | ||
158 | this._.output.push( '>' ); | ||
159 | |||
160 | if ( rules && rules.indent ) | ||
161 | this._.indentation += this.indentationChars; | ||
162 | } | ||
163 | |||
164 | if ( rules && rules.breakAfterOpen ) | ||
165 | this.lineBreak(); | ||
166 | tagName == 'pre' && ( this._.inPre = 1 ); | ||
167 | }, | ||
168 | |||
169 | /** | ||
170 | * Writes an attribute. This function should be called after opening the | ||
171 | * tag with {@link #openTagClose}. | ||
172 | * | ||
173 | * // Writes ' class="MyClass"'. | ||
174 | * writer.attribute( 'class', 'MyClass' ); | ||
175 | * | ||
176 | * @param {String} attName The attribute name. | ||
177 | * @param {String} attValue The attribute value. | ||
178 | */ | ||
179 | attribute: function( attName, attValue ) { | ||
180 | |||
181 | if ( typeof attValue == 'string' ) { | ||
182 | this.forceSimpleAmpersand && ( attValue = attValue.replace( /&/g, '&' ) ); | ||
183 | // Browsers don't always escape special character in attribute values. (#4683, #4719). | ||
184 | attValue = CKEDITOR.tools.htmlEncodeAttr( attValue ); | ||
185 | } | ||
186 | |||
187 | this._.output.push( ' ', attName, '="', attValue, '"' ); | ||
188 | }, | ||
189 | |||
190 | /** | ||
191 | * Writes a closer tag. | ||
192 | * | ||
193 | * // Writes '</p>'. | ||
194 | * writer.closeTag( 'p' ); | ||
195 | * | ||
196 | * @param {String} tagName The element name for this tag. | ||
197 | */ | ||
198 | closeTag: function( tagName ) { | ||
199 | var rules = this._.rules[ tagName ]; | ||
200 | |||
201 | if ( rules && rules.indent ) | ||
202 | this._.indentation = this._.indentation.substr( this.indentationChars.length ); | ||
203 | |||
204 | if ( this._.indent ) | ||
205 | this.indentation(); | ||
206 | // Do not break if indenting. | ||
207 | else if ( rules && rules.breakBeforeClose ) { | ||
208 | this.lineBreak(); | ||
209 | this.indentation(); | ||
210 | } | ||
211 | |||
212 | this._.output.push( '</', tagName, '>' ); | ||
213 | tagName == 'pre' && ( this._.inPre = 0 ); | ||
214 | |||
215 | if ( rules && rules.breakAfterClose ) { | ||
216 | this.lineBreak(); | ||
217 | this._.needsSpace = rules.needsSpace; | ||
218 | } | ||
219 | |||
220 | this._.afterCloser = 1; | ||
221 | }, | ||
222 | |||
223 | /** | ||
224 | * Writes text. | ||
225 | * | ||
226 | * // Writes 'Hello Word'. | ||
227 | * writer.text( 'Hello Word' ); | ||
228 | * | ||
229 | * @param {String} text The text value | ||
230 | */ | ||
231 | text: function( text ) { | ||
232 | if ( this._.indent ) { | ||
233 | this.indentation(); | ||
234 | !this._.inPre && ( text = CKEDITOR.tools.ltrim( text ) ); | ||
235 | } | ||
236 | |||
237 | this._.output.push( text ); | ||
238 | }, | ||
239 | |||
240 | /** | ||
241 | * Writes a comment. | ||
242 | * | ||
243 | * // Writes "<!-- My comment -->". | ||
244 | * writer.comment( ' My comment ' ); | ||
245 | * | ||
246 | * @param {String} comment The comment text. | ||
247 | */ | ||
248 | comment: function( comment ) { | ||
249 | if ( this._.indent ) | ||
250 | this.indentation(); | ||
251 | |||
252 | this._.output.push( '<!--', comment, '-->' ); | ||
253 | }, | ||
254 | |||
255 | /** | ||
256 | * Writes a line break. It uses the {@link #lineBreakChars} property for it. | ||
257 | * | ||
258 | * // Writes '\n' (e.g.). | ||
259 | * writer.lineBreak(); | ||
260 | */ | ||
261 | lineBreak: function() { | ||
262 | if ( !this._.inPre && this._.output.length > 0 ) | ||
263 | this._.output.push( this.lineBreakChars ); | ||
264 | this._.indent = 1; | ||
265 | }, | ||
266 | |||
267 | /** | ||
268 | * Writes the current indentation character. It uses the {@link #indentationChars} | ||
269 | * property, repeating it for the current indentation steps. | ||
270 | * | ||
271 | * // Writes '\t' (e.g.). | ||
272 | * writer.indentation(); | ||
273 | */ | ||
274 | indentation: function() { | ||
275 | if ( !this._.inPre && this._.indentation ) | ||
276 | this._.output.push( this._.indentation ); | ||
277 | this._.indent = 0; | ||
278 | }, | ||
279 | |||
280 | /** | ||
281 | * Empties the current output buffer. It also brings back the default | ||
282 | * values of the writer flags. | ||
283 | * | ||
284 | * writer.reset(); | ||
285 | */ | ||
286 | reset: function() { | ||
287 | this._.output = []; | ||
288 | this._.indent = 0; | ||
289 | this._.indentation = ''; | ||
290 | this._.afterCloser = 0; | ||
291 | this._.inPre = 0; | ||
292 | }, | ||
293 | |||
294 | /** | ||
295 | * Sets formatting rules for a given element. Possible rules are: | ||
296 | * | ||
297 | * * `indent` – indent the element content. | ||
298 | * * `breakBeforeOpen` – break line before the opener tag for this element. | ||
299 | * * `breakAfterOpen` – break line after the opener tag for this element. | ||
300 | * * `breakBeforeClose` – break line before the closer tag for this element. | ||
301 | * * `breakAfterClose` – break line after the closer tag for this element. | ||
302 | * | ||
303 | * All rules default to `false`. Each function call overrides rules that are | ||
304 | * already present, leaving the undefined ones untouched. | ||
305 | * | ||
306 | * By default, all elements available in the {@link CKEDITOR.dtd#$block}, | ||
307 | * {@link CKEDITOR.dtd#$listItem}, and {@link CKEDITOR.dtd#$tableContent} | ||
308 | * lists have all the above rules set to `true`. Additionaly, the `<br>` | ||
309 | * element has the `breakAfterOpen` rule set to `true`. | ||
310 | * | ||
311 | * // Break line before and after "img" tags. | ||
312 | * writer.setRules( 'img', { | ||
313 | * breakBeforeOpen: true | ||
314 | * breakAfterOpen: true | ||
315 | * } ); | ||
316 | * | ||
317 | * // Reset the rules for the "h1" tag. | ||
318 | * writer.setRules( 'h1', {} ); | ||
319 | * | ||
320 | * @param {String} tagName The name of the element for which the rules are set. | ||
321 | * @param {Object} rules An object containing the element rules. | ||
322 | */ | ||
323 | setRules: function( tagName, rules ) { | ||
324 | var currentRules = this._.rules[ tagName ]; | ||
325 | |||
326 | if ( currentRules ) | ||
327 | CKEDITOR.tools.extend( currentRules, rules, true ); | ||
328 | else | ||
329 | this._.rules[ tagName ] = rules; | ||
330 | } | ||
331 | } | ||
332 | } ); | ||
333 | |||
334 | /** | ||
335 | * Whether to force using `'&'` instead of `'&'` in element attributes | ||
336 | * values. It is not recommended to change this setting for compliance with the | ||
337 | * W3C XHTML 1.0 standards ([C.12, XHTML 1.0](http://www.w3.org/TR/xhtml1/#C_12)). | ||
338 | * | ||
339 | * // Use `'&'` instead of `'&'` | ||
340 | * CKEDITOR.config.forceSimpleAmpersand = true; | ||
341 | * | ||
342 | * @cfg {Boolean} [forceSimpleAmpersand=false] | ||
343 | * @member CKEDITOR.config | ||
344 | */ | ||
345 | |||
346 | /** | ||
347 | * The characters to be used for indenting HTML output produced by the editor. | ||
348 | * Using characters different from `' '` (space) and `'\t'` (tab) is not recommended | ||
349 | * as it will mess the code. | ||
350 | * | ||
351 | * // No indentation. | ||
352 | * CKEDITOR.config.dataIndentationChars = ''; | ||
353 | * | ||
354 | * // Use two spaces for indentation. | ||
355 | * CKEDITOR.config.dataIndentationChars = ' '; | ||
356 | * | ||
357 | * @cfg {String} [dataIndentationChars='\t'] | ||
358 | * @member CKEDITOR.config | ||
359 | */ | ||
diff --git a/sources/plugins/htmlwriter/samples/assets/outputforflash/outputforflash.fla b/sources/plugins/htmlwriter/samples/assets/outputforflash/outputforflash.fla new file mode 100644 index 0000000..27e68cc --- /dev/null +++ b/sources/plugins/htmlwriter/samples/assets/outputforflash/outputforflash.fla | |||
Binary files differ | |||
diff --git a/sources/plugins/htmlwriter/samples/assets/outputforflash/outputforflash.swf b/sources/plugins/htmlwriter/samples/assets/outputforflash/outputforflash.swf new file mode 100644 index 0000000..dbe17b6 --- /dev/null +++ b/sources/plugins/htmlwriter/samples/assets/outputforflash/outputforflash.swf | |||
Binary files differ | |||
diff --git a/sources/plugins/htmlwriter/samples/assets/outputforflash/swfobject.js b/sources/plugins/htmlwriter/samples/assets/outputforflash/swfobject.js new file mode 100644 index 0000000..90cdcc9 --- /dev/null +++ b/sources/plugins/htmlwriter/samples/assets/outputforflash/swfobject.js | |||
@@ -0,0 +1,5 @@ | |||
1 | | ||
2 | /* SWFObject v2.2 <http://code.google.com/p/swfobject/> | ||
3 | is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> | ||
4 | */ | ||
5 | var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}(); | ||
diff --git a/sources/plugins/htmlwriter/samples/outputforflash.html b/sources/plugins/htmlwriter/samples/outputforflash.html new file mode 100644 index 0000000..a4318f3 --- /dev/null +++ b/sources/plugins/htmlwriter/samples/outputforflash.html | |||
@@ -0,0 +1,283 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <!-- | ||
3 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
4 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
5 | --> | ||
6 | <html> | ||
7 | <head> | ||
8 | <meta charset="utf-8"> | ||
9 | <title>Output for Flash — CKEditor Sample</title> | ||
10 | <script src="../../../ckeditor.js"></script> | ||
11 | <script src="../../../samples/old/sample.js"></script> | ||
12 | <script src="assets/outputforflash/swfobject.js"></script> | ||
13 | <link href="../../../samples/old/sample.css" rel="stylesheet"> | ||
14 | <meta name="ckeditor-sample-required-plugins" content="sourcearea"> | ||
15 | <meta name="ckeditor-sample-name" content="Output for Flash"> | ||
16 | <meta name="ckeditor-sample-group" content="Advanced Samples"> | ||
17 | <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce HTML code that can be used with Adobe Flash."> | ||
18 | <style> | ||
19 | |||
20 | .alert | ||
21 | { | ||
22 | background: #ffa84c; | ||
23 | padding: 10px 15px; | ||
24 | font-weight: bold; | ||
25 | display: block; | ||
26 | margin-bottom: 20px; | ||
27 | } | ||
28 | |||
29 | </style> | ||
30 | </head> | ||
31 | <body> | ||
32 | <h1 class="samples"> | ||
33 | <a href="../../../samples/old/index.html">CKEditor Samples</a> » Producing Flash Compliant HTML Output | ||
34 | </h1> | ||
35 | <div class="warning deprecated"> | ||
36 | This sample is not maintained anymore. Check out the <a href="http://sdk.ckeditor.com/">brand new samples in CKEditor SDK</a>. | ||
37 | </div> | ||
38 | <div class="description"> | ||
39 | <p> | ||
40 | This sample shows how to configure CKEditor to output | ||
41 | HTML code that can be used with | ||
42 | <a class="samples" href="http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000922.html"> | ||
43 | Adobe Flash</a>. | ||
44 | The code will contain a subset of standard HTML elements like <code><b></code>, | ||
45 | <code><i></code>, and <code><p></code> as well as HTML attributes. | ||
46 | </p> | ||
47 | <p> | ||
48 | To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard | ||
49 | JavaScript call, and define CKEditor features to use HTML elements and attributes. | ||
50 | </p> | ||
51 | <p> | ||
52 | For details on how to create this setup check the source code of this sample page. | ||
53 | </p> | ||
54 | </div> | ||
55 | <p> | ||
56 | To see how it works, create some content in the editing area of CKEditor on the left | ||
57 | and send it to the Flash object on the right side of the page by using the | ||
58 | <strong>Send to Flash</strong> button. | ||
59 | </p> | ||
60 | <table style="width: 100%; border-spacing: 0; border-collapse:collapse;"> | ||
61 | <tr> | ||
62 | <td style="width: 100%"> | ||
63 | <textarea cols="80" id="editor1" name="editor1" rows="10"><p><b><font size="18" style="font-size:18px;">Flash and HTML</font></b></p><p>&nbsp;</p><p>It is possible to have <a href="http://ckeditor.com">CKEditor</a> creating content that will be later loaded inside <b>Flash</b> objects and animations.</p><p>&nbsp;</p><p>Flash has a few limitations when dealing with HTML:</p><p>&nbsp;</p><ul><li>It has limited support on tags.</li><li>There is no margin between block elements, like paragraphs.</li></ul></textarea> | ||
64 | <script> | ||
65 | |||
66 | if ( document.location.protocol == 'file:' ) | ||
67 | alert( 'Warning: This samples does not work when loaded from local filesystem' + | ||
68 | 'due to security restrictions implemented in Flash.' + | ||
69 | '\n\nPlease load the sample from a web server instead.' ); | ||
70 | |||
71 | var editor = CKEDITOR.replace( 'editor1', { | ||
72 | /* | ||
73 | * Ensure that htmlwriter plugin, which is required for this sample, is loaded. | ||
74 | */ | ||
75 | extraPlugins: 'htmlwriter', | ||
76 | |||
77 | height: 290, | ||
78 | width: '100%', | ||
79 | toolbar: [ | ||
80 | [ 'Source', '-', 'Bold', 'Italic', 'Underline', '-', 'BulletedList', '-', 'Link', 'Unlink' ], | ||
81 | [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' ], | ||
82 | '/', | ||
83 | [ 'Font', 'FontSize' ], | ||
84 | [ 'TextColor', '-', 'About' ] | ||
85 | ], | ||
86 | |||
87 | /* | ||
88 | * Style sheet for the contents | ||
89 | */ | ||
90 | contentsCss: 'body {color:#000; background-color#FFF; font-family: Arial; font-size:80%;} p, ol, ul {margin-top: 0px; margin-bottom: 0px;}', | ||
91 | |||
92 | /* | ||
93 | * Quirks doctype | ||
94 | */ | ||
95 | docType: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', | ||
96 | |||
97 | /* | ||
98 | * Core styles. | ||
99 | */ | ||
100 | coreStyles_bold: { element: 'b' }, | ||
101 | coreStyles_italic: { element: 'i' }, | ||
102 | coreStyles_underline: { element: 'u' }, | ||
103 | |||
104 | /* | ||
105 | * Font face. | ||
106 | */ | ||
107 | |||
108 | // Define the way font elements will be applied to the document. The "font" | ||
109 | // element will be used. | ||
110 | font_style: { | ||
111 | element: 'font', | ||
112 | attributes: { 'face': '#(family)' } | ||
113 | }, | ||
114 | |||
115 | /* | ||
116 | * Font sizes. | ||
117 | */ | ||
118 | |||
119 | // The CSS part of the font sizes isn't used by Flash, it is there to get the | ||
120 | // font rendered correctly in CKEditor. | ||
121 | fontSize_sizes: '8px/8;9px/9;10px/10;11px/11;12px/12;14px/14;16px/16;18px/18;20px/20;22px/22;24px/24;26px/26;28px/28;36px/36;48px/48;72px/72', | ||
122 | fontSize_style: { | ||
123 | element: 'font', | ||
124 | attributes: { 'size': '#(size)' }, | ||
125 | styles: { 'font-size': '#(size)px' } | ||
126 | } , | ||
127 | |||
128 | /* | ||
129 | * Font colors. | ||
130 | */ | ||
131 | colorButton_enableMore: true, | ||
132 | |||
133 | colorButton_foreStyle: { | ||
134 | element: 'font', | ||
135 | attributes: { 'color': '#(color)' } | ||
136 | }, | ||
137 | |||
138 | colorButton_backStyle: { | ||
139 | element: 'font', | ||
140 | styles: { 'background-color': '#(color)' } | ||
141 | }, | ||
142 | |||
143 | on: { 'instanceReady': configureFlashOutput } | ||
144 | }); | ||
145 | |||
146 | /* | ||
147 | * Adjust the behavior of the dataProcessor to match the | ||
148 | * requirements of Flash | ||
149 | */ | ||
150 | function configureFlashOutput( ev ) { | ||
151 | var editor = ev.editor, | ||
152 | dataProcessor = editor.dataProcessor, | ||
153 | htmlFilter = dataProcessor && dataProcessor.htmlFilter; | ||
154 | |||
155 | // Out self closing tags the HTML4 way, like <br>. | ||
156 | dataProcessor.writer.selfClosingEnd = '>'; | ||
157 | |||
158 | // Make output formatting match Flash expectations | ||
159 | var dtd = CKEDITOR.dtd; | ||
160 | for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { | ||
161 | dataProcessor.writer.setRules( e, { | ||
162 | indent: false, | ||
163 | breakBeforeOpen: false, | ||
164 | breakAfterOpen: false, | ||
165 | breakBeforeClose: false, | ||
166 | breakAfterClose: false | ||
167 | }); | ||
168 | } | ||
169 | dataProcessor.writer.setRules( 'br', { | ||
170 | indent: false, | ||
171 | breakBeforeOpen: false, | ||
172 | breakAfterOpen: false, | ||
173 | breakBeforeClose: false, | ||
174 | breakAfterClose: false | ||
175 | }); | ||
176 | |||
177 | // Output properties as attributes, not styles. | ||
178 | htmlFilter.addRules( { | ||
179 | elements: { | ||
180 | $: function( element ) { | ||
181 | var style, match, width, height, align; | ||
182 | |||
183 | // Output dimensions of images as width and height | ||
184 | if ( element.name == 'img' ) { | ||
185 | style = element.attributes.style; | ||
186 | |||
187 | if ( style ) { | ||
188 | // Get the width from the style. | ||
189 | match = ( /(?:^|\s)width\s*:\s*(\d+)px/i ).exec( style ); | ||
190 | width = match && match[1]; | ||
191 | |||
192 | // Get the height from the style. | ||
193 | match = ( /(?:^|\s)height\s*:\s*(\d+)px/i ).exec( style ); | ||
194 | height = match && match[1]; | ||
195 | |||
196 | if ( width ) { | ||
197 | element.attributes.style = element.attributes.style.replace( /(?:^|\s)width\s*:\s*(\d+)px;?/i , '' ); | ||
198 | element.attributes.width = width; | ||
199 | } | ||
200 | |||
201 | if ( height ) { | ||
202 | element.attributes.style = element.attributes.style.replace( /(?:^|\s)height\s*:\s*(\d+)px;?/i , '' ); | ||
203 | element.attributes.height = height; | ||
204 | } | ||
205 | } | ||
206 | } | ||
207 | |||
208 | // Output alignment of paragraphs using align | ||
209 | if ( element.name == 'p' ) { | ||
210 | style = element.attributes.style; | ||
211 | |||
212 | if ( style ) { | ||
213 | // Get the align from the style. | ||
214 | match = ( /(?:^|\s)text-align\s*:\s*(\w*);?/i ).exec( style ); | ||
215 | align = match && match[1]; | ||
216 | |||
217 | if ( align ) { | ||
218 | element.attributes.style = element.attributes.style.replace( /(?:^|\s)text-align\s*:\s*(\w*);?/i , '' ); | ||
219 | element.attributes.align = align; | ||
220 | } | ||
221 | } | ||
222 | } | ||
223 | |||
224 | if ( element.attributes.style === '' ) | ||
225 | delete element.attributes.style; | ||
226 | |||
227 | return element; | ||
228 | } | ||
229 | } | ||
230 | }); | ||
231 | } | ||
232 | |||
233 | function sendToFlash() { | ||
234 | var html = CKEDITOR.instances.editor1.getData() ; | ||
235 | |||
236 | // Quick fix for link color. | ||
237 | html = html.replace( /<a /g, '<font color="#0000FF"><u><a ' ) | ||
238 | html = html.replace( /<\/a>/g, '</a></u></font>' ) | ||
239 | |||
240 | var flash = document.getElementById( 'ckFlashContainer' ) ; | ||
241 | flash.setData( html ) ; | ||
242 | } | ||
243 | |||
244 | CKEDITOR.domReady( function() { | ||
245 | if ( !swfobject.hasFlashPlayerVersion( '8' ) ) { | ||
246 | CKEDITOR.dom.element.createFromHtml( '<span class="alert">' + | ||
247 | 'At least Adobe Flash Player 8 is required to run this sample. ' + | ||
248 | 'You can download it from <a href="http://get.adobe.com/flashplayer">Adobe\'s website</a>.' + | ||
249 | '</span>' ).insertBefore( editor.element ); | ||
250 | } | ||
251 | |||
252 | swfobject.embedSWF( | ||
253 | 'assets/outputforflash/outputforflash.swf', | ||
254 | 'ckFlashContainer', | ||
255 | '550', | ||
256 | '400', | ||
257 | '8', | ||
258 | { wmode: 'transparent' } | ||
259 | ); | ||
260 | }); | ||
261 | |||
262 | </script> | ||
263 | <p> | ||
264 | <input type="button" value="Send to Flash" onclick="sendToFlash();"> | ||
265 | </p> | ||
266 | </td> | ||
267 | <td style="vertical-align: top; padding-left: 20px"> | ||
268 | <div id="ckFlashContainer"></div> | ||
269 | </td> | ||
270 | </tr> | ||
271 | </table> | ||
272 | <div id="footer"> | ||
273 | <hr> | ||
274 | <p> | ||
275 | CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> | ||
276 | </p> | ||
277 | <p id="copy"> | ||
278 | Copyright © 2003-2016, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico | ||
279 | Knabben. All rights reserved. | ||
280 | </p> | ||
281 | </div> | ||
282 | </body> | ||
283 | </html> | ||
diff --git a/sources/plugins/htmlwriter/samples/outputhtml.html b/sources/plugins/htmlwriter/samples/outputhtml.html new file mode 100644 index 0000000..f7123a1 --- /dev/null +++ b/sources/plugins/htmlwriter/samples/outputhtml.html | |||
@@ -0,0 +1,224 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <!-- | ||
3 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
4 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
5 | --> | ||
6 | <html> | ||
7 | <head> | ||
8 | <meta charset="utf-8"> | ||
9 | <title>HTML Compliant Output — CKEditor Sample</title> | ||
10 | <script src="../../../ckeditor.js"></script> | ||
11 | <script src="../../../samples/old/sample.js"></script> | ||
12 | <link href="../../../samples/old/sample.css" rel="stylesheet"> | ||
13 | <meta name="ckeditor-sample-required-plugins" content="sourcearea"> | ||
14 | <meta name="ckeditor-sample-name" content="Output HTML"> | ||
15 | <meta name="ckeditor-sample-group" content="Advanced Samples"> | ||
16 | <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce legacy HTML 4 code."> | ||
17 | </head> | ||
18 | <body> | ||
19 | <h1 class="samples"> | ||
20 | <a href="../../../samples/old/index.html">CKEditor Samples</a> » Producing HTML Compliant Output | ||
21 | </h1> | ||
22 | <div class="warning deprecated"> | ||
23 | This sample is not maintained anymore. Check out the <a href="http://sdk.ckeditor.com/">brand new samples in CKEditor SDK</a>. | ||
24 | </div> | ||
25 | <div class="description"> | ||
26 | <p> | ||
27 | This sample shows how to configure CKEditor to output valid | ||
28 | <a class="samples" href="http://www.w3.org/TR/html401/">HTML 4.01</a> code. | ||
29 | Traditional HTML elements like <code><b></code>, | ||
30 | <code><i></code>, and <code><font></code> are used in place of | ||
31 | <code><strong></code>, <code><em></code>, and CSS styles. | ||
32 | </p> | ||
33 | <p> | ||
34 | To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard | ||
35 | JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes. | ||
36 | </p> | ||
37 | <p> | ||
38 | A snippet of the configuration code can be seen below; check the source of this page for | ||
39 | full definition: | ||
40 | </p> | ||
41 | <pre class="samples"> | ||
42 | CKEDITOR.replace( '<em>textarea_id</em>', { | ||
43 | coreStyles_bold: { element: 'b' }, | ||
44 | coreStyles_italic: { element: 'i' }, | ||
45 | |||
46 | fontSize_style: { | ||
47 | element: 'font', | ||
48 | attributes: { 'size': '#(size)' } | ||
49 | } | ||
50 | |||
51 | ... | ||
52 | });</pre> | ||
53 | </div> | ||
54 | <form action="../../../samples/sample_posteddata.php" method="post"> | ||
55 | <p> | ||
56 | <label for="editor1"> | ||
57 | Editor 1: | ||
58 | </label> | ||
59 | <textarea cols="80" id="editor1" name="editor1" rows="10"><p>This is some <b>sample text</b>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> | ||
60 | <script> | ||
61 | |||
62 | CKEDITOR.replace( 'editor1', { | ||
63 | /* | ||
64 | * Ensure that htmlwriter plugin, which is required for this sample, is loaded. | ||
65 | */ | ||
66 | extraPlugins: 'htmlwriter', | ||
67 | |||
68 | /* | ||
69 | * Style sheet for the contents | ||
70 | */ | ||
71 | contentsCss: 'body {color:#000; background-color#:FFF;}', | ||
72 | |||
73 | /* | ||
74 | * Simple HTML5 doctype | ||
75 | */ | ||
76 | docType: '<!DOCTYPE HTML>', | ||
77 | |||
78 | /* | ||
79 | * Allowed content rules which beside limiting allowed HTML | ||
80 | * will also take care of transforming styles to attributes | ||
81 | * (currently only for img - see transformation rules defined below). | ||
82 | * | ||
83 | * Read more: http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter | ||
84 | */ | ||
85 | allowedContent: | ||
86 | 'h1 h2 h3 p pre[align]; ' + | ||
87 | 'blockquote code kbd samp var del ins cite q b i u strike ul ol li hr table tbody tr td th caption; ' + | ||
88 | 'img[!src,alt,align,width,height]; font[!face]; font[!family]; font[!color]; font[!size]; font{!background-color}; a[!href]; a[!name]', | ||
89 | |||
90 | /* | ||
91 | * Core styles. | ||
92 | */ | ||
93 | coreStyles_bold: { element: 'b' }, | ||
94 | coreStyles_italic: { element: 'i' }, | ||
95 | coreStyles_underline: { element: 'u' }, | ||
96 | coreStyles_strike: { element: 'strike' }, | ||
97 | |||
98 | /* | ||
99 | * Font face. | ||
100 | */ | ||
101 | |||
102 | // Define the way font elements will be applied to the document. | ||
103 | // The "font" element will be used. | ||
104 | font_style: { | ||
105 | element: 'font', | ||
106 | attributes: { 'face': '#(family)' } | ||
107 | }, | ||
108 | |||
109 | /* | ||
110 | * Font sizes. | ||
111 | */ | ||
112 | fontSize_sizes: 'xx-small/1;x-small/2;small/3;medium/4;large/5;x-large/6;xx-large/7', | ||
113 | fontSize_style: { | ||
114 | element: 'font', | ||
115 | attributes: { 'size': '#(size)' } | ||
116 | }, | ||
117 | |||
118 | /* | ||
119 | * Font colors. | ||
120 | */ | ||
121 | |||
122 | colorButton_foreStyle: { | ||
123 | element: 'font', | ||
124 | attributes: { 'color': '#(color)' } | ||
125 | }, | ||
126 | |||
127 | colorButton_backStyle: { | ||
128 | element: 'font', | ||
129 | styles: { 'background-color': '#(color)' } | ||
130 | }, | ||
131 | |||
132 | /* | ||
133 | * Styles combo. | ||
134 | */ | ||
135 | stylesSet: [ | ||
136 | { name: 'Computer Code', element: 'code' }, | ||
137 | { name: 'Keyboard Phrase', element: 'kbd' }, | ||
138 | { name: 'Sample Text', element: 'samp' }, | ||
139 | { name: 'Variable', element: 'var' }, | ||
140 | { name: 'Deleted Text', element: 'del' }, | ||
141 | { name: 'Inserted Text', element: 'ins' }, | ||
142 | { name: 'Cited Work', element: 'cite' }, | ||
143 | { name: 'Inline Quotation', element: 'q' } | ||
144 | ], | ||
145 | |||
146 | on: { | ||
147 | pluginsLoaded: configureTransformations, | ||
148 | loaded: configureHtmlWriter | ||
149 | } | ||
150 | }); | ||
151 | |||
152 | /* | ||
153 | * Add missing content transformations. | ||
154 | */ | ||
155 | function configureTransformations( evt ) { | ||
156 | var editor = evt.editor; | ||
157 | |||
158 | editor.dataProcessor.htmlFilter.addRules( { | ||
159 | attributes: { | ||
160 | style: function( value, element ) { | ||
161 | // Return #RGB for background and border colors | ||
162 | return CKEDITOR.tools.convertRgbToHex( value ); | ||
163 | } | ||
164 | } | ||
165 | } ); | ||
166 | |||
167 | // Default automatic content transformations do not yet take care of | ||
168 | // align attributes on blocks, so we need to add our own transformation rules. | ||
169 | function alignToAttribute( element ) { | ||
170 | if ( element.styles[ 'text-align' ] ) { | ||
171 | element.attributes.align = element.styles[ 'text-align' ]; | ||
172 | delete element.styles[ 'text-align' ]; | ||
173 | } | ||
174 | } | ||
175 | editor.filter.addTransformations( [ | ||
176 | [ { element: 'p', right: alignToAttribute } ], | ||
177 | [ { element: 'h1', right: alignToAttribute } ], | ||
178 | [ { element: 'h2', right: alignToAttribute } ], | ||
179 | [ { element: 'h3', right: alignToAttribute } ], | ||
180 | [ { element: 'pre', right: alignToAttribute } ] | ||
181 | ] ); | ||
182 | } | ||
183 | |||
184 | /* | ||
185 | * Adjust the behavior of htmlWriter to make it output HTML like FCKeditor. | ||
186 | */ | ||
187 | function configureHtmlWriter( evt ) { | ||
188 | var editor = evt.editor, | ||
189 | dataProcessor = editor.dataProcessor; | ||
190 | |||
191 | // Out self closing tags the HTML4 way, like <br>. | ||
192 | dataProcessor.writer.selfClosingEnd = '>'; | ||
193 | |||
194 | // Make output formatting behave similar to FCKeditor. | ||
195 | var dtd = CKEDITOR.dtd; | ||
196 | for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { | ||
197 | dataProcessor.writer.setRules( e, { | ||
198 | indent: true, | ||
199 | breakBeforeOpen: true, | ||
200 | breakAfterOpen: false, | ||
201 | breakBeforeClose: !dtd[ e ][ '#' ], | ||
202 | breakAfterClose: true | ||
203 | }); | ||
204 | } | ||
205 | } | ||
206 | |||
207 | </script> | ||
208 | </p> | ||
209 | <p> | ||
210 | <input type="submit" value="Submit"> | ||
211 | </p> | ||
212 | </form> | ||
213 | <div id="footer"> | ||
214 | <hr> | ||
215 | <p> | ||
216 | CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> | ||
217 | </p> | ||
218 | <p id="copy"> | ||
219 | Copyright © 2003-2016, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico | ||
220 | Knabben. All rights reserved. | ||
221 | </p> | ||
222 | </div> | ||
223 | </body> | ||
224 | </html> | ||
diff --git a/sources/plugins/iframe/dialogs/iframe.js b/sources/plugins/iframe/dialogs/iframe.js new file mode 100644 index 0000000..4b874ca --- /dev/null +++ b/sources/plugins/iframe/dialogs/iframe.js | |||
@@ -0,0 +1,207 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | // Map 'true' and 'false' values to match W3C's specifications | ||
8 | // http://www.w3.org/TR/REC-html40/present/frames.html#h-16.5 | ||
9 | var checkboxValues = { | ||
10 | scrolling: { 'true': 'yes', 'false': 'no' }, | ||
11 | frameborder: { 'true': '1', 'false': '0' } | ||
12 | }; | ||
13 | |||
14 | function loadValue( iframeNode ) { | ||
15 | var isCheckbox = this instanceof CKEDITOR.ui.dialog.checkbox; | ||
16 | if ( iframeNode.hasAttribute( this.id ) ) { | ||
17 | var value = iframeNode.getAttribute( this.id ); | ||
18 | if ( isCheckbox ) | ||
19 | this.setValue( checkboxValues[ this.id ][ 'true' ] == value.toLowerCase() ); | ||
20 | else | ||
21 | this.setValue( value ); | ||
22 | } | ||
23 | } | ||
24 | |||
25 | function commitValue( iframeNode ) { | ||
26 | var isRemove = this.getValue() === '', | ||
27 | isCheckbox = this instanceof CKEDITOR.ui.dialog.checkbox, | ||
28 | value = this.getValue(); | ||
29 | if ( isRemove ) | ||
30 | iframeNode.removeAttribute( this.att || this.id ); | ||
31 | else if ( isCheckbox ) | ||
32 | iframeNode.setAttribute( this.id, checkboxValues[ this.id ][ value ] ); | ||
33 | else | ||
34 | iframeNode.setAttribute( this.att || this.id, value ); | ||
35 | } | ||
36 | |||
37 | CKEDITOR.dialog.add( 'iframe', function( editor ) { | ||
38 | var iframeLang = editor.lang.iframe, | ||
39 | commonLang = editor.lang.common, | ||
40 | dialogadvtab = editor.plugins.dialogadvtab; | ||
41 | return { | ||
42 | title: iframeLang.title, | ||
43 | minWidth: 350, | ||
44 | minHeight: 260, | ||
45 | onShow: function() { | ||
46 | // Clear previously saved elements. | ||
47 | this.fakeImage = this.iframeNode = null; | ||
48 | |||
49 | var fakeImage = this.getSelectedElement(); | ||
50 | if ( fakeImage && fakeImage.data( 'cke-real-element-type' ) && fakeImage.data( 'cke-real-element-type' ) == 'iframe' ) { | ||
51 | this.fakeImage = fakeImage; | ||
52 | |||
53 | var iframeNode = editor.restoreRealElement( fakeImage ); | ||
54 | this.iframeNode = iframeNode; | ||
55 | |||
56 | this.setupContent( iframeNode ); | ||
57 | } | ||
58 | }, | ||
59 | onOk: function() { | ||
60 | var iframeNode; | ||
61 | if ( !this.fakeImage ) | ||
62 | iframeNode = new CKEDITOR.dom.element( 'iframe' ); | ||
63 | else | ||
64 | iframeNode = this.iframeNode; | ||
65 | |||
66 | // A subset of the specified attributes/styles | ||
67 | // should also be applied on the fake element to | ||
68 | // have better visual effect. (#5240) | ||
69 | var extraStyles = {}, | ||
70 | extraAttributes = {}; | ||
71 | this.commitContent( iframeNode, extraStyles, extraAttributes ); | ||
72 | |||
73 | // Refresh the fake image. | ||
74 | var newFakeImage = editor.createFakeElement( iframeNode, 'cke_iframe', 'iframe', true ); | ||
75 | newFakeImage.setAttributes( extraAttributes ); | ||
76 | newFakeImage.setStyles( extraStyles ); | ||
77 | if ( this.fakeImage ) { | ||
78 | newFakeImage.replace( this.fakeImage ); | ||
79 | editor.getSelection().selectElement( newFakeImage ); | ||
80 | } else { | ||
81 | editor.insertElement( newFakeImage ); | ||
82 | } | ||
83 | }, | ||
84 | contents: [ { | ||
85 | id: 'info', | ||
86 | label: commonLang.generalTab, | ||
87 | accessKey: 'I', | ||
88 | elements: [ { | ||
89 | type: 'vbox', | ||
90 | padding: 0, | ||
91 | children: [ { | ||
92 | id: 'src', | ||
93 | type: 'text', | ||
94 | label: commonLang.url, | ||
95 | required: true, | ||
96 | validate: CKEDITOR.dialog.validate.notEmpty( iframeLang.noUrl ), | ||
97 | setup: loadValue, | ||
98 | commit: commitValue | ||
99 | } ] | ||
100 | }, | ||
101 | { | ||
102 | type: 'hbox', | ||
103 | children: [ { | ||
104 | id: 'width', | ||
105 | type: 'text', | ||
106 | requiredContent: 'iframe[width]', | ||
107 | style: 'width:100%', | ||
108 | labelLayout: 'vertical', | ||
109 | label: commonLang.width, | ||
110 | validate: CKEDITOR.dialog.validate.htmlLength( commonLang.invalidHtmlLength.replace( '%1', commonLang.width ) ), | ||
111 | setup: loadValue, | ||
112 | commit: commitValue | ||
113 | }, | ||
114 | { | ||
115 | id: 'height', | ||
116 | type: 'text', | ||
117 | requiredContent: 'iframe[height]', | ||
118 | style: 'width:100%', | ||
119 | labelLayout: 'vertical', | ||
120 | label: commonLang.height, | ||
121 | validate: CKEDITOR.dialog.validate.htmlLength( commonLang.invalidHtmlLength.replace( '%1', commonLang.height ) ), | ||
122 | setup: loadValue, | ||
123 | commit: commitValue | ||
124 | }, | ||
125 | { | ||
126 | id: 'align', | ||
127 | type: 'select', | ||
128 | requiredContent: 'iframe[align]', | ||
129 | 'default': '', | ||
130 | items: [ | ||
131 | [ commonLang.notSet, '' ], | ||
132 | [ commonLang.alignLeft, 'left' ], | ||
133 | [ commonLang.alignRight, 'right' ], | ||
134 | [ commonLang.alignTop, 'top' ], | ||
135 | [ commonLang.alignMiddle, 'middle' ], | ||
136 | [ commonLang.alignBottom, 'bottom' ] | ||
137 | ], | ||
138 | style: 'width:100%', | ||
139 | labelLayout: 'vertical', | ||
140 | label: commonLang.align, | ||
141 | setup: function( iframeNode, fakeImage ) { | ||
142 | loadValue.apply( this, arguments ); | ||
143 | if ( fakeImage ) { | ||
144 | var fakeImageAlign = fakeImage.getAttribute( 'align' ); | ||
145 | this.setValue( fakeImageAlign && fakeImageAlign.toLowerCase() || '' ); | ||
146 | } | ||
147 | }, | ||
148 | commit: function( iframeNode, extraStyles, extraAttributes ) { | ||
149 | commitValue.apply( this, arguments ); | ||
150 | if ( this.getValue() ) | ||
151 | extraAttributes.align = this.getValue(); | ||
152 | } | ||
153 | } ] | ||
154 | }, | ||
155 | { | ||
156 | type: 'hbox', | ||
157 | widths: [ '50%', '50%' ], | ||
158 | children: [ { | ||
159 | id: 'scrolling', | ||
160 | type: 'checkbox', | ||
161 | requiredContent: 'iframe[scrolling]', | ||
162 | label: iframeLang.scrolling, | ||
163 | setup: loadValue, | ||
164 | commit: commitValue | ||
165 | }, | ||
166 | { | ||
167 | id: 'frameborder', | ||
168 | type: 'checkbox', | ||
169 | requiredContent: 'iframe[frameborder]', | ||
170 | label: iframeLang.border, | ||
171 | setup: loadValue, | ||
172 | commit: commitValue | ||
173 | } ] | ||
174 | }, | ||
175 | { | ||
176 | type: 'hbox', | ||
177 | widths: [ '50%', '50%' ], | ||
178 | children: [ { | ||
179 | id: 'name', | ||
180 | type: 'text', | ||
181 | requiredContent: 'iframe[name]', | ||
182 | label: commonLang.name, | ||
183 | setup: loadValue, | ||
184 | commit: commitValue | ||
185 | }, | ||
186 | { | ||
187 | id: 'title', | ||
188 | type: 'text', | ||
189 | requiredContent: 'iframe[title]', | ||
190 | label: commonLang.advisoryTitle, | ||
191 | setup: loadValue, | ||
192 | commit: commitValue | ||
193 | } ] | ||
194 | }, | ||
195 | { | ||
196 | id: 'longdesc', | ||
197 | type: 'text', | ||
198 | requiredContent: 'iframe[longdesc]', | ||
199 | label: commonLang.longDescr, | ||
200 | setup: loadValue, | ||
201 | commit: commitValue | ||
202 | } ] | ||
203 | }, | ||
204 | dialogadvtab && dialogadvtab.createAdvancedTab( editor, { id: 1, classes: 1, styles: 1 }, 'iframe' ) | ||
205 | ] }; | ||
206 | } ); | ||
207 | } )(); | ||
diff --git a/sources/plugins/iframe/icons/hidpi/iframe.png b/sources/plugins/iframe/icons/hidpi/iframe.png new file mode 100644 index 0000000..ff17604 --- /dev/null +++ b/sources/plugins/iframe/icons/hidpi/iframe.png | |||
Binary files differ | |||
diff --git a/sources/plugins/iframe/icons/iframe.png b/sources/plugins/iframe/icons/iframe.png new file mode 100644 index 0000000..f72d191 --- /dev/null +++ b/sources/plugins/iframe/icons/iframe.png | |||
Binary files differ | |||
diff --git a/sources/plugins/iframe/images/placeholder.png b/sources/plugins/iframe/images/placeholder.png new file mode 100644 index 0000000..4af0956 --- /dev/null +++ b/sources/plugins/iframe/images/placeholder.png | |||
Binary files differ | |||
diff --git a/sources/plugins/iframe/lang/af.js b/sources/plugins/iframe/lang/af.js new file mode 100644 index 0000000..4770879 --- /dev/null +++ b/sources/plugins/iframe/lang/af.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'af', { | ||
6 | border: 'Wys rand van raam', | ||
7 | noUrl: 'Gee die iframe URL', | ||
8 | scrolling: 'Skuifbalke aan', | ||
9 | title: 'IFrame Eienskappe', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/ar.js b/sources/plugins/iframe/lang/ar.js new file mode 100644 index 0000000..1b5c046 --- /dev/null +++ b/sources/plugins/iframe/lang/ar.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'ar', { | ||
6 | border: 'إظهار حدود الإطار', | ||
7 | noUrl: 'فضلا أكتب رابط الـ iframe', | ||
8 | scrolling: 'تفعيل أشرطة الإنتقال', | ||
9 | title: 'خصائص iframe', | ||
10 | toolbar: 'iframe' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/bg.js b/sources/plugins/iframe/lang/bg.js new file mode 100644 index 0000000..d365742 --- /dev/null +++ b/sources/plugins/iframe/lang/bg.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'bg', { | ||
6 | border: 'Показва рамка на карето', | ||
7 | noUrl: 'Моля въведете URL за iFrame', | ||
8 | scrolling: 'Вкл. скролбаровете', | ||
9 | title: 'IFrame настройки', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/bn.js b/sources/plugins/iframe/lang/bn.js new file mode 100644 index 0000000..0a91e7c --- /dev/null +++ b/sources/plugins/iframe/lang/bn.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'bn', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/bs.js b/sources/plugins/iframe/lang/bs.js new file mode 100644 index 0000000..63eb7b6 --- /dev/null +++ b/sources/plugins/iframe/lang/bs.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'bs', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/ca.js b/sources/plugins/iframe/lang/ca.js new file mode 100644 index 0000000..0802715 --- /dev/null +++ b/sources/plugins/iframe/lang/ca.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'ca', { | ||
6 | border: 'Mostra la vora del marc', | ||
7 | noUrl: 'Si us plau, introdueixi la URL de l\'iframe', | ||
8 | scrolling: 'Activa les barres de desplaçament', | ||
9 | title: 'Propietats de l\'IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/cs.js b/sources/plugins/iframe/lang/cs.js new file mode 100644 index 0000000..fa3e85c --- /dev/null +++ b/sources/plugins/iframe/lang/cs.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'cs', { | ||
6 | border: 'Zobrazit okraj', | ||
7 | noUrl: 'Zadejte prosím URL obsahu pro IFrame', | ||
8 | scrolling: 'Zapnout posuvníky', | ||
9 | title: 'Vlastnosti IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/cy.js b/sources/plugins/iframe/lang/cy.js new file mode 100644 index 0000000..e89adc7 --- /dev/null +++ b/sources/plugins/iframe/lang/cy.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'cy', { | ||
6 | border: 'Dangos ymyl y ffrâm', | ||
7 | noUrl: 'Rhowch URL yr iframe', | ||
8 | scrolling: 'Galluogi bariau sgrolio', | ||
9 | title: 'Priodweddau IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/da.js b/sources/plugins/iframe/lang/da.js new file mode 100644 index 0000000..d14b8cd --- /dev/null +++ b/sources/plugins/iframe/lang/da.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'da', { | ||
6 | border: 'Vis kant på rammen', | ||
7 | noUrl: 'Venligst indsæt URL på iframen', | ||
8 | scrolling: 'Aktiver scrollbars', | ||
9 | title: 'Iframe egenskaber', | ||
10 | toolbar: 'Iframe' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/de-ch.js b/sources/plugins/iframe/lang/de-ch.js new file mode 100644 index 0000000..233b55b --- /dev/null +++ b/sources/plugins/iframe/lang/de-ch.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'de-ch', { | ||
6 | border: 'Rahmen anzeigen', | ||
7 | noUrl: 'Bitte geben Sie die IFrame-URL an', | ||
8 | scrolling: 'Rollbalken anzeigen', | ||
9 | title: 'IFrame-Eigenschaften', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/de.js b/sources/plugins/iframe/lang/de.js new file mode 100644 index 0000000..184387f --- /dev/null +++ b/sources/plugins/iframe/lang/de.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'de', { | ||
6 | border: 'Rahmen anzeigen', | ||
7 | noUrl: 'Bitte geben Sie die IFrame-URL an', | ||
8 | scrolling: 'Rollbalken anzeigen', | ||
9 | title: 'IFrame-Eigenschaften', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/el.js b/sources/plugins/iframe/lang/el.js new file mode 100644 index 0000000..b09fdf9 --- /dev/null +++ b/sources/plugins/iframe/lang/el.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'el', { | ||
6 | border: 'Προβολή περιγράμματος πλαισίου', | ||
7 | noUrl: 'Παρακαλούμε εισάγεται το URL του iframe', | ||
8 | scrolling: 'Ενεργοποίηση μπαρών κύλισης', | ||
9 | title: 'Ιδιότητες IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/en-au.js b/sources/plugins/iframe/lang/en-au.js new file mode 100644 index 0000000..9f0885f --- /dev/null +++ b/sources/plugins/iframe/lang/en-au.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'en-au', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/en-ca.js b/sources/plugins/iframe/lang/en-ca.js new file mode 100644 index 0000000..20d438c --- /dev/null +++ b/sources/plugins/iframe/lang/en-ca.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'en-ca', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/en-gb.js b/sources/plugins/iframe/lang/en-gb.js new file mode 100644 index 0000000..86a3fc0 --- /dev/null +++ b/sources/plugins/iframe/lang/en-gb.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'en-gb', { | ||
6 | border: 'Show frame border', | ||
7 | noUrl: 'Please type the iframe URL', | ||
8 | scrolling: 'Enable scrollbars', | ||
9 | title: 'IFrame Properties', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/en.js b/sources/plugins/iframe/lang/en.js new file mode 100644 index 0000000..cf39cbe --- /dev/null +++ b/sources/plugins/iframe/lang/en.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'en', { | ||
6 | border: 'Show frame border', | ||
7 | noUrl: 'Please type the iframe URL', | ||
8 | scrolling: 'Enable scrollbars', | ||
9 | title: 'IFrame Properties', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/eo.js b/sources/plugins/iframe/lang/eo.js new file mode 100644 index 0000000..1f50783 --- /dev/null +++ b/sources/plugins/iframe/lang/eo.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'eo', { | ||
6 | border: 'Montri borderon de kadro (frame)', | ||
7 | noUrl: 'Bonvolu entajpi la retadreson de la ligilo al la enlinia kadro (IFrame)', | ||
8 | scrolling: 'Ebligi rulumskalon', | ||
9 | title: 'Atributoj de la enlinia kadro (IFrame)', | ||
10 | toolbar: 'Enlinia kadro (IFrame)' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/es.js b/sources/plugins/iframe/lang/es.js new file mode 100644 index 0000000..67955e3 --- /dev/null +++ b/sources/plugins/iframe/lang/es.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'es', { | ||
6 | border: 'Mostrar borde del marco', | ||
7 | noUrl: 'Por favor, escriba la dirección del iframe', | ||
8 | scrolling: 'Activar barras de desplazamiento', | ||
9 | title: 'Propiedades de iframe', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/et.js b/sources/plugins/iframe/lang/et.js new file mode 100644 index 0000000..e01acb8 --- /dev/null +++ b/sources/plugins/iframe/lang/et.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'et', { | ||
6 | border: 'Raami äärise näitamine', | ||
7 | noUrl: 'Vali iframe URLi liik', | ||
8 | scrolling: 'Kerimisribade lubamine', | ||
9 | title: 'IFrame omadused', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/eu.js b/sources/plugins/iframe/lang/eu.js new file mode 100644 index 0000000..9f78376 --- /dev/null +++ b/sources/plugins/iframe/lang/eu.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'eu', { | ||
6 | border: 'Erakutsi markoaren ertza', | ||
7 | noUrl: 'Idatzi iframe-aren URLa, mesedez.', | ||
8 | scrolling: 'Gaitu korritze-barrak', | ||
9 | title: 'IFrame-aren propietateak', | ||
10 | toolbar: 'IFrame-a' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/fa.js b/sources/plugins/iframe/lang/fa.js new file mode 100644 index 0000000..4f96602 --- /dev/null +++ b/sources/plugins/iframe/lang/fa.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'fa', { | ||
6 | border: 'نمایش خطوط frame', | ||
7 | noUrl: 'لطفا مسیر URL iframe را درج کنید', | ||
8 | scrolling: 'نمایش خطکشها', | ||
9 | title: 'ویژگیهای IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/fi.js b/sources/plugins/iframe/lang/fi.js new file mode 100644 index 0000000..3413f0e --- /dev/null +++ b/sources/plugins/iframe/lang/fi.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'fi', { | ||
6 | border: 'Näytä kehyksen reunat', | ||
7 | noUrl: 'Anna IFrame-kehykselle lähdeosoite (src)', | ||
8 | scrolling: 'Näytä vierityspalkit', | ||
9 | title: 'IFrame-kehyksen ominaisuudet', | ||
10 | toolbar: 'IFrame-kehys' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/fo.js b/sources/plugins/iframe/lang/fo.js new file mode 100644 index 0000000..877e5d8 --- /dev/null +++ b/sources/plugins/iframe/lang/fo.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'fo', { | ||
6 | border: 'Vís frame kant', | ||
7 | noUrl: 'Vinarliga skriva URL til iframe', | ||
8 | scrolling: 'Loyv scrollbars', | ||
9 | title: 'Møguleikar fyri IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/fr-ca.js b/sources/plugins/iframe/lang/fr-ca.js new file mode 100644 index 0000000..d472cf9 --- /dev/null +++ b/sources/plugins/iframe/lang/fr-ca.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'fr-ca', { | ||
6 | border: 'Afficher la bordure du cadre', | ||
7 | noUrl: 'Veuillez entre l\'URL du IFrame', | ||
8 | scrolling: 'Activer les barres de défilement', | ||
9 | title: 'Propriétés du IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/fr.js b/sources/plugins/iframe/lang/fr.js new file mode 100644 index 0000000..3cfd49a --- /dev/null +++ b/sources/plugins/iframe/lang/fr.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'fr', { | ||
6 | border: 'Afficher une bordure de la IFrame', | ||
7 | noUrl: 'Veuillez entrer l\'adresse du lien de la IFrame', | ||
8 | scrolling: 'Permettre à la barre de défilement', | ||
9 | title: 'Propriétés de la IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/gl.js b/sources/plugins/iframe/lang/gl.js new file mode 100644 index 0000000..a19d1ee --- /dev/null +++ b/sources/plugins/iframe/lang/gl.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'gl', { | ||
6 | border: 'Amosar o bordo do marco', | ||
7 | noUrl: 'Escriba o enderezo do iframe', | ||
8 | scrolling: 'Activar as barras de desprazamento', | ||
9 | title: 'Propiedades do iFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/gu.js b/sources/plugins/iframe/lang/gu.js new file mode 100644 index 0000000..285484c --- /dev/null +++ b/sources/plugins/iframe/lang/gu.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'gu', { | ||
6 | border: 'ફ્રેમ બોર્ડેર બતાવવી', | ||
7 | noUrl: 'iframe URL ટાઈપ્ કરો', | ||
8 | scrolling: 'સ્ક્રોલબાર ચાલુ કરવા', | ||
9 | title: 'IFrame વિકલ્પો', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/he.js b/sources/plugins/iframe/lang/he.js new file mode 100644 index 0000000..bd9ce8b --- /dev/null +++ b/sources/plugins/iframe/lang/he.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'he', { | ||
6 | border: 'הראה מסגרת לחלון', | ||
7 | noUrl: 'יש להכניס כתובת לחלון.', | ||
8 | scrolling: 'אפשר פסי גלילה', | ||
9 | title: 'מאפייני חלון פנימי (iframe)', | ||
10 | toolbar: 'חלון פנימי (iframe)' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/hi.js b/sources/plugins/iframe/lang/hi.js new file mode 100644 index 0000000..a51c275 --- /dev/null +++ b/sources/plugins/iframe/lang/hi.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'hi', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/hr.js b/sources/plugins/iframe/lang/hr.js new file mode 100644 index 0000000..d01d19a --- /dev/null +++ b/sources/plugins/iframe/lang/hr.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'hr', { | ||
6 | border: 'Prikaži okvir IFrame-a', | ||
7 | noUrl: 'Unesite URL iframe-a', | ||
8 | scrolling: 'Omogući trake za skrolanje', | ||
9 | title: 'IFrame svojstva', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/hu.js b/sources/plugins/iframe/lang/hu.js new file mode 100644 index 0000000..7b69168 --- /dev/null +++ b/sources/plugins/iframe/lang/hu.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'hu', { | ||
6 | border: 'Legyen keret', | ||
7 | noUrl: 'Kérem írja be a iframe URL-t', | ||
8 | scrolling: 'Gördítősáv bekapcsolása', | ||
9 | title: 'IFrame Tulajdonságok', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/id.js b/sources/plugins/iframe/lang/id.js new file mode 100644 index 0000000..9f2fb24 --- /dev/null +++ b/sources/plugins/iframe/lang/id.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'id', { | ||
6 | border: 'Tampilkan Batas Bingkai', | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Aktifkan Scrollbar', | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/is.js b/sources/plugins/iframe/lang/is.js new file mode 100644 index 0000000..7a75de8 --- /dev/null +++ b/sources/plugins/iframe/lang/is.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'is', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/it.js b/sources/plugins/iframe/lang/it.js new file mode 100644 index 0000000..a785132 --- /dev/null +++ b/sources/plugins/iframe/lang/it.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'it', { | ||
6 | border: 'Mostra il bordo', | ||
7 | noUrl: 'Inserire l\'URL del campo IFrame', | ||
8 | scrolling: 'Abilita scrollbar', | ||
9 | title: 'Proprietà IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/ja.js b/sources/plugins/iframe/lang/ja.js new file mode 100644 index 0000000..a24dd15 --- /dev/null +++ b/sources/plugins/iframe/lang/ja.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'ja', { | ||
6 | border: 'フレームの枠を表示', | ||
7 | noUrl: 'iframeのURLを入力してください。', | ||
8 | scrolling: 'スクロールバーの表示を許可', | ||
9 | title: 'iFrameのプロパティ', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/ka.js b/sources/plugins/iframe/lang/ka.js new file mode 100644 index 0000000..a7d3320 --- /dev/null +++ b/sources/plugins/iframe/lang/ka.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'ka', { | ||
6 | border: 'ჩარჩოს გამოჩენა', | ||
7 | noUrl: 'აკრიფეთ iframe-ის URL', | ||
8 | scrolling: 'გადახვევის ზოლების დაშვება', | ||
9 | title: 'IFrame-ის პარამეტრები', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/km.js b/sources/plugins/iframe/lang/km.js new file mode 100644 index 0000000..0fea30c --- /dev/null +++ b/sources/plugins/iframe/lang/km.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'km', { | ||
6 | border: 'បង្ហាញបន្ទាត់ស៊ុម', | ||
7 | noUrl: 'សូមបញ្ចូល URL របស់ iframe', | ||
8 | scrolling: 'ប្រើរបាររំកិល', | ||
9 | title: 'លក្ខណៈសម្បត្តិ IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/ko.js b/sources/plugins/iframe/lang/ko.js new file mode 100644 index 0000000..358b101 --- /dev/null +++ b/sources/plugins/iframe/lang/ko.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'ko', { | ||
6 | border: '프레임 테두리 표시', | ||
7 | noUrl: '아이프레임 주소(URL)를 입력해주세요.', | ||
8 | scrolling: '스크롤바 사용', | ||
9 | title: '아이프레임 속성', | ||
10 | toolbar: '아이프레임' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/ku.js b/sources/plugins/iframe/lang/ku.js new file mode 100644 index 0000000..6217ee1 --- /dev/null +++ b/sources/plugins/iframe/lang/ku.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'ku', { | ||
6 | border: 'نیشاندانی لاکێشه بە چوواردەوری چووارچێوە', | ||
7 | noUrl: 'تکایه ناونیشانی بەستەر بنووسه بۆ چووارچێوه', | ||
8 | scrolling: 'چالاککردنی هاتووچۆپێکردن', | ||
9 | title: 'دیالۆگی چووارچێوه', | ||
10 | toolbar: 'چووارچێوه' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/lt.js b/sources/plugins/iframe/lang/lt.js new file mode 100644 index 0000000..6b4c298 --- /dev/null +++ b/sources/plugins/iframe/lang/lt.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'lt', { | ||
6 | border: 'Rodyti rėmelį', | ||
7 | noUrl: 'Nurodykite iframe nuorodą', | ||
8 | scrolling: 'Įjungti slankiklius', | ||
9 | title: 'IFrame nustatymai', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/lv.js b/sources/plugins/iframe/lang/lv.js new file mode 100644 index 0000000..6b10267 --- /dev/null +++ b/sources/plugins/iframe/lang/lv.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'lv', { | ||
6 | border: 'Rādīt rāmi', | ||
7 | noUrl: 'Norādiet iframe adresi', | ||
8 | scrolling: 'Atļaut ritjoslas', | ||
9 | title: 'IFrame uzstādījumi', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/mk.js b/sources/plugins/iframe/lang/mk.js new file mode 100644 index 0000000..6f0c2a2 --- /dev/null +++ b/sources/plugins/iframe/lang/mk.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'mk', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/mn.js b/sources/plugins/iframe/lang/mn.js new file mode 100644 index 0000000..bba8e02 --- /dev/null +++ b/sources/plugins/iframe/lang/mn.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'mn', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/ms.js b/sources/plugins/iframe/lang/ms.js new file mode 100644 index 0000000..eea00cb --- /dev/null +++ b/sources/plugins/iframe/lang/ms.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'ms', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/nb.js b/sources/plugins/iframe/lang/nb.js new file mode 100644 index 0000000..ffd6997 --- /dev/null +++ b/sources/plugins/iframe/lang/nb.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'nb', { | ||
6 | border: 'Vis ramme rundt iframe', | ||
7 | noUrl: 'Vennligst skriv inn URL for iframe', | ||
8 | scrolling: 'Aktiver scrollefelt', | ||
9 | title: 'Egenskaper for IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/nl.js b/sources/plugins/iframe/lang/nl.js new file mode 100644 index 0000000..fc80c47 --- /dev/null +++ b/sources/plugins/iframe/lang/nl.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'nl', { | ||
6 | border: 'Framerand tonen', | ||
7 | noUrl: 'Vul de IFrame URL in', | ||
8 | scrolling: 'Scrollbalken inschakelen', | ||
9 | title: 'IFrame-eigenschappen', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/no.js b/sources/plugins/iframe/lang/no.js new file mode 100644 index 0000000..59c7255 --- /dev/null +++ b/sources/plugins/iframe/lang/no.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'no', { | ||
6 | border: 'Viss ramme rundt iframe', | ||
7 | noUrl: 'Vennligst skriv inn URL for iframe', | ||
8 | scrolling: 'Aktiver scrollefelt', | ||
9 | title: 'Egenskaper for IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/pl.js b/sources/plugins/iframe/lang/pl.js new file mode 100644 index 0000000..3f63161 --- /dev/null +++ b/sources/plugins/iframe/lang/pl.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'pl', { | ||
6 | border: 'Pokaż obramowanie obiektu IFrame', | ||
7 | noUrl: 'Podaj adres URL elementu IFrame', | ||
8 | scrolling: 'Włącz paski przewijania', | ||
9 | title: 'Właściwości elementu IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/pt-br.js b/sources/plugins/iframe/lang/pt-br.js new file mode 100644 index 0000000..ae9157f --- /dev/null +++ b/sources/plugins/iframe/lang/pt-br.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'pt-br', { | ||
6 | border: 'Mostra borda do iframe', | ||
7 | noUrl: 'Insira a URL do iframe', | ||
8 | scrolling: 'Abilita scrollbars', | ||
9 | title: 'Propriedade do IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/pt.js b/sources/plugins/iframe/lang/pt.js new file mode 100644 index 0000000..0440cb0 --- /dev/null +++ b/sources/plugins/iframe/lang/pt.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'pt', { | ||
6 | border: 'Mostrar a borda da Frame', | ||
7 | noUrl: 'Por favor, digite o URL da iframe', | ||
8 | scrolling: 'Ativar barras de rolamento', | ||
9 | title: 'Propriedades da IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/ro.js b/sources/plugins/iframe/lang/ro.js new file mode 100644 index 0000000..96dbb43 --- /dev/null +++ b/sources/plugins/iframe/lang/ro.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'ro', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/ru.js b/sources/plugins/iframe/lang/ru.js new file mode 100644 index 0000000..ca0bf8e --- /dev/null +++ b/sources/plugins/iframe/lang/ru.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'ru', { | ||
6 | border: 'Показать границы фрейма', | ||
7 | noUrl: 'Пожалуйста, введите ссылку фрейма', | ||
8 | scrolling: 'Отображать полосы прокрутки', | ||
9 | title: 'Свойства iFrame', | ||
10 | toolbar: 'iFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/si.js b/sources/plugins/iframe/lang/si.js new file mode 100644 index 0000000..17d800d --- /dev/null +++ b/sources/plugins/iframe/lang/si.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'si', { | ||
6 | border: 'සැකිල්ලේ කඩයිම් ', | ||
7 | noUrl: 'කරුණාකර රුපයේ URL ලියන්න', | ||
8 | scrolling: 'සක්ක්රිය කරන්න', | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/sk.js b/sources/plugins/iframe/lang/sk.js new file mode 100644 index 0000000..1b360d8 --- /dev/null +++ b/sources/plugins/iframe/lang/sk.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'sk', { | ||
6 | border: 'Zobraziť rám frame-u', | ||
7 | noUrl: 'Prosím, vložte URL iframe', | ||
8 | scrolling: 'Povoliť skrolovanie', | ||
9 | title: 'Vlastnosti IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/sl.js b/sources/plugins/iframe/lang/sl.js new file mode 100644 index 0000000..13eab17 --- /dev/null +++ b/sources/plugins/iframe/lang/sl.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'sl', { | ||
6 | border: 'Pokaži mejo okvira', | ||
7 | noUrl: 'Prosimo, vnesite iframe URL', | ||
8 | scrolling: 'Omogoči scrollbars', | ||
9 | title: 'IFrame Lastnosti', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/sq.js b/sources/plugins/iframe/lang/sq.js new file mode 100644 index 0000000..671f743 --- /dev/null +++ b/sources/plugins/iframe/lang/sq.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'sq', { | ||
6 | border: 'Shfaq kufirin e kornizës', | ||
7 | noUrl: 'Ju lutemi shkruani URL-në e iframe-it', | ||
8 | scrolling: 'Lejo shiritët zvarritës', | ||
9 | title: 'Karakteristikat e IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/sr-latn.js b/sources/plugins/iframe/lang/sr-latn.js new file mode 100644 index 0000000..7b7e316 --- /dev/null +++ b/sources/plugins/iframe/lang/sr-latn.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'sr-latn', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/sr.js b/sources/plugins/iframe/lang/sr.js new file mode 100644 index 0000000..d59430a --- /dev/null +++ b/sources/plugins/iframe/lang/sr.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'sr', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' // MISSING | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/sv.js b/sources/plugins/iframe/lang/sv.js new file mode 100644 index 0000000..bd9f5f5 --- /dev/null +++ b/sources/plugins/iframe/lang/sv.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'sv', { | ||
6 | border: 'Visa ramkant', | ||
7 | noUrl: 'Skriv in URL för iFrame', | ||
8 | scrolling: 'Aktivera rullningslister', | ||
9 | title: 'iFrame Egenskaper', | ||
10 | toolbar: 'iFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/th.js b/sources/plugins/iframe/lang/th.js new file mode 100644 index 0000000..f22f335 --- /dev/null +++ b/sources/plugins/iframe/lang/th.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'th', { | ||
6 | border: 'Show frame border', // MISSING | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame Properties', // MISSING | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/tr.js b/sources/plugins/iframe/lang/tr.js new file mode 100644 index 0000000..6738e2a --- /dev/null +++ b/sources/plugins/iframe/lang/tr.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'tr', { | ||
6 | border: 'Çerceve sınırlarını göster', | ||
7 | noUrl: 'Lütfen IFrame köprü (URL) bağlantısını yazın', | ||
8 | scrolling: 'Kaydırma çubuklarını aktif et', | ||
9 | title: 'IFrame Özellikleri', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/tt.js b/sources/plugins/iframe/lang/tt.js new file mode 100644 index 0000000..8523323 --- /dev/null +++ b/sources/plugins/iframe/lang/tt.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'tt', { | ||
6 | border: 'Frame чикләрен күрсәтү', | ||
7 | noUrl: 'Please type the iframe URL', // MISSING | ||
8 | scrolling: 'Enable scrollbars', // MISSING | ||
9 | title: 'IFrame үзлекләре', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/ug.js b/sources/plugins/iframe/lang/ug.js new file mode 100644 index 0000000..3cbd5b0 --- /dev/null +++ b/sources/plugins/iframe/lang/ug.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'ug', { | ||
6 | border: 'كاندۇك گىرۋەكلىرىنى كۆرسەت', | ||
7 | noUrl: 'كاندۇكنىڭ ئادرېسى(Url)نى كىرگۈزۈڭ', | ||
8 | scrolling: 'دومىلىما سۈرگۈچكە يول قوي', | ||
9 | title: 'IFrame خاسلىق', | ||
10 | toolbar: 'IFrame ' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/uk.js b/sources/plugins/iframe/lang/uk.js new file mode 100644 index 0000000..c5173d2 --- /dev/null +++ b/sources/plugins/iframe/lang/uk.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'uk', { | ||
6 | border: 'Показати рамки фрейму', | ||
7 | noUrl: 'Будь ласка введіть URL посилання для IFrame', | ||
8 | scrolling: 'Увімкнути прокрутку', | ||
9 | title: 'Налаштування для IFrame', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/vi.js b/sources/plugins/iframe/lang/vi.js new file mode 100644 index 0000000..d7c2bc0 --- /dev/null +++ b/sources/plugins/iframe/lang/vi.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'vi', { | ||
6 | border: 'Hiển thị viền khung', | ||
7 | noUrl: 'Vui lòng nhập địa chỉ iframe', | ||
8 | scrolling: 'Kích hoạt thanh cuộn', | ||
9 | title: 'Thuộc tính iframe', | ||
10 | toolbar: 'Iframe' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/zh-cn.js b/sources/plugins/iframe/lang/zh-cn.js new file mode 100644 index 0000000..99e657a --- /dev/null +++ b/sources/plugins/iframe/lang/zh-cn.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'zh-cn', { | ||
6 | border: '显示框架边框', | ||
7 | noUrl: '请输入框架的 URL', | ||
8 | scrolling: '允许滚动条', | ||
9 | title: 'IFrame 属性', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/lang/zh.js b/sources/plugins/iframe/lang/zh.js new file mode 100644 index 0000000..091b807 --- /dev/null +++ b/sources/plugins/iframe/lang/zh.js | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'iframe', 'zh', { | ||
6 | border: '顯示框架框線', | ||
7 | noUrl: '請輸入 iframe URL', | ||
8 | scrolling: '啟用捲軸列', | ||
9 | title: 'IFrame 屬性', | ||
10 | toolbar: 'IFrame' | ||
11 | } ); | ||
diff --git a/sources/plugins/iframe/plugin.js b/sources/plugins/iframe/plugin.js new file mode 100644 index 0000000..8f049a5 --- /dev/null +++ b/sources/plugins/iframe/plugin.js | |||
@@ -0,0 +1,85 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | CKEDITOR.plugins.add( 'iframe', { | ||
8 | requires: 'dialog,fakeobjects', | ||
9 | // jscs:disable maximumLineLength | ||
10 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
11 | // jscs:enable maximumLineLength | ||
12 | icons: 'iframe', // %REMOVE_LINE_CORE% | ||
13 | hidpi: true, // %REMOVE_LINE_CORE% | ||
14 | onLoad: function() { | ||
15 | CKEDITOR.addCss( 'img.cke_iframe' + | ||
16 | '{' + | ||
17 | 'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/placeholder.png' ) + ');' + | ||
18 | 'background-position: center center;' + | ||
19 | 'background-repeat: no-repeat;' + | ||
20 | 'border: 1px solid #a9a9a9;' + | ||
21 | 'width: 80px;' + | ||
22 | 'height: 80px;' + | ||
23 | '}' | ||
24 | ); | ||
25 | }, | ||
26 | init: function( editor ) { | ||
27 | var pluginName = 'iframe', | ||
28 | lang = editor.lang.iframe, | ||
29 | allowed = 'iframe[align,longdesc,frameborder,height,name,scrolling,src,title,width]'; | ||
30 | |||
31 | if ( editor.plugins.dialogadvtab ) | ||
32 | allowed += ';iframe' + editor.plugins.dialogadvtab.allowedContent( { id: 1, classes: 1, styles: 1 } ); | ||
33 | |||
34 | CKEDITOR.dialog.add( pluginName, this.path + 'dialogs/iframe.js' ); | ||
35 | editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName, { | ||
36 | allowedContent: allowed, | ||
37 | requiredContent: 'iframe' | ||
38 | } ) ); | ||
39 | |||
40 | editor.ui.addButton && editor.ui.addButton( 'Iframe', { | ||
41 | label: lang.toolbar, | ||
42 | command: pluginName, | ||
43 | toolbar: 'insert,80' | ||
44 | } ); | ||
45 | |||
46 | editor.on( 'doubleclick', function( evt ) { | ||
47 | var element = evt.data.element; | ||
48 | if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'iframe' ) | ||
49 | evt.data.dialog = 'iframe'; | ||
50 | } ); | ||
51 | |||
52 | if ( editor.addMenuItems ) { | ||
53 | editor.addMenuItems( { | ||
54 | iframe: { | ||
55 | label: lang.title, | ||
56 | command: 'iframe', | ||
57 | group: 'image' | ||
58 | } | ||
59 | } ); | ||
60 | } | ||
61 | |||
62 | // If the "contextmenu" plugin is loaded, register the listeners. | ||
63 | if ( editor.contextMenu ) { | ||
64 | editor.contextMenu.addListener( function( element ) { | ||
65 | if ( element && element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'iframe' ) | ||
66 | return { iframe: CKEDITOR.TRISTATE_OFF }; | ||
67 | } ); | ||
68 | } | ||
69 | }, | ||
70 | afterInit: function( editor ) { | ||
71 | var dataProcessor = editor.dataProcessor, | ||
72 | dataFilter = dataProcessor && dataProcessor.dataFilter; | ||
73 | |||
74 | if ( dataFilter ) { | ||
75 | dataFilter.addRules( { | ||
76 | elements: { | ||
77 | iframe: function( element ) { | ||
78 | return editor.createFakeParserElement( element, 'cke_iframe', 'iframe', true ); | ||
79 | } | ||
80 | } | ||
81 | } ); | ||
82 | } | ||
83 | } | ||
84 | } ); | ||
85 | } )(); | ||
diff --git a/sources/plugins/image/dialogs/image.js b/sources/plugins/image/dialogs/image.js new file mode 100644 index 0000000..4f62f99 --- /dev/null +++ b/sources/plugins/image/dialogs/image.js | |||
@@ -0,0 +1,1251 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | var imageDialog = function( editor, dialogType ) { | ||
8 | // Load image preview. | ||
9 | var IMAGE = 1, | ||
10 | LINK = 2, | ||
11 | PREVIEW = 4, | ||
12 | CLEANUP = 8, | ||
13 | regexGetSize = /^\s*(\d+)((px)|\%)?\s*$/i, | ||
14 | regexGetSizeOrEmpty = /(^\s*(\d+)((px)|\%)?\s*$)|^$/i, | ||
15 | pxLengthRegex = /^\d+px$/; | ||
16 | |||
17 | var onSizeChange = function() { | ||
18 | var value = this.getValue(), | ||
19 | // This = input element. | ||
20 | dialog = this.getDialog(), | ||
21 | aMatch = value.match( regexGetSize ); // Check value | ||
22 | if ( aMatch ) { | ||
23 | if ( aMatch[ 2 ] == '%' ) // % is allowed - > unlock ratio. | ||
24 | switchLockRatio( dialog, false ); // Unlock. | ||
25 | value = aMatch[ 1 ]; | ||
26 | } | ||
27 | |||
28 | // Only if ratio is locked | ||
29 | if ( dialog.lockRatio ) { | ||
30 | var oImageOriginal = dialog.originalElement; | ||
31 | if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' ) { | ||
32 | if ( this.id == 'txtHeight' ) { | ||
33 | if ( value && value != '0' ) | ||
34 | value = Math.round( oImageOriginal.$.width * ( value / oImageOriginal.$.height ) ); | ||
35 | if ( !isNaN( value ) ) | ||
36 | dialog.setValueOf( 'info', 'txtWidth', value ); | ||
37 | } | ||
38 | // this.id = txtWidth. | ||
39 | else { | ||
40 | if ( value && value != '0' ) | ||
41 | value = Math.round( oImageOriginal.$.height * ( value / oImageOriginal.$.width ) ); | ||
42 | if ( !isNaN( value ) ) | ||
43 | dialog.setValueOf( 'info', 'txtHeight', value ); | ||
44 | } | ||
45 | } | ||
46 | } | ||
47 | updatePreview( dialog ); | ||
48 | }; | ||
49 | |||
50 | var updatePreview = function( dialog ) { | ||
51 | //Don't load before onShow. | ||
52 | if ( !dialog.originalElement || !dialog.preview ) | ||
53 | return 1; | ||
54 | |||
55 | // Read attributes and update imagePreview; | ||
56 | dialog.commitContent( PREVIEW, dialog.preview ); | ||
57 | return 0; | ||
58 | }; | ||
59 | |||
60 | // Custom commit dialog logic, where we're intended to give inline style | ||
61 | // field (txtdlgGenStyle) higher priority to avoid overwriting styles contribute | ||
62 | // by other fields. | ||
63 | function commitContent() { | ||
64 | var args = arguments; | ||
65 | var inlineStyleField = this.getContentElement( 'advanced', 'txtdlgGenStyle' ); | ||
66 | inlineStyleField && inlineStyleField.commit.apply( inlineStyleField, args ); | ||
67 | |||
68 | this.foreach( function( widget ) { | ||
69 | if ( widget.commit && widget.id != 'txtdlgGenStyle' ) | ||
70 | widget.commit.apply( widget, args ); | ||
71 | } ); | ||
72 | } | ||
73 | |||
74 | // Avoid recursions. | ||
75 | var incommit; | ||
76 | |||
77 | // Synchronous field values to other impacted fields is required, e.g. border | ||
78 | // size change should alter inline-style text as well. | ||
79 | function commitInternally( targetFields ) { | ||
80 | if ( incommit ) | ||
81 | return; | ||
82 | |||
83 | incommit = 1; | ||
84 | |||
85 | var dialog = this.getDialog(), | ||
86 | element = dialog.imageElement; | ||
87 | if ( element ) { | ||
88 | // Commit this field and broadcast to target fields. | ||
89 | this.commit( IMAGE, element ); | ||
90 | |||
91 | targetFields = [].concat( targetFields ); | ||
92 | var length = targetFields.length, | ||
93 | field; | ||
94 | for ( var i = 0; i < length; i++ ) { | ||
95 | field = dialog.getContentElement.apply( dialog, targetFields[ i ].split( ':' ) ); | ||
96 | // May cause recursion. | ||
97 | field && field.setup( IMAGE, element ); | ||
98 | } | ||
99 | } | ||
100 | |||
101 | incommit = 0; | ||
102 | } | ||
103 | |||
104 | var switchLockRatio = function( dialog, value ) { | ||
105 | if ( !dialog.getContentElement( 'info', 'ratioLock' ) ) | ||
106 | return null; | ||
107 | |||
108 | var oImageOriginal = dialog.originalElement; | ||
109 | |||
110 | // Dialog may already closed. (#5505) | ||
111 | if ( !oImageOriginal ) | ||
112 | return null; | ||
113 | |||
114 | // Check image ratio and original image ratio, but respecting user's preference. | ||
115 | if ( value == 'check' ) { | ||
116 | if ( !dialog.userlockRatio && oImageOriginal.getCustomData( 'isReady' ) == 'true' ) { | ||
117 | var width = dialog.getValueOf( 'info', 'txtWidth' ), | ||
118 | height = dialog.getValueOf( 'info', 'txtHeight' ), | ||
119 | originalRatio = oImageOriginal.$.width * 1000 / oImageOriginal.$.height, | ||
120 | thisRatio = width * 1000 / height; | ||
121 | dialog.lockRatio = false; // Default: unlock ratio | ||
122 | |||
123 | if ( !width && !height ) | ||
124 | dialog.lockRatio = true; | ||
125 | else if ( !isNaN( originalRatio ) && !isNaN( thisRatio ) ) { | ||
126 | if ( Math.round( originalRatio ) == Math.round( thisRatio ) ) | ||
127 | dialog.lockRatio = true; | ||
128 | } | ||
129 | } | ||
130 | } else if ( value !== undefined ) | ||
131 | dialog.lockRatio = value; | ||
132 | else { | ||
133 | dialog.userlockRatio = 1; | ||
134 | dialog.lockRatio = !dialog.lockRatio; | ||
135 | } | ||
136 | |||
137 | var ratioButton = CKEDITOR.document.getById( btnLockSizesId ); | ||
138 | if ( dialog.lockRatio ) | ||
139 | ratioButton.removeClass( 'cke_btn_unlocked' ); | ||
140 | else | ||
141 | ratioButton.addClass( 'cke_btn_unlocked' ); | ||
142 | |||
143 | ratioButton.setAttribute( 'aria-checked', dialog.lockRatio ); | ||
144 | |||
145 | // Ratio button hc presentation - WHITE SQUARE / BLACK SQUARE | ||
146 | if ( CKEDITOR.env.hc ) { | ||
147 | var icon = ratioButton.getChild( 0 ); | ||
148 | icon.setHtml( dialog.lockRatio ? CKEDITOR.env.ie ? '\u25A0' : '\u25A3' : CKEDITOR.env.ie ? '\u25A1' : '\u25A2' ); | ||
149 | } | ||
150 | |||
151 | return dialog.lockRatio; | ||
152 | }; | ||
153 | |||
154 | var resetSize = function( dialog, emptyValues ) { | ||
155 | var oImageOriginal = dialog.originalElement, | ||
156 | ready = oImageOriginal.getCustomData( 'isReady' ) == 'true'; | ||
157 | |||
158 | if ( ready ) { | ||
159 | var widthField = dialog.getContentElement( 'info', 'txtWidth' ), | ||
160 | heightField = dialog.getContentElement( 'info', 'txtHeight' ), | ||
161 | widthValue, heightValue; | ||
162 | |||
163 | if ( emptyValues ) { | ||
164 | widthValue = 0; | ||
165 | heightValue = 0; | ||
166 | } else { | ||
167 | widthValue = oImageOriginal.$.width; | ||
168 | heightValue = oImageOriginal.$.height; | ||
169 | } | ||
170 | |||
171 | widthField && widthField.setValue( widthValue ); | ||
172 | heightField && heightField.setValue( heightValue ); | ||
173 | } | ||
174 | updatePreview( dialog ); | ||
175 | }; | ||
176 | |||
177 | var setupDimension = function( type, element ) { | ||
178 | if ( type != IMAGE ) | ||
179 | return; | ||
180 | |||
181 | function checkDimension( size, defaultValue ) { | ||
182 | var aMatch = size.match( regexGetSize ); | ||
183 | if ( aMatch ) { | ||
184 | // % is allowed. | ||
185 | if ( aMatch[ 2 ] == '%' ) { | ||
186 | aMatch[ 1 ] += '%'; | ||
187 | switchLockRatio( dialog, false ); // Unlock ratio | ||
188 | } | ||
189 | return aMatch[ 1 ]; | ||
190 | } | ||
191 | return defaultValue; | ||
192 | } | ||
193 | |||
194 | var dialog = this.getDialog(), | ||
195 | value = '', | ||
196 | dimension = this.id == 'txtWidth' ? 'width' : 'height', | ||
197 | size = element.getAttribute( dimension ); | ||
198 | |||
199 | if ( size ) | ||
200 | value = checkDimension( size, value ); | ||
201 | value = checkDimension( element.getStyle( dimension ), value ); | ||
202 | |||
203 | this.setValue( value ); | ||
204 | }; | ||
205 | |||
206 | var previewPreloader; | ||
207 | |||
208 | var onImgLoadEvent = function() { | ||
209 | // Image is ready. | ||
210 | var original = this.originalElement, | ||
211 | loader = CKEDITOR.document.getById( imagePreviewLoaderId ); | ||
212 | |||
213 | original.setCustomData( 'isReady', 'true' ); | ||
214 | original.removeListener( 'load', onImgLoadEvent ); | ||
215 | original.removeListener( 'error', onImgLoadErrorEvent ); | ||
216 | original.removeListener( 'abort', onImgLoadErrorEvent ); | ||
217 | |||
218 | // Hide loader. | ||
219 | if ( loader ) | ||
220 | loader.setStyle( 'display', 'none' ); | ||
221 | |||
222 | // New image -> new dimensions | ||
223 | if ( !this.dontResetSize ) { | ||
224 | resetSize( this, editor.config.image_prefillDimensions === false ); | ||
225 | } | ||
226 | |||
227 | if ( this.firstLoad ) { | ||
228 | CKEDITOR.tools.setTimeout( function() { | ||
229 | switchLockRatio( this, 'check' ); | ||
230 | }, 0, this ); | ||
231 | } | ||
232 | |||
233 | this.firstLoad = false; | ||
234 | this.dontResetSize = false; | ||
235 | |||
236 | // Possible fix for #12818. | ||
237 | updatePreview( this ); | ||
238 | }; | ||
239 | |||
240 | var onImgLoadErrorEvent = function() { | ||
241 | // Error. Image is not loaded. | ||
242 | var original = this.originalElement, | ||
243 | loader = CKEDITOR.document.getById( imagePreviewLoaderId ); | ||
244 | |||
245 | original.removeListener( 'load', onImgLoadEvent ); | ||
246 | original.removeListener( 'error', onImgLoadErrorEvent ); | ||
247 | original.removeListener( 'abort', onImgLoadErrorEvent ); | ||
248 | |||
249 | // Set Error image. | ||
250 | var noimage = CKEDITOR.getUrl( CKEDITOR.plugins.get( 'image' ).path + 'images/noimage.png' ); | ||
251 | |||
252 | if ( this.preview ) | ||
253 | this.preview.setAttribute( 'src', noimage ); | ||
254 | |||
255 | // Hide loader. | ||
256 | if ( loader ) | ||
257 | loader.setStyle( 'display', 'none' ); | ||
258 | |||
259 | switchLockRatio( this, false ); // Unlock. | ||
260 | }; | ||
261 | |||
262 | var numbering = function( id ) { | ||
263 | return CKEDITOR.tools.getNextId() + '_' + id; | ||
264 | }, | ||
265 | btnLockSizesId = numbering( 'btnLockSizes' ), | ||
266 | btnResetSizeId = numbering( 'btnResetSize' ), | ||
267 | imagePreviewLoaderId = numbering( 'ImagePreviewLoader' ), | ||
268 | previewLinkId = numbering( 'previewLink' ), | ||
269 | previewImageId = numbering( 'previewImage' ); | ||
270 | |||
271 | return { | ||
272 | title: editor.lang.image[ dialogType == 'image' ? 'title' : 'titleButton' ], | ||
273 | minWidth: 420, | ||
274 | minHeight: 360, | ||
275 | onShow: function() { | ||
276 | this.imageElement = false; | ||
277 | this.linkElement = false; | ||
278 | |||
279 | // Default: create a new element. | ||
280 | this.imageEditMode = false; | ||
281 | this.linkEditMode = false; | ||
282 | |||
283 | this.lockRatio = true; | ||
284 | this.userlockRatio = 0; | ||
285 | this.dontResetSize = false; | ||
286 | this.firstLoad = true; | ||
287 | this.addLink = false; | ||
288 | |||
289 | var editor = this.getParentEditor(), | ||
290 | sel = editor.getSelection(), | ||
291 | element = sel && sel.getSelectedElement(), | ||
292 | link = element && editor.elementPath( element ).contains( 'a', 1 ), | ||
293 | loader = CKEDITOR.document.getById( imagePreviewLoaderId ); | ||
294 | |||
295 | // Hide loader. | ||
296 | if ( loader ) | ||
297 | loader.setStyle( 'display', 'none' ); | ||
298 | |||
299 | // Create the preview before setup the dialog contents. | ||
300 | previewPreloader = new CKEDITOR.dom.element( 'img', editor.document ); | ||
301 | this.preview = CKEDITOR.document.getById( previewImageId ); | ||
302 | |||
303 | // Copy of the image | ||
304 | this.originalElement = editor.document.createElement( 'img' ); | ||
305 | this.originalElement.setAttribute( 'alt', '' ); | ||
306 | this.originalElement.setCustomData( 'isReady', 'false' ); | ||
307 | |||
308 | if ( link ) { | ||
309 | this.linkElement = link; | ||
310 | this.linkEditMode = true; | ||
311 | |||
312 | // If there is an existing link, by default keep it (true). | ||
313 | // It will be removed if certain conditions are met and Link tab is enabled. (#13351) | ||
314 | this.addLink = true; | ||
315 | |||
316 | // Look for Image element. | ||
317 | var linkChildren = link.getChildren(); | ||
318 | if ( linkChildren.count() == 1 ) { | ||
319 | var childTag = linkChildren.getItem( 0 ); | ||
320 | |||
321 | if ( childTag.type == CKEDITOR.NODE_ELEMENT ) { | ||
322 | if ( childTag.is( 'img' ) || childTag.is( 'input' ) ) { | ||
323 | this.imageElement = linkChildren.getItem( 0 ); | ||
324 | if ( this.imageElement.is( 'img' ) ) | ||
325 | this.imageEditMode = 'img'; | ||
326 | else if ( this.imageElement.is( 'input' ) ) | ||
327 | this.imageEditMode = 'input'; | ||
328 | } | ||
329 | } | ||
330 | } | ||
331 | // Fill out all fields. | ||
332 | if ( dialogType == 'image' ) | ||
333 | this.setupContent( LINK, link ); | ||
334 | } | ||
335 | |||
336 | // Edit given image element instead the one from selection. | ||
337 | if ( this.customImageElement ) { | ||
338 | this.imageEditMode = 'img'; | ||
339 | this.imageElement = this.customImageElement; | ||
340 | delete this.customImageElement; | ||
341 | } | ||
342 | else if ( element && element.getName() == 'img' && !element.data( 'cke-realelement' ) || | ||
343 | element && element.getName() == 'input' && element.getAttribute( 'type' ) == 'image' ) { | ||
344 | this.imageEditMode = element.getName(); | ||
345 | this.imageElement = element; | ||
346 | } | ||
347 | |||
348 | if ( this.imageEditMode ) { | ||
349 | // Use the original element as a buffer from since we don't want | ||
350 | // temporary changes to be committed, e.g. if the dialog is canceled. | ||
351 | this.cleanImageElement = this.imageElement; | ||
352 | this.imageElement = this.cleanImageElement.clone( true, true ); | ||
353 | |||
354 | // Fill out all fields. | ||
355 | this.setupContent( IMAGE, this.imageElement ); | ||
356 | } | ||
357 | |||
358 | // Refresh LockRatio button | ||
359 | switchLockRatio( this, true ); | ||
360 | |||
361 | // Dont show preview if no URL given. | ||
362 | if ( !CKEDITOR.tools.trim( this.getValueOf( 'info', 'txtUrl' ) ) ) { | ||
363 | this.preview.removeAttribute( 'src' ); | ||
364 | this.preview.setStyle( 'display', 'none' ); | ||
365 | } | ||
366 | }, | ||
367 | onOk: function() { | ||
368 | // Edit existing Image. | ||
369 | if ( this.imageEditMode ) { | ||
370 | var imgTagName = this.imageEditMode; | ||
371 | |||
372 | // Image dialog and Input element. | ||
373 | if ( dialogType == 'image' && imgTagName == 'input' && confirm( editor.lang.image.button2Img ) ) { // jshint ignore:line | ||
374 | // Replace INPUT-> IMG | ||
375 | imgTagName = 'img'; | ||
376 | this.imageElement = editor.document.createElement( 'img' ); | ||
377 | this.imageElement.setAttribute( 'alt', '' ); | ||
378 | editor.insertElement( this.imageElement ); | ||
379 | } | ||
380 | // ImageButton dialog and Image element. | ||
381 | else if ( dialogType != 'image' && imgTagName == 'img' && confirm( editor.lang.image.img2Button ) ) { // jshint ignore:line | ||
382 | // Replace IMG -> INPUT | ||
383 | imgTagName = 'input'; | ||
384 | this.imageElement = editor.document.createElement( 'input' ); | ||
385 | this.imageElement.setAttributes( { | ||
386 | type: 'image', | ||
387 | alt: '' | ||
388 | } ); | ||
389 | editor.insertElement( this.imageElement ); | ||
390 | } else { | ||
391 | // Restore the original element before all commits. | ||
392 | this.imageElement = this.cleanImageElement; | ||
393 | delete this.cleanImageElement; | ||
394 | } | ||
395 | } | ||
396 | // Create a new image. | ||
397 | else { | ||
398 | // Image dialog -> create IMG element. | ||
399 | if ( dialogType == 'image' ) | ||
400 | this.imageElement = editor.document.createElement( 'img' ); | ||
401 | else { | ||
402 | this.imageElement = editor.document.createElement( 'input' ); | ||
403 | this.imageElement.setAttribute( 'type', 'image' ); | ||
404 | } | ||
405 | this.imageElement.setAttribute( 'alt', '' ); | ||
406 | } | ||
407 | |||
408 | // Create a new link. | ||
409 | if ( !this.linkEditMode ) | ||
410 | this.linkElement = editor.document.createElement( 'a' ); | ||
411 | |||
412 | // Set attributes. | ||
413 | this.commitContent( IMAGE, this.imageElement ); | ||
414 | this.commitContent( LINK, this.linkElement ); | ||
415 | |||
416 | // Remove empty style attribute. | ||
417 | if ( !this.imageElement.getAttribute( 'style' ) ) | ||
418 | this.imageElement.removeAttribute( 'style' ); | ||
419 | |||
420 | // Insert a new Image. | ||
421 | if ( !this.imageEditMode ) { | ||
422 | if ( this.addLink ) { | ||
423 | if ( !this.linkEditMode ) { | ||
424 | // Insert a new link. | ||
425 | editor.insertElement( this.linkElement ); | ||
426 | this.linkElement.append( this.imageElement, false ); | ||
427 | } else { | ||
428 | // We already have a link in editor. | ||
429 | if ( this.linkElement.equals( editor.getSelection().getSelectedElement() ) ) { | ||
430 | // If the link is selected outside, replace it's content rather than the link itself. ([<a>foo</a>]) | ||
431 | this.linkElement.setHtml( '' ); | ||
432 | this.linkElement.append( this.imageElement, false ); | ||
433 | } else { | ||
434 | // Only inside of the link is selected, so replace it with image. (<a>[foo]</a>, <a>[f]oo</a>) | ||
435 | editor.insertElement( this.imageElement ); | ||
436 | } | ||
437 | } | ||
438 | } else { | ||
439 | editor.insertElement( this.imageElement ); | ||
440 | } | ||
441 | } | ||
442 | // Image already exists. | ||
443 | else { | ||
444 | // Add a new link element. | ||
445 | if ( !this.linkEditMode && this.addLink ) { | ||
446 | editor.insertElement( this.linkElement ); | ||
447 | this.imageElement.appendTo( this.linkElement ); | ||
448 | } | ||
449 | // Remove Link, Image exists. | ||
450 | else if ( this.linkEditMode && !this.addLink ) { | ||
451 | editor.getSelection().selectElement( this.linkElement ); | ||
452 | editor.insertElement( this.imageElement ); | ||
453 | } | ||
454 | } | ||
455 | }, | ||
456 | onLoad: function() { | ||
457 | if ( dialogType != 'image' ) | ||
458 | this.hidePage( 'Link' ); //Hide Link tab. | ||
459 | var doc = this._.element.getDocument(); | ||
460 | |||
461 | if ( this.getContentElement( 'info', 'ratioLock' ) ) { | ||
462 | this.addFocusable( doc.getById( btnResetSizeId ), 5 ); | ||
463 | this.addFocusable( doc.getById( btnLockSizesId ), 5 ); | ||
464 | } | ||
465 | |||
466 | this.commitContent = commitContent; | ||
467 | }, | ||
468 | onHide: function() { | ||
469 | if ( this.preview ) | ||
470 | this.commitContent( CLEANUP, this.preview ); | ||
471 | |||
472 | if ( this.originalElement ) { | ||
473 | this.originalElement.removeListener( 'load', onImgLoadEvent ); | ||
474 | this.originalElement.removeListener( 'error', onImgLoadErrorEvent ); | ||
475 | this.originalElement.removeListener( 'abort', onImgLoadErrorEvent ); | ||
476 | this.originalElement.remove(); | ||
477 | this.originalElement = false; // Dialog is closed. | ||
478 | } | ||
479 | |||
480 | delete this.imageElement; | ||
481 | }, | ||
482 | contents: [ { | ||
483 | id: 'info', | ||
484 | label: editor.lang.image.infoTab, | ||
485 | accessKey: 'I', | ||
486 | elements: [ { | ||
487 | type: 'vbox', | ||
488 | padding: 0, | ||
489 | children: [ { | ||
490 | type: 'hbox', | ||
491 | widths: [ '280px', '110px' ], | ||
492 | align: 'right', | ||
493 | children: [ { | ||
494 | id: 'txtUrl', | ||
495 | type: 'text', | ||
496 | label: editor.lang.common.url, | ||
497 | required: true, | ||
498 | onChange: function() { | ||
499 | var dialog = this.getDialog(), | ||
500 | newUrl = this.getValue(); | ||
501 | |||
502 | // Update original image. | ||
503 | // Prevent from load before onShow. | ||
504 | if ( newUrl.length > 0 ) { | ||
505 | dialog = this.getDialog(); | ||
506 | var original = dialog.originalElement; | ||
507 | |||
508 | if ( dialog.preview ) { | ||
509 | dialog.preview.removeStyle( 'display' ); | ||
510 | } | ||
511 | |||
512 | original.setCustomData( 'isReady', 'false' ); | ||
513 | // Show loader. | ||
514 | var loader = CKEDITOR.document.getById( imagePreviewLoaderId ); | ||
515 | if ( loader ) | ||
516 | loader.setStyle( 'display', '' ); | ||
517 | |||
518 | original.on( 'load', onImgLoadEvent, dialog ); | ||
519 | original.on( 'error', onImgLoadErrorEvent, dialog ); | ||
520 | original.on( 'abort', onImgLoadErrorEvent, dialog ); | ||
521 | original.setAttribute( 'src', newUrl ); | ||
522 | |||
523 | if ( dialog.preview ) { | ||
524 | // Query the preloader to figure out the url impacted by based href. | ||
525 | previewPreloader.setAttribute( 'src', newUrl ); | ||
526 | dialog.preview.setAttribute( 'src', previewPreloader.$.src ); | ||
527 | updatePreview( dialog ); | ||
528 | } | ||
529 | } | ||
530 | // Dont show preview if no URL given. | ||
531 | else if ( dialog.preview ) { | ||
532 | dialog.preview.removeAttribute( 'src' ); | ||
533 | dialog.preview.setStyle( 'display', 'none' ); | ||
534 | } | ||
535 | }, | ||
536 | setup: function( type, element ) { | ||
537 | if ( type == IMAGE ) { | ||
538 | var url = element.data( 'cke-saved-src' ) || element.getAttribute( 'src' ); | ||
539 | var field = this; | ||
540 | |||
541 | this.getDialog().dontResetSize = true; | ||
542 | |||
543 | field.setValue( url ); // And call this.onChange() | ||
544 | // Manually set the initial value.(#4191) | ||
545 | field.setInitValue(); | ||
546 | } | ||
547 | }, | ||
548 | commit: function( type, element ) { | ||
549 | if ( type == IMAGE && ( this.getValue() || this.isChanged() ) ) { | ||
550 | element.data( 'cke-saved-src', this.getValue() ); | ||
551 | element.setAttribute( 'src', this.getValue() ); | ||
552 | } else if ( type == CLEANUP ) { | ||
553 | element.setAttribute( 'src', '' ); // If removeAttribute doesn't work. | ||
554 | element.removeAttribute( 'src' ); | ||
555 | } | ||
556 | }, | ||
557 | validate: CKEDITOR.dialog.validate.notEmpty( editor.lang.image.urlMissing ) | ||
558 | }, | ||
559 | { | ||
560 | type: 'button', | ||
561 | id: 'browse', | ||
562 | // v-align with the 'txtUrl' field. | ||
563 | // TODO: We need something better than a fixed size here. | ||
564 | style: 'display:inline-block;margin-top:14px;', | ||
565 | align: 'center', | ||
566 | label: editor.lang.common.browseServer, | ||
567 | hidden: true, | ||
568 | filebrowser: 'info:txtUrl' | ||
569 | } ] | ||
570 | } ] | ||
571 | }, | ||
572 | { | ||
573 | id: 'txtAlt', | ||
574 | type: 'text', | ||
575 | label: editor.lang.image.alt, | ||
576 | accessKey: 'T', | ||
577 | 'default': '', | ||
578 | onChange: function() { | ||
579 | updatePreview( this.getDialog() ); | ||
580 | }, | ||
581 | setup: function( type, element ) { | ||
582 | if ( type == IMAGE ) | ||
583 | this.setValue( element.getAttribute( 'alt' ) ); | ||
584 | }, | ||
585 | commit: function( type, element ) { | ||
586 | if ( type == IMAGE ) { | ||
587 | if ( this.getValue() || this.isChanged() ) | ||
588 | element.setAttribute( 'alt', this.getValue() ); | ||
589 | } else if ( type == PREVIEW ) | ||
590 | element.setAttribute( 'alt', this.getValue() ); | ||
591 | else if ( type == CLEANUP ) { | ||
592 | element.removeAttribute( 'alt' ); | ||
593 | } | ||
594 | |||
595 | } | ||
596 | }, | ||
597 | { | ||
598 | type: 'hbox', | ||
599 | children: [ { | ||
600 | id: 'basic', | ||
601 | type: 'vbox', | ||
602 | children: [ { | ||
603 | type: 'hbox', | ||
604 | requiredContent: 'img{width,height}', | ||
605 | widths: [ '50%', '50%' ], | ||
606 | children: [ { | ||
607 | type: 'vbox', | ||
608 | padding: 1, | ||
609 | children: [ { | ||
610 | type: 'text', | ||
611 | width: '45px', | ||
612 | id: 'txtWidth', | ||
613 | label: editor.lang.common.width, | ||
614 | onKeyUp: onSizeChange, | ||
615 | onChange: function() { | ||
616 | commitInternally.call( this, 'advanced:txtdlgGenStyle' ); | ||
617 | }, | ||
618 | validate: function() { | ||
619 | var aMatch = this.getValue().match( regexGetSizeOrEmpty ), | ||
620 | isValid = !!( aMatch && parseInt( aMatch[ 1 ], 10 ) !== 0 ); | ||
621 | if ( !isValid ) | ||
622 | alert( editor.lang.common.invalidWidth ); // jshint ignore:line | ||
623 | return isValid; | ||
624 | }, | ||
625 | setup: setupDimension, | ||
626 | commit: function( type, element ) { | ||
627 | var value = this.getValue(); | ||
628 | if ( type == IMAGE ) { | ||
629 | if ( value && editor.activeFilter.check( 'img{width,height}' ) ) | ||
630 | element.setStyle( 'width', CKEDITOR.tools.cssLength( value ) ); | ||
631 | else | ||
632 | element.removeStyle( 'width' ); | ||
633 | |||
634 | element.removeAttribute( 'width' ); | ||
635 | } else if ( type == PREVIEW ) { | ||
636 | var aMatch = value.match( regexGetSize ); | ||
637 | if ( !aMatch ) { | ||
638 | var oImageOriginal = this.getDialog().originalElement; | ||
639 | if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' ) | ||
640 | element.setStyle( 'width', oImageOriginal.$.width + 'px' ); | ||
641 | } else { | ||
642 | element.setStyle( 'width', CKEDITOR.tools.cssLength( value ) ); | ||
643 | } | ||
644 | } else if ( type == CLEANUP ) { | ||
645 | element.removeAttribute( 'width' ); | ||
646 | element.removeStyle( 'width' ); | ||
647 | } | ||
648 | } | ||
649 | }, | ||
650 | { | ||
651 | type: 'text', | ||
652 | id: 'txtHeight', | ||
653 | width: '45px', | ||
654 | label: editor.lang.common.height, | ||
655 | onKeyUp: onSizeChange, | ||
656 | onChange: function() { | ||
657 | commitInternally.call( this, 'advanced:txtdlgGenStyle' ); | ||
658 | }, | ||
659 | validate: function() { | ||
660 | var aMatch = this.getValue().match( regexGetSizeOrEmpty ), | ||
661 | isValid = !!( aMatch && parseInt( aMatch[ 1 ], 10 ) !== 0 ); | ||
662 | if ( !isValid ) | ||
663 | alert( editor.lang.common.invalidHeight ); // jshint ignore:line | ||
664 | return isValid; | ||
665 | }, | ||
666 | setup: setupDimension, | ||
667 | commit: function( type, element ) { | ||
668 | var value = this.getValue(); | ||
669 | if ( type == IMAGE ) { | ||
670 | if ( value && editor.activeFilter.check( 'img{width,height}' ) ) | ||
671 | element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) ); | ||
672 | else | ||
673 | element.removeStyle( 'height' ); | ||
674 | |||
675 | element.removeAttribute( 'height' ); | ||
676 | } else if ( type == PREVIEW ) { | ||
677 | var aMatch = value.match( regexGetSize ); | ||
678 | if ( !aMatch ) { | ||
679 | var oImageOriginal = this.getDialog().originalElement; | ||
680 | if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' ) | ||
681 | element.setStyle( 'height', oImageOriginal.$.height + 'px' ); | ||
682 | } else { | ||
683 | element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) ); | ||
684 | } | ||
685 | } else if ( type == CLEANUP ) { | ||
686 | element.removeAttribute( 'height' ); | ||
687 | element.removeStyle( 'height' ); | ||
688 | } | ||
689 | } | ||
690 | } ] | ||
691 | }, | ||
692 | { | ||
693 | id: 'ratioLock', | ||
694 | type: 'html', | ||
695 | style: 'margin-top:30px;width:40px;height:40px;', | ||
696 | onLoad: function() { | ||
697 | // Activate Reset button | ||
698 | var resetButton = CKEDITOR.document.getById( btnResetSizeId ), | ||
699 | ratioButton = CKEDITOR.document.getById( btnLockSizesId ); | ||
700 | if ( resetButton ) { | ||
701 | resetButton.on( 'click', function( evt ) { | ||
702 | resetSize( this ); | ||
703 | evt.data && evt.data.preventDefault(); | ||
704 | }, this.getDialog() ); | ||
705 | resetButton.on( 'mouseover', function() { | ||
706 | this.addClass( 'cke_btn_over' ); | ||
707 | }, resetButton ); | ||
708 | resetButton.on( 'mouseout', function() { | ||
709 | this.removeClass( 'cke_btn_over' ); | ||
710 | }, resetButton ); | ||
711 | } | ||
712 | // Activate (Un)LockRatio button | ||
713 | if ( ratioButton ) { | ||
714 | ratioButton.on( 'click', function( evt ) { | ||
715 | switchLockRatio( this ); | ||
716 | |||
717 | var oImageOriginal = this.originalElement, | ||
718 | width = this.getValueOf( 'info', 'txtWidth' ); | ||
719 | |||
720 | if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' && width ) { | ||
721 | var height = oImageOriginal.$.height / oImageOriginal.$.width * width; | ||
722 | if ( !isNaN( height ) ) { | ||
723 | this.setValueOf( 'info', 'txtHeight', Math.round( height ) ); | ||
724 | updatePreview( this ); | ||
725 | } | ||
726 | } | ||
727 | evt.data && evt.data.preventDefault(); | ||
728 | }, this.getDialog() ); | ||
729 | ratioButton.on( 'mouseover', function() { | ||
730 | this.addClass( 'cke_btn_over' ); | ||
731 | }, ratioButton ); | ||
732 | ratioButton.on( 'mouseout', function() { | ||
733 | this.removeClass( 'cke_btn_over' ); | ||
734 | }, ratioButton ); | ||
735 | } | ||
736 | }, | ||
737 | html: '<div>' + | ||
738 | '<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.lockRatio + | ||
739 | '" class="cke_btn_locked" id="' + btnLockSizesId + '" role="checkbox"><span class="cke_icon"></span><span class="cke_label">' + editor.lang.image.lockRatio + '</span></a>' + | ||
740 | '<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.resetSize + | ||
741 | '" class="cke_btn_reset" id="' + btnResetSizeId + '" role="button"><span class="cke_label">' + editor.lang.image.resetSize + '</span></a>' + | ||
742 | '</div>' | ||
743 | } ] | ||
744 | }, | ||
745 | { | ||
746 | type: 'vbox', | ||
747 | padding: 1, | ||
748 | children: [ { | ||
749 | type: 'text', | ||
750 | id: 'txtBorder', | ||
751 | requiredContent: 'img{border-width}', | ||
752 | width: '60px', | ||
753 | label: editor.lang.image.border, | ||
754 | 'default': '', | ||
755 | onKeyUp: function() { | ||
756 | updatePreview( this.getDialog() ); | ||
757 | }, | ||
758 | onChange: function() { | ||
759 | commitInternally.call( this, 'advanced:txtdlgGenStyle' ); | ||
760 | }, | ||
761 | validate: CKEDITOR.dialog.validate.integer( editor.lang.image.validateBorder ), | ||
762 | setup: function( type, element ) { | ||
763 | if ( type == IMAGE ) { | ||
764 | var value, | ||
765 | borderStyle = element.getStyle( 'border-width' ); | ||
766 | borderStyle = borderStyle && borderStyle.match( /^(\d+px)(?: \1 \1 \1)?$/ ); | ||
767 | value = borderStyle && parseInt( borderStyle[ 1 ], 10 ); | ||
768 | isNaN( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'border' ) ); | ||
769 | this.setValue( value ); | ||
770 | } | ||
771 | }, | ||
772 | commit: function( type, element ) { | ||
773 | var value = parseInt( this.getValue(), 10 ); | ||
774 | if ( type == IMAGE || type == PREVIEW ) { | ||
775 | if ( !isNaN( value ) ) { | ||
776 | element.setStyle( 'border-width', CKEDITOR.tools.cssLength( value ) ); | ||
777 | element.setStyle( 'border-style', 'solid' ); | ||
778 | } else if ( !value && this.isChanged() ) { | ||
779 | element.removeStyle( 'border' ); | ||
780 | } | ||
781 | |||
782 | if ( type == IMAGE ) | ||
783 | element.removeAttribute( 'border' ); | ||
784 | } else if ( type == CLEANUP ) { | ||
785 | element.removeAttribute( 'border' ); | ||
786 | element.removeStyle( 'border-width' ); | ||
787 | element.removeStyle( 'border-style' ); | ||
788 | element.removeStyle( 'border-color' ); | ||
789 | } | ||
790 | } | ||
791 | }, | ||
792 | { | ||
793 | type: 'text', | ||
794 | id: 'txtHSpace', | ||
795 | requiredContent: 'img{margin-left,margin-right}', | ||
796 | width: '60px', | ||
797 | label: editor.lang.image.hSpace, | ||
798 | 'default': '', | ||
799 | onKeyUp: function() { | ||
800 | updatePreview( this.getDialog() ); | ||
801 | }, | ||
802 | onChange: function() { | ||
803 | commitInternally.call( this, 'advanced:txtdlgGenStyle' ); | ||
804 | }, | ||
805 | validate: CKEDITOR.dialog.validate.integer( editor.lang.image.validateHSpace ), | ||
806 | setup: function( type, element ) { | ||
807 | if ( type == IMAGE ) { | ||
808 | var value, marginLeftPx, marginRightPx, | ||
809 | marginLeftStyle = element.getStyle( 'margin-left' ), | ||
810 | marginRightStyle = element.getStyle( 'margin-right' ); | ||
811 | |||
812 | marginLeftStyle = marginLeftStyle && marginLeftStyle.match( pxLengthRegex ); | ||
813 | marginRightStyle = marginRightStyle && marginRightStyle.match( pxLengthRegex ); | ||
814 | marginLeftPx = parseInt( marginLeftStyle, 10 ); | ||
815 | marginRightPx = parseInt( marginRightStyle, 10 ); | ||
816 | |||
817 | value = ( marginLeftPx == marginRightPx ) && marginLeftPx; | ||
818 | isNaN( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'hspace' ) ); | ||
819 | |||
820 | this.setValue( value ); | ||
821 | } | ||
822 | }, | ||
823 | commit: function( type, element ) { | ||
824 | var value = parseInt( this.getValue(), 10 ); | ||
825 | if ( type == IMAGE || type == PREVIEW ) { | ||
826 | if ( !isNaN( value ) ) { | ||
827 | element.setStyle( 'margin-left', CKEDITOR.tools.cssLength( value ) ); | ||
828 | element.setStyle( 'margin-right', CKEDITOR.tools.cssLength( value ) ); | ||
829 | } else if ( !value && this.isChanged() ) { | ||
830 | element.removeStyle( 'margin-left' ); | ||
831 | element.removeStyle( 'margin-right' ); | ||
832 | } | ||
833 | |||
834 | if ( type == IMAGE ) | ||
835 | element.removeAttribute( 'hspace' ); | ||
836 | } else if ( type == CLEANUP ) { | ||
837 | element.removeAttribute( 'hspace' ); | ||
838 | element.removeStyle( 'margin-left' ); | ||
839 | element.removeStyle( 'margin-right' ); | ||
840 | } | ||
841 | } | ||
842 | }, | ||
843 | { | ||
844 | type: 'text', | ||
845 | id: 'txtVSpace', | ||
846 | requiredContent: 'img{margin-top,margin-bottom}', | ||
847 | width: '60px', | ||
848 | label: editor.lang.image.vSpace, | ||
849 | 'default': '', | ||
850 | onKeyUp: function() { | ||
851 | updatePreview( this.getDialog() ); | ||
852 | }, | ||
853 | onChange: function() { | ||
854 | commitInternally.call( this, 'advanced:txtdlgGenStyle' ); | ||
855 | }, | ||
856 | validate: CKEDITOR.dialog.validate.integer( editor.lang.image.validateVSpace ), | ||
857 | setup: function( type, element ) { | ||
858 | if ( type == IMAGE ) { | ||
859 | var value, marginTopPx, marginBottomPx, | ||
860 | marginTopStyle = element.getStyle( 'margin-top' ), | ||
861 | marginBottomStyle = element.getStyle( 'margin-bottom' ); | ||
862 | |||
863 | marginTopStyle = marginTopStyle && marginTopStyle.match( pxLengthRegex ); | ||
864 | marginBottomStyle = marginBottomStyle && marginBottomStyle.match( pxLengthRegex ); | ||
865 | marginTopPx = parseInt( marginTopStyle, 10 ); | ||
866 | marginBottomPx = parseInt( marginBottomStyle, 10 ); | ||
867 | |||
868 | value = ( marginTopPx == marginBottomPx ) && marginTopPx; | ||
869 | isNaN( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'vspace' ) ); | ||
870 | this.setValue( value ); | ||
871 | } | ||
872 | }, | ||
873 | commit: function( type, element ) { | ||
874 | var value = parseInt( this.getValue(), 10 ); | ||
875 | if ( type == IMAGE || type == PREVIEW ) { | ||
876 | if ( !isNaN( value ) ) { | ||
877 | element.setStyle( 'margin-top', CKEDITOR.tools.cssLength( value ) ); | ||
878 | element.setStyle( 'margin-bottom', CKEDITOR.tools.cssLength( value ) ); | ||
879 | } else if ( !value && this.isChanged() ) { | ||
880 | element.removeStyle( 'margin-top' ); | ||
881 | element.removeStyle( 'margin-bottom' ); | ||
882 | } | ||
883 | |||
884 | if ( type == IMAGE ) | ||
885 | element.removeAttribute( 'vspace' ); | ||
886 | } else if ( type == CLEANUP ) { | ||
887 | element.removeAttribute( 'vspace' ); | ||
888 | element.removeStyle( 'margin-top' ); | ||
889 | element.removeStyle( 'margin-bottom' ); | ||
890 | } | ||
891 | } | ||
892 | }, | ||
893 | { | ||
894 | id: 'cmbAlign', | ||
895 | requiredContent: 'img{float}', | ||
896 | type: 'select', | ||
897 | widths: [ '35%', '65%' ], | ||
898 | style: 'width:90px', | ||
899 | label: editor.lang.common.align, | ||
900 | 'default': '', | ||
901 | items: [ | ||
902 | [ editor.lang.common.notSet, '' ], | ||
903 | [ editor.lang.common.alignLeft, 'left' ], | ||
904 | [ editor.lang.common.alignRight, 'right' ] | ||
905 | // Backward compatible with v2 on setup when specified as attribute value, | ||
906 | // while these values are no more available as select options. | ||
907 | // [ editor.lang.image.alignAbsBottom , 'absBottom'], | ||
908 | // [ editor.lang.image.alignAbsMiddle , 'absMiddle'], | ||
909 | // [ editor.lang.image.alignBaseline , 'baseline'], | ||
910 | // [ editor.lang.image.alignTextTop , 'text-top'], | ||
911 | // [ editor.lang.image.alignBottom , 'bottom'], | ||
912 | // [ editor.lang.image.alignMiddle , 'middle'], | ||
913 | // [ editor.lang.image.alignTop , 'top'] | ||
914 | ], | ||
915 | onChange: function() { | ||
916 | updatePreview( this.getDialog() ); | ||
917 | commitInternally.call( this, 'advanced:txtdlgGenStyle' ); | ||
918 | }, | ||
919 | setup: function( type, element ) { | ||
920 | if ( type == IMAGE ) { | ||
921 | var value = element.getStyle( 'float' ); | ||
922 | switch ( value ) { | ||
923 | // Ignore those unrelated values. | ||
924 | case 'inherit': | ||
925 | case 'none': | ||
926 | value = ''; | ||
927 | } | ||
928 | |||
929 | !value && ( value = ( element.getAttribute( 'align' ) || '' ).toLowerCase() ); | ||
930 | this.setValue( value ); | ||
931 | } | ||
932 | }, | ||
933 | commit: function( type, element ) { | ||
934 | var value = this.getValue(); | ||
935 | if ( type == IMAGE || type == PREVIEW ) { | ||
936 | if ( value ) | ||
937 | element.setStyle( 'float', value ); | ||
938 | else | ||
939 | element.removeStyle( 'float' ); | ||
940 | |||
941 | if ( type == IMAGE ) { | ||
942 | value = ( element.getAttribute( 'align' ) || '' ).toLowerCase(); | ||
943 | switch ( value ) { | ||
944 | // we should remove it only if it matches "left" or "right", | ||
945 | // otherwise leave it intact. | ||
946 | case 'left': | ||
947 | case 'right': | ||
948 | element.removeAttribute( 'align' ); | ||
949 | } | ||
950 | } | ||
951 | } else if ( type == CLEANUP ) { | ||
952 | element.removeStyle( 'float' ); | ||
953 | } | ||
954 | } | ||
955 | } ] | ||
956 | } ] | ||
957 | }, | ||
958 | { | ||
959 | type: 'vbox', | ||
960 | height: '250px', | ||
961 | children: [ { | ||
962 | type: 'html', | ||
963 | id: 'htmlPreview', | ||
964 | style: 'width:95%;', | ||
965 | html: '<div>' + CKEDITOR.tools.htmlEncode( editor.lang.common.preview ) + '<br>' + | ||
966 | '<div id="' + imagePreviewLoaderId + '" class="ImagePreviewLoader" style="display:none"><div class="loading"> </div></div>' + | ||
967 | '<div class="ImagePreviewBox"><table><tr><td>' + | ||
968 | '<a href="javascript:void(0)" target="_blank" onclick="return false;" id="' + previewLinkId + '">' + | ||
969 | '<img id="' + previewImageId + '" alt="" /></a>' + | ||
970 | // jscs:disable maximumLineLength | ||
971 | ( editor.config.image_previewText || 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. ' + | ||
972 | 'Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, ' + | ||
973 | 'nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.' ) + | ||
974 | // jscs:enable maximumLineLength | ||
975 | '</td></tr></table></div></div>' | ||
976 | } ] | ||
977 | } ] | ||
978 | } ] | ||
979 | }, | ||
980 | { | ||
981 | id: 'Link', | ||
982 | requiredContent: 'a[href]', | ||
983 | label: editor.lang.image.linkTab, | ||
984 | padding: 0, | ||
985 | elements: [ { | ||
986 | id: 'txtUrl', | ||
987 | type: 'text', | ||
988 | label: editor.lang.common.url, | ||
989 | style: 'width: 100%', | ||
990 | 'default': '', | ||
991 | setup: function( type, element ) { | ||
992 | if ( type == LINK ) { | ||
993 | var href = element.data( 'cke-saved-href' ); | ||
994 | if ( !href ) | ||
995 | href = element.getAttribute( 'href' ); | ||
996 | this.setValue( href ); | ||
997 | } | ||
998 | }, | ||
999 | commit: function( type, element ) { | ||
1000 | if ( type == LINK ) { | ||
1001 | if ( this.getValue() || this.isChanged() ) { | ||
1002 | var url = this.getValue(); | ||
1003 | element.data( 'cke-saved-href', url ); | ||
1004 | element.setAttribute( 'href', url ); | ||
1005 | |||
1006 | if ( this.getValue() || !editor.config.image_removeLinkByEmptyURL ) | ||
1007 | this.getDialog().addLink = true; | ||
1008 | else | ||
1009 | this.getDialog().addLink = false; | ||
1010 | } | ||
1011 | } | ||
1012 | } | ||
1013 | }, | ||
1014 | { | ||
1015 | type: 'button', | ||
1016 | id: 'browse', | ||
1017 | filebrowser: { | ||
1018 | action: 'Browse', | ||
1019 | target: 'Link:txtUrl', | ||
1020 | url: editor.config.filebrowserImageBrowseLinkUrl | ||
1021 | }, | ||
1022 | style: 'float:right', | ||
1023 | hidden: true, | ||
1024 | label: editor.lang.common.browseServer | ||
1025 | }, | ||
1026 | { | ||
1027 | id: 'cmbTarget', | ||
1028 | type: 'select', | ||
1029 | requiredContent: 'a[target]', | ||
1030 | label: editor.lang.common.target, | ||
1031 | 'default': '', | ||
1032 | items: [ | ||
1033 | [ editor.lang.common.notSet, '' ], | ||
1034 | [ editor.lang.common.targetNew, '_blank' ], | ||
1035 | [ editor.lang.common.targetTop, '_top' ], | ||
1036 | [ editor.lang.common.targetSelf, '_self' ], | ||
1037 | [ editor.lang.common.targetParent, '_parent' ] | ||
1038 | ], | ||
1039 | setup: function( type, element ) { | ||
1040 | if ( type == LINK ) | ||
1041 | this.setValue( element.getAttribute( 'target' ) || '' ); | ||
1042 | }, | ||
1043 | commit: function( type, element ) { | ||
1044 | if ( type == LINK ) { | ||
1045 | if ( this.getValue() || this.isChanged() ) | ||
1046 | element.setAttribute( 'target', this.getValue() ); | ||
1047 | } | ||
1048 | } | ||
1049 | } ] | ||
1050 | }, | ||
1051 | { | ||
1052 | id: 'Upload', | ||
1053 | hidden: true, | ||
1054 | filebrowser: 'uploadButton', | ||
1055 | label: editor.lang.image.upload, | ||
1056 | elements: [ { | ||
1057 | type: 'file', | ||
1058 | id: 'upload', | ||
1059 | label: editor.lang.image.btnUpload, | ||
1060 | style: 'height:40px', | ||
1061 | size: 38 | ||
1062 | }, | ||
1063 | { | ||
1064 | type: 'fileButton', | ||
1065 | id: 'uploadButton', | ||
1066 | filebrowser: 'info:txtUrl', | ||
1067 | label: editor.lang.image.btnUpload, | ||
1068 | 'for': [ 'Upload', 'upload' ] | ||
1069 | } ] | ||
1070 | }, | ||
1071 | { | ||
1072 | id: 'advanced', | ||
1073 | label: editor.lang.common.advancedTab, | ||
1074 | elements: [ { | ||
1075 | type: 'hbox', | ||
1076 | widths: [ '50%', '25%', '25%' ], | ||
1077 | children: [ { | ||
1078 | type: 'text', | ||
1079 | id: 'linkId', | ||
1080 | requiredContent: 'img[id]', | ||
1081 | label: editor.lang.common.id, | ||
1082 | setup: function( type, element ) { | ||
1083 | if ( type == IMAGE ) | ||
1084 | this.setValue( element.getAttribute( 'id' ) ); | ||
1085 | }, | ||
1086 | commit: function( type, element ) { | ||
1087 | if ( type == IMAGE ) { | ||
1088 | if ( this.getValue() || this.isChanged() ) | ||
1089 | element.setAttribute( 'id', this.getValue() ); | ||
1090 | } | ||
1091 | } | ||
1092 | }, | ||
1093 | { | ||
1094 | id: 'cmbLangDir', | ||
1095 | type: 'select', | ||
1096 | requiredContent: 'img[dir]', | ||
1097 | style: 'width : 100px;', | ||
1098 | label: editor.lang.common.langDir, | ||
1099 | 'default': '', | ||
1100 | items: [ | ||
1101 | [ editor.lang.common.notSet, '' ], | ||
1102 | [ editor.lang.common.langDirLtr, 'ltr' ], | ||
1103 | [ editor.lang.common.langDirRtl, 'rtl' ] | ||
1104 | ], | ||
1105 | setup: function( type, element ) { | ||
1106 | if ( type == IMAGE ) | ||
1107 | this.setValue( element.getAttribute( 'dir' ) ); | ||
1108 | }, | ||
1109 | commit: function( type, element ) { | ||
1110 | if ( type == IMAGE ) { | ||
1111 | if ( this.getValue() || this.isChanged() ) | ||
1112 | element.setAttribute( 'dir', this.getValue() ); | ||
1113 | } | ||
1114 | } | ||
1115 | }, | ||
1116 | { | ||
1117 | type: 'text', | ||
1118 | id: 'txtLangCode', | ||
1119 | requiredContent: 'img[lang]', | ||
1120 | label: editor.lang.common.langCode, | ||
1121 | 'default': '', | ||
1122 | setup: function( type, element ) { | ||
1123 | if ( type == IMAGE ) | ||
1124 | this.setValue( element.getAttribute( 'lang' ) ); | ||
1125 | }, | ||
1126 | commit: function( type, element ) { | ||
1127 | if ( type == IMAGE ) { | ||
1128 | if ( this.getValue() || this.isChanged() ) | ||
1129 | element.setAttribute( 'lang', this.getValue() ); | ||
1130 | } | ||
1131 | } | ||
1132 | } ] | ||
1133 | }, | ||
1134 | { | ||
1135 | type: 'text', | ||
1136 | id: 'txtGenLongDescr', | ||
1137 | requiredContent: 'img[longdesc]', | ||
1138 | label: editor.lang.common.longDescr, | ||
1139 | setup: function( type, element ) { | ||
1140 | if ( type == IMAGE ) | ||
1141 | this.setValue( element.getAttribute( 'longDesc' ) ); | ||
1142 | }, | ||
1143 | commit: function( type, element ) { | ||
1144 | if ( type == IMAGE ) { | ||
1145 | if ( this.getValue() || this.isChanged() ) | ||
1146 | element.setAttribute( 'longDesc', this.getValue() ); | ||
1147 | } | ||
1148 | } | ||
1149 | }, | ||
1150 | { | ||
1151 | type: 'hbox', | ||
1152 | widths: [ '50%', '50%' ], | ||
1153 | children: [ { | ||
1154 | type: 'text', | ||
1155 | id: 'txtGenClass', | ||
1156 | requiredContent: 'img(cke-xyz)', // Random text like 'xyz' will check if all are allowed. | ||
1157 | label: editor.lang.common.cssClass, | ||
1158 | 'default': '', | ||
1159 | setup: function( type, element ) { | ||
1160 | if ( type == IMAGE ) | ||
1161 | this.setValue( element.getAttribute( 'class' ) ); | ||
1162 | }, | ||
1163 | commit: function( type, element ) { | ||
1164 | if ( type == IMAGE ) { | ||
1165 | if ( this.getValue() || this.isChanged() ) | ||
1166 | element.setAttribute( 'class', this.getValue() ); | ||
1167 | } | ||
1168 | } | ||
1169 | }, | ||
1170 | { | ||
1171 | type: 'text', | ||
1172 | id: 'txtGenTitle', | ||
1173 | requiredContent: 'img[title]', | ||
1174 | label: editor.lang.common.advisoryTitle, | ||
1175 | 'default': '', | ||
1176 | onChange: function() { | ||
1177 | updatePreview( this.getDialog() ); | ||
1178 | }, | ||
1179 | setup: function( type, element ) { | ||
1180 | if ( type == IMAGE ) | ||
1181 | this.setValue( element.getAttribute( 'title' ) ); | ||
1182 | }, | ||
1183 | commit: function( type, element ) { | ||
1184 | if ( type == IMAGE ) { | ||
1185 | if ( this.getValue() || this.isChanged() ) | ||
1186 | element.setAttribute( 'title', this.getValue() ); | ||
1187 | } else if ( type == PREVIEW ) | ||
1188 | element.setAttribute( 'title', this.getValue() ); | ||
1189 | else if ( type == CLEANUP ) { | ||
1190 | element.removeAttribute( 'title' ); | ||
1191 | } | ||
1192 | } | ||
1193 | } ] | ||
1194 | }, | ||
1195 | { | ||
1196 | type: 'text', | ||
1197 | id: 'txtdlgGenStyle', | ||
1198 | requiredContent: 'img{cke-xyz}', // Random text like 'xyz' will check if all are allowed. | ||
1199 | label: editor.lang.common.cssStyle, | ||
1200 | validate: CKEDITOR.dialog.validate.inlineStyle( editor.lang.common.invalidInlineStyle ), | ||
1201 | 'default': '', | ||
1202 | setup: function( type, element ) { | ||
1203 | if ( type == IMAGE ) { | ||
1204 | var genStyle = element.getAttribute( 'style' ); | ||
1205 | if ( !genStyle && element.$.style.cssText ) | ||
1206 | genStyle = element.$.style.cssText; | ||
1207 | this.setValue( genStyle ); | ||
1208 | |||
1209 | var height = element.$.style.height, | ||
1210 | width = element.$.style.width, | ||
1211 | aMatchH = ( height ? height : '' ).match( regexGetSize ), | ||
1212 | aMatchW = ( width ? width : '' ).match( regexGetSize ); | ||
1213 | |||
1214 | this.attributesInStyle = { | ||
1215 | height: !!aMatchH, | ||
1216 | width: !!aMatchW | ||
1217 | }; | ||
1218 | } | ||
1219 | }, | ||
1220 | onChange: function() { | ||
1221 | commitInternally.call( | ||
1222 | this, [ | ||
1223 | 'info:cmbFloat', | ||
1224 | 'info:cmbAlign', | ||
1225 | 'info:txtVSpace', | ||
1226 | 'info:txtHSpace', | ||
1227 | 'info:txtBorder', | ||
1228 | 'info:txtWidth', | ||
1229 | 'info:txtHeight' | ||
1230 | ] | ||
1231 | ); | ||
1232 | updatePreview( this ); | ||
1233 | }, | ||
1234 | commit: function( type, element ) { | ||
1235 | if ( type == IMAGE && ( this.getValue() || this.isChanged() ) ) | ||
1236 | element.setAttribute( 'style', this.getValue() ); | ||
1237 | |||
1238 | } | ||
1239 | } ] | ||
1240 | } ] | ||
1241 | }; | ||
1242 | }; | ||
1243 | |||
1244 | CKEDITOR.dialog.add( 'image', function( editor ) { | ||
1245 | return imageDialog( editor, 'image' ); | ||
1246 | } ); | ||
1247 | |||
1248 | CKEDITOR.dialog.add( 'imagebutton', function( editor ) { | ||
1249 | return imageDialog( editor, 'imagebutton' ); | ||
1250 | } ); | ||
1251 | } )(); | ||
diff --git a/sources/plugins/image/icons/hidpi/image.png b/sources/plugins/image/icons/hidpi/image.png new file mode 100644 index 0000000..b3c7ade --- /dev/null +++ b/sources/plugins/image/icons/hidpi/image.png | |||
Binary files differ | |||
diff --git a/sources/plugins/image/icons/image.png b/sources/plugins/image/icons/image.png new file mode 100644 index 0000000..fcf61b5 --- /dev/null +++ b/sources/plugins/image/icons/image.png | |||
Binary files differ | |||
diff --git a/sources/plugins/image/images/noimage.png b/sources/plugins/image/images/noimage.png new file mode 100644 index 0000000..74c6ee9 --- /dev/null +++ b/sources/plugins/image/images/noimage.png | |||
Binary files differ | |||
diff --git a/sources/plugins/image/lang/af.js b/sources/plugins/image/lang/af.js new file mode 100644 index 0000000..c3cf354 --- /dev/null +++ b/sources/plugins/image/lang/af.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'af', { | ||
6 | alt: 'Alternatiewe teks', | ||
7 | border: 'Rand', | ||
8 | btnUpload: 'Stuur na bediener', | ||
9 | button2Img: 'Wil u die geselekteerde afbeeldingsknop vervang met \'n eenvoudige afbeelding?', | ||
10 | hSpace: 'HSpasie', | ||
11 | img2Button: 'Wil u die geselekteerde afbeelding vervang met \'n afbeeldingsknop?', | ||
12 | infoTab: 'Afbeelding informasie', | ||
13 | linkTab: 'Skakel', | ||
14 | lockRatio: 'Vaste proporsie', | ||
15 | menu: 'Afbeelding eienskappe', | ||
16 | resetSize: 'Herstel grootte', | ||
17 | title: 'Afbeelding eienskappe', | ||
18 | titleButton: 'Afbeeldingsknop eienskappe', | ||
19 | upload: 'Oplaai', | ||
20 | urlMissing: 'Die URL na die afbeelding ontbreek.', | ||
21 | vSpace: 'VSpasie', | ||
22 | validateBorder: 'Rand moet \'n heelgetal wees.', | ||
23 | validateHSpace: 'HSpasie moet \'n heelgetal wees.', | ||
24 | validateVSpace: 'VSpasie moet \'n heelgetal wees.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/ar.js b/sources/plugins/image/lang/ar.js new file mode 100644 index 0000000..1a0fb7a --- /dev/null +++ b/sources/plugins/image/lang/ar.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'ar', { | ||
6 | alt: 'عنوان الصورة', | ||
7 | border: 'سمك الحدود', | ||
8 | btnUpload: 'أرسلها للخادم', | ||
9 | button2Img: 'هل تريد تحويل زر الصورة المختار إلى صورة بسيطة؟', | ||
10 | hSpace: 'تباعد أفقي', | ||
11 | img2Button: 'هل تريد تحويل الصورة المختارة إلى زر صورة؟', | ||
12 | infoTab: 'معلومات الصورة', | ||
13 | linkTab: 'الرابط', | ||
14 | lockRatio: 'تناسق الحجم', | ||
15 | menu: 'خصائص الصورة', | ||
16 | resetSize: 'إستعادة الحجم الأصلي', | ||
17 | title: 'خصائص الصورة', | ||
18 | titleButton: 'خصائص زر الصورة', | ||
19 | upload: 'رفع', | ||
20 | urlMissing: 'عنوان مصدر الصورة مفقود', | ||
21 | vSpace: 'تباعد عمودي', | ||
22 | validateBorder: 'الإطار يجب أن يكون عددا', | ||
23 | validateHSpace: 'HSpace يجب أن يكون عدداً.', | ||
24 | validateVSpace: 'VSpace يجب أن يكون عدداً.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/bg.js b/sources/plugins/image/lang/bg.js new file mode 100644 index 0000000..ecc7cd7 --- /dev/null +++ b/sources/plugins/image/lang/bg.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'bg', { | ||
6 | alt: 'Алтернативен текст', | ||
7 | border: 'Рамка', | ||
8 | btnUpload: 'Изпрати я на сървъра', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'Хоризонтален отстъп', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', // MISSING | ||
12 | infoTab: 'Инфо за снимка', | ||
13 | linkTab: 'Връзка', | ||
14 | lockRatio: 'Заключване на съотношението', | ||
15 | menu: 'Настройки за снимка', | ||
16 | resetSize: 'Нулиране на размер', | ||
17 | title: 'Настройки за снимка', | ||
18 | titleButton: 'Настойки за бутон за снимка', | ||
19 | upload: 'Качване', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'Вертикален отстъп', | ||
22 | validateBorder: 'Border must be a whole number.', // MISSING | ||
23 | validateHSpace: 'HSpace must be a whole number.', // MISSING | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/bn.js b/sources/plugins/image/lang/bn.js new file mode 100644 index 0000000..1f39349 --- /dev/null +++ b/sources/plugins/image/lang/bn.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'bn', { | ||
6 | alt: 'বিকল্প টেক্সট', | ||
7 | border: 'বর্ডার', | ||
8 | btnUpload: 'ইহাকে সার্ভারে প্রেরন কর', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'হরাইজন্টাল স্পেস', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', // MISSING | ||
12 | infoTab: 'ছবির তথ্য', | ||
13 | linkTab: 'লিংক', | ||
14 | lockRatio: 'অনুপাত লক কর', | ||
15 | menu: 'ছবির প্রোপার্টি', | ||
16 | resetSize: 'সাইজ পূর্বাবস্থায় ফিরিয়ে দাও', | ||
17 | title: 'ছবির প্রোপার্টি', | ||
18 | titleButton: 'ছবি বাটন প্রোপার্টি', | ||
19 | upload: 'আপলোড', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'ভার্টিকেল স্পেস', | ||
22 | validateBorder: 'Border must be a whole number.', // MISSING | ||
23 | validateHSpace: 'HSpace must be a whole number.', // MISSING | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/bs.js b/sources/plugins/image/lang/bs.js new file mode 100644 index 0000000..8470e8f --- /dev/null +++ b/sources/plugins/image/lang/bs.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'bs', { | ||
6 | alt: 'Tekst na slici', | ||
7 | border: 'Okvir', | ||
8 | btnUpload: 'Šalji na server', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', // MISSING | ||
12 | infoTab: 'Info slike', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Zakljuèaj odnos', | ||
15 | menu: 'Svojstva slike', | ||
16 | resetSize: 'Resetuj dimenzije', | ||
17 | title: 'Svojstva slike', | ||
18 | titleButton: 'Image Button Properties', // MISSING | ||
19 | upload: 'Šalji', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Border must be a whole number.', // MISSING | ||
23 | validateHSpace: 'HSpace must be a whole number.', // MISSING | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/ca.js b/sources/plugins/image/lang/ca.js new file mode 100644 index 0000000..8464dbf --- /dev/null +++ b/sources/plugins/image/lang/ca.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'ca', { | ||
6 | alt: 'Text alternatiu', | ||
7 | border: 'Vora', | ||
8 | btnUpload: 'Envia-la al servidor', | ||
9 | button2Img: 'Voleu transformar el botó d\'imatge seleccionat en una simple imatge?', | ||
10 | hSpace: 'Espaiat horit.', | ||
11 | img2Button: 'Voleu transformar la imatge seleccionada en un botó d\'imatge?', | ||
12 | infoTab: 'Informació de la imatge', | ||
13 | linkTab: 'Enllaç', | ||
14 | lockRatio: 'Bloqueja les proporcions', | ||
15 | menu: 'Propietats de la imatge', | ||
16 | resetSize: 'Restaura la mida', | ||
17 | title: 'Propietats de la imatge', | ||
18 | titleButton: 'Propietats del botó d\'imatge', | ||
19 | upload: 'Puja', | ||
20 | urlMissing: 'Falta la URL de la imatge.', | ||
21 | vSpace: 'Espaiat vert.', | ||
22 | validateBorder: 'La vora ha de ser un nombre enter.', | ||
23 | validateHSpace: 'HSpace ha de ser un nombre enter.', | ||
24 | validateVSpace: 'VSpace ha de ser un nombre enter.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/cs.js b/sources/plugins/image/lang/cs.js new file mode 100644 index 0000000..2f870f8 --- /dev/null +++ b/sources/plugins/image/lang/cs.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'cs', { | ||
6 | alt: 'Alternativní text', | ||
7 | border: 'Okraje', | ||
8 | btnUpload: 'Odeslat na server', | ||
9 | button2Img: 'Skutečně chcete převést zvolené obrázkové tlačítko na obyčejný obrázek?', | ||
10 | hSpace: 'Horizontální mezera', | ||
11 | img2Button: 'Skutečně chcete převést zvolený obrázek na obrázkové tlačítko?', | ||
12 | infoTab: 'Informace o obrázku', | ||
13 | linkTab: 'Odkaz', | ||
14 | lockRatio: 'Zámek', | ||
15 | menu: 'Vlastnosti obrázku', | ||
16 | resetSize: 'Původní velikost', | ||
17 | title: 'Vlastnosti obrázku', | ||
18 | titleButton: 'Vlastností obrázkového tlačítka', | ||
19 | upload: 'Odeslat', | ||
20 | urlMissing: 'Zadané URL zdroje obrázku nebylo nalezeno.', | ||
21 | vSpace: 'Vertikální mezera', | ||
22 | validateBorder: 'Okraj musí být nastaven v celých číslech.', | ||
23 | validateHSpace: 'Horizontální mezera musí být nastavena v celých číslech.', | ||
24 | validateVSpace: 'Vertikální mezera musí být nastavena v celých číslech.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/cy.js b/sources/plugins/image/lang/cy.js new file mode 100644 index 0000000..6310b5b --- /dev/null +++ b/sources/plugins/image/lang/cy.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'cy', { | ||
6 | alt: 'Testun Amgen', | ||
7 | border: 'Ymyl', | ||
8 | btnUpload: 'Anfon i\'r Gweinydd', | ||
9 | button2Img: 'Ydych am drawsffurfio\'r botwm ddelwedd hwn ar ddelwedd syml?', | ||
10 | hSpace: 'BwlchLl', | ||
11 | img2Button: 'Ydych am drawsffurfio\'r ddelwedd hon ar fotwm delwedd?', | ||
12 | infoTab: 'Gwyb Delwedd', | ||
13 | linkTab: 'Dolen', | ||
14 | lockRatio: 'Cloi Cymhareb', | ||
15 | menu: 'Priodweddau Delwedd', | ||
16 | resetSize: 'Ailosod Maint', | ||
17 | title: 'Priodweddau Delwedd', | ||
18 | titleButton: 'Priodweddau Botwm Delwedd', | ||
19 | upload: 'Lanlwytho', | ||
20 | urlMissing: 'URL gwreiddiol y ddelwedd ar goll.', | ||
21 | vSpace: 'BwlchF', | ||
22 | validateBorder: 'Rhaid i\'r ymyl fod yn gyfanrif.', | ||
23 | validateHSpace: 'Rhaid i\'r HSpace fod yn gyfanrif.', | ||
24 | validateVSpace: 'Rhaid i\'r VSpace fod yn gyfanrif.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/da.js b/sources/plugins/image/lang/da.js new file mode 100644 index 0000000..82f591d --- /dev/null +++ b/sources/plugins/image/lang/da.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'da', { | ||
6 | alt: 'Alternativ tekst', | ||
7 | border: 'Ramme', | ||
8 | btnUpload: 'Upload fil til serveren', | ||
9 | button2Img: 'Vil du lave billedknappen om til et almindeligt billede?', | ||
10 | hSpace: 'Vandret margen', | ||
11 | img2Button: 'Vil du lave billedet om til en billedknap?', | ||
12 | infoTab: 'Generelt', | ||
13 | linkTab: 'Hyperlink', | ||
14 | lockRatio: 'Lås størrelsesforhold', | ||
15 | menu: 'Egenskaber for billede', | ||
16 | resetSize: 'Nulstil størrelse', | ||
17 | title: 'Egenskaber for billede', | ||
18 | titleButton: 'Egenskaber for billedknap', | ||
19 | upload: 'Upload', | ||
20 | urlMissing: 'Kilde på billed-URL mangler', | ||
21 | vSpace: 'Lodret margen', | ||
22 | validateBorder: 'Kant skal være et helt nummer.', | ||
23 | validateHSpace: 'HSpace skal være et helt nummer.', | ||
24 | validateVSpace: 'VSpace skal være et helt nummer.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/de-ch.js b/sources/plugins/image/lang/de-ch.js new file mode 100644 index 0000000..9237c1a --- /dev/null +++ b/sources/plugins/image/lang/de-ch.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'de-ch', { | ||
6 | alt: 'Alternativer Text', | ||
7 | border: 'Rahmen', | ||
8 | btnUpload: 'Zum Server senden', | ||
9 | button2Img: 'Möchten Sie die ausgewählte Bildschaltfläche in ein einfaches Bild umwandeln?', | ||
10 | hSpace: 'Horizontal-Abstand', | ||
11 | img2Button: 'Möchten Sie das ausgewählte Bild in eine Bildschaltfläche umwandeln?', | ||
12 | infoTab: 'Bildinfo', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Grössenverhältnis beibehalten', | ||
15 | menu: 'Bildeigenschaften', | ||
16 | resetSize: 'Grösse zurücksetzen', | ||
17 | title: 'Bildeigenschaften', | ||
18 | titleButton: 'Bildschaltflächeneigenschaften', | ||
19 | upload: 'Hochladen', | ||
20 | urlMissing: 'Bildquellen-URL fehlt.', | ||
21 | vSpace: 'Vertikal-Abstand', | ||
22 | validateBorder: 'Rahmen muss eine ganze Zahl sein.', | ||
23 | validateHSpace: 'Horizontal-Abstand muss eine ganze Zahl sein.', | ||
24 | validateVSpace: 'Vertikal-Abstand muss eine ganze Zahl sein.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/de.js b/sources/plugins/image/lang/de.js new file mode 100644 index 0000000..4827329 --- /dev/null +++ b/sources/plugins/image/lang/de.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'de', { | ||
6 | alt: 'Alternativer Text', | ||
7 | border: 'Rahmen', | ||
8 | btnUpload: 'Zum Server senden', | ||
9 | button2Img: 'Möchten Sie die ausgewählte Bildschaltfläche in ein einfaches Bild umwandeln?', | ||
10 | hSpace: 'Horizontal-Abstand', | ||
11 | img2Button: 'Möchten Sie das ausgewählte Bild in eine Bildschaltfläche umwandeln?', | ||
12 | infoTab: 'Bildinfo', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Größenverhältnis beibehalten', | ||
15 | menu: 'Bildeigenschaften', | ||
16 | resetSize: 'Größe zurücksetzen', | ||
17 | title: 'Bildeigenschaften', | ||
18 | titleButton: 'Bildschaltflächeneigenschaften', | ||
19 | upload: 'Hochladen', | ||
20 | urlMissing: 'Bildquellen-URL fehlt.', | ||
21 | vSpace: 'Vertikal-Abstand', | ||
22 | validateBorder: 'Rahmen muss eine ganze Zahl sein.', | ||
23 | validateHSpace: 'Horizontal-Abstand muss eine ganze Zahl sein.', | ||
24 | validateVSpace: 'Vertikal-Abstand muss eine ganze Zahl sein.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/el.js b/sources/plugins/image/lang/el.js new file mode 100644 index 0000000..9e515e7 --- /dev/null +++ b/sources/plugins/image/lang/el.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'el', { | ||
6 | alt: 'Εναλλακτικό Κείμενο', | ||
7 | border: 'Περίγραμμα', | ||
8 | btnUpload: 'Αποστολή στον Διακομιστή', | ||
9 | button2Img: 'Θέλετε να μετατρέψετε το επιλεγμένο κουμπί εικόνας σε απλή εικόνα;', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Θέλετε να μεταμορφώσετε την επιλεγμένη εικόνα που είναι πάνω σε ένα κουμπί;', | ||
12 | infoTab: 'Πληροφορίες Εικόνας', | ||
13 | linkTab: 'Σύνδεσμος', | ||
14 | lockRatio: 'Κλείδωμα Αναλογίας', | ||
15 | menu: 'Ιδιότητες Εικόνας', | ||
16 | resetSize: 'Επαναφορά Αρχικού Μεγέθους', | ||
17 | title: 'Ιδιότητες Εικόνας', | ||
18 | titleButton: 'Ιδιότητες Κουμπιού Εικόνας', | ||
19 | upload: 'Αποστολή', | ||
20 | urlMissing: 'Το URL πηγής για την εικόνα λείπει.', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Το περίγραμμα πρέπει να είναι ένας ακέραιος αριθμός.', | ||
23 | validateHSpace: 'Το HSpace πρέπει να είναι ένας ακέραιος αριθμός.', | ||
24 | validateVSpace: 'Το VSpace πρέπει να είναι ένας ακέραιος αριθμός.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/en-au.js b/sources/plugins/image/lang/en-au.js new file mode 100644 index 0000000..6e7ce12 --- /dev/null +++ b/sources/plugins/image/lang/en-au.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'en-au', { | ||
6 | alt: 'Alternative Text', | ||
7 | border: 'Border', | ||
8 | btnUpload: 'Send it to the Server', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', | ||
12 | infoTab: 'Image Info', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Lock Ratio', | ||
15 | menu: 'Image Properties', | ||
16 | resetSize: 'Reset Size', | ||
17 | title: 'Image Properties', | ||
18 | titleButton: 'Image Button Properties', | ||
19 | upload: 'Upload', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Border must be a whole number.', // MISSING | ||
23 | validateHSpace: 'HSpace must be a whole number.', // MISSING | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/en-ca.js b/sources/plugins/image/lang/en-ca.js new file mode 100644 index 0000000..2f3992f --- /dev/null +++ b/sources/plugins/image/lang/en-ca.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'en-ca', { | ||
6 | alt: 'Alternative Text', | ||
7 | border: 'Border', | ||
8 | btnUpload: 'Send it to the Server', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', | ||
12 | infoTab: 'Image Info', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Lock Ratio', | ||
15 | menu: 'Image Properties', | ||
16 | resetSize: 'Reset Size', | ||
17 | title: 'Image Properties', | ||
18 | titleButton: 'Image Button Properties', | ||
19 | upload: 'Upload', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Border must be a whole number.', // MISSING | ||
23 | validateHSpace: 'HSpace must be a whole number.', // MISSING | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/en-gb.js b/sources/plugins/image/lang/en-gb.js new file mode 100644 index 0000000..e60b38a --- /dev/null +++ b/sources/plugins/image/lang/en-gb.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'en-gb', { | ||
6 | alt: 'Alternative Text', | ||
7 | border: 'Border', | ||
8 | btnUpload: 'Send it to the Server', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', | ||
12 | infoTab: 'Image Info', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Lock Ratio', | ||
15 | menu: 'Image Properties', | ||
16 | resetSize: 'Reset Size', | ||
17 | title: 'Image Properties', | ||
18 | titleButton: 'Image Button Properties', | ||
19 | upload: 'Upload', | ||
20 | urlMissing: 'Image source URL is missing.', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Border must be a whole number.', | ||
23 | validateHSpace: 'HSpace must be a whole number.', | ||
24 | validateVSpace: 'VSpace must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/en.js b/sources/plugins/image/lang/en.js new file mode 100644 index 0000000..d6cb43a --- /dev/null +++ b/sources/plugins/image/lang/en.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'en', { | ||
6 | alt: 'Alternative Text', | ||
7 | border: 'Border', | ||
8 | btnUpload: 'Send it to the Server', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', | ||
12 | infoTab: 'Image Info', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Lock Ratio', | ||
15 | menu: 'Image Properties', | ||
16 | resetSize: 'Reset Size', | ||
17 | title: 'Image Properties', | ||
18 | titleButton: 'Image Button Properties', | ||
19 | upload: 'Upload', | ||
20 | urlMissing: 'Image source URL is missing.', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Border must be a whole number.', | ||
23 | validateHSpace: 'HSpace must be a whole number.', | ||
24 | validateVSpace: 'VSpace must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/eo.js b/sources/plugins/image/lang/eo.js new file mode 100644 index 0000000..9ef3115 --- /dev/null +++ b/sources/plugins/image/lang/eo.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'eo', { | ||
6 | alt: 'Anstataŭiga Teksto', | ||
7 | border: 'Bordero', | ||
8 | btnUpload: 'Sendu al Servilo', | ||
9 | button2Img: 'Ĉu vi volas transformi la selektitan bildbutonon en simplan bildon?', | ||
10 | hSpace: 'Horizontala Spaco', | ||
11 | img2Button: 'Ĉu vi volas transformi la selektitan bildon en bildbutonon?', | ||
12 | infoTab: 'Informoj pri Bildo', | ||
13 | linkTab: 'Ligilo', | ||
14 | lockRatio: 'Konservi Proporcion', | ||
15 | menu: 'Atributoj de Bildo', | ||
16 | resetSize: 'Origina Grando', | ||
17 | title: 'Atributoj de Bildo', | ||
18 | titleButton: 'Bildbutonaj Atributoj', | ||
19 | upload: 'Alŝuti', | ||
20 | urlMissing: 'La fontretadreso de la bildo mankas.', | ||
21 | vSpace: 'Vertikala Spaco', | ||
22 | validateBorder: 'La bordero devas esti entjera nombro.', | ||
23 | validateHSpace: 'La horizontala spaco devas esti entjera nombro.', | ||
24 | validateVSpace: 'La vertikala spaco devas esti entjera nombro.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/es.js b/sources/plugins/image/lang/es.js new file mode 100644 index 0000000..12e1748 --- /dev/null +++ b/sources/plugins/image/lang/es.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'es', { | ||
6 | alt: 'Texto Alternativo', | ||
7 | border: 'Borde', | ||
8 | btnUpload: 'Enviar al Servidor', | ||
9 | button2Img: '¿Desea convertir el botón de imagen en una simple imagen?', | ||
10 | hSpace: 'Esp.Horiz', | ||
11 | img2Button: '¿Desea convertir la imagen en un botón de imagen?', | ||
12 | infoTab: 'Información de Imagen', | ||
13 | linkTab: 'Vínculo', | ||
14 | lockRatio: 'Proporcional', | ||
15 | menu: 'Propiedades de Imagen', | ||
16 | resetSize: 'Tamaño Original', | ||
17 | title: 'Propiedades de Imagen', | ||
18 | titleButton: 'Propiedades de Botón de Imagen', | ||
19 | upload: 'Cargar', | ||
20 | urlMissing: 'Debe indicar la URL de la imagen.', | ||
21 | vSpace: 'Esp.Vert', | ||
22 | validateBorder: 'El borde debe ser un número.', | ||
23 | validateHSpace: 'El espaciado horizontal debe ser un número.', | ||
24 | validateVSpace: 'El espaciado vertical debe ser un número.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/et.js b/sources/plugins/image/lang/et.js new file mode 100644 index 0000000..e02591f --- /dev/null +++ b/sources/plugins/image/lang/et.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'et', { | ||
6 | alt: 'Alternatiivne tekst', | ||
7 | border: 'Joon', | ||
8 | btnUpload: 'Saada serverisse', | ||
9 | button2Img: 'Kas tahad teisendada valitud pildiga nupu tavaliseks pildiks?', | ||
10 | hSpace: 'H. vaheruum', | ||
11 | img2Button: 'Kas tahad teisendada valitud tavalise pildi pildiga nupuks?', | ||
12 | infoTab: 'Pildi info', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Lukusta kuvasuhe', | ||
15 | menu: 'Pildi omadused', | ||
16 | resetSize: 'Lähtesta suurus', | ||
17 | title: 'Pildi omadused', | ||
18 | titleButton: 'Piltnupu omadused', | ||
19 | upload: 'Lae üles', | ||
20 | urlMissing: 'Pildi lähte-URL on puudu.', | ||
21 | vSpace: 'V. vaheruum', | ||
22 | validateBorder: 'Äärise laius peab olema täisarv.', | ||
23 | validateHSpace: 'Horisontaalne vaheruum peab olema täisarv.', | ||
24 | validateVSpace: 'Vertikaalne vaheruum peab olema täisarv.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/eu.js b/sources/plugins/image/lang/eu.js new file mode 100644 index 0000000..f288398 --- /dev/null +++ b/sources/plugins/image/lang/eu.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'eu', { | ||
6 | alt: 'Ordezko testua', | ||
7 | border: 'Ertza', | ||
8 | btnUpload: 'Bidali zerbitzarira', | ||
9 | button2Img: 'Hautatutako irudi-botoia irudi arrunt bihurtu nahi duzu?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Hautatutako irudia irudi-botoi bihurtu nahi duzu?', | ||
12 | infoTab: 'Irudiaren informazioa', | ||
13 | linkTab: 'Esteka', | ||
14 | lockRatio: 'Blokeatu erlazioa', | ||
15 | menu: 'Irudiaren propietateak', | ||
16 | resetSize: 'Berrezarri tamaina', | ||
17 | title: 'Irudiaren propietateak', | ||
18 | titleButton: 'Irudi-botoiaren propietateak', | ||
19 | upload: 'Kargatu', | ||
20 | urlMissing: 'Irudiaren iturburuaren URLa falta da.', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Ertza zenbaki oso bat izan behar da.', | ||
23 | validateHSpace: 'HSpace zenbaki oso bat izan behar da.', | ||
24 | validateVSpace: 'VSpace zenbaki oso bat izan behar da.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/fa.js b/sources/plugins/image/lang/fa.js new file mode 100644 index 0000000..00eb831 --- /dev/null +++ b/sources/plugins/image/lang/fa.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'fa', { | ||
6 | alt: 'متن جایگزین', | ||
7 | border: 'لبه', | ||
8 | btnUpload: 'به سرور بفرست', | ||
9 | button2Img: 'آیا مایلید از یک تصویر ساده روی دکمه تصویری انتخاب شده استفاده کنید؟', | ||
10 | hSpace: 'فاصلهٴ افقی', | ||
11 | img2Button: 'آیا مایلید از یک دکمه تصویری روی تصویر انتخاب شده استفاده کنید؟', | ||
12 | infoTab: 'اطلاعات تصویر', | ||
13 | linkTab: 'پیوند', | ||
14 | lockRatio: 'قفل کردن نسبت', | ||
15 | menu: 'ویژگیهای تصویر', | ||
16 | resetSize: 'بازنشانی اندازه', | ||
17 | title: 'ویژگیهای تصویر', | ||
18 | titleButton: 'ویژگیهای دکمهٴ تصویری', | ||
19 | upload: 'انتقال به سرور', | ||
20 | urlMissing: 'آدرس URL اصلی تصویر یافت نشد.', | ||
21 | vSpace: 'فاصلهٴ عمودی', | ||
22 | validateBorder: 'مقدار خطوط باید یک عدد باشد.', | ||
23 | validateHSpace: 'مقدار فاصله گذاری افقی باید یک عدد باشد.', | ||
24 | validateVSpace: 'مقدار فاصله گذاری عمودی باید یک عدد باشد.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/fi.js b/sources/plugins/image/lang/fi.js new file mode 100644 index 0000000..e264d72 --- /dev/null +++ b/sources/plugins/image/lang/fi.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'fi', { | ||
6 | alt: 'Vaihtoehtoinen teksti', | ||
7 | border: 'Kehys', | ||
8 | btnUpload: 'Lähetä palvelimelle', | ||
9 | button2Img: 'Haluatko muuntaa valitun kuvanäppäimen kuvaksi?', | ||
10 | hSpace: 'Vaakatila', | ||
11 | img2Button: 'Haluatko muuntaa valitun kuvan kuvanäppäimeksi?', | ||
12 | infoTab: 'Kuvan tiedot', | ||
13 | linkTab: 'Linkki', | ||
14 | lockRatio: 'Lukitse suhteet', | ||
15 | menu: 'Kuvan ominaisuudet', | ||
16 | resetSize: 'Alkuperäinen koko', | ||
17 | title: 'Kuvan ominaisuudet', | ||
18 | titleButton: 'Kuvapainikkeen ominaisuudet', | ||
19 | upload: 'Lisää kuva', | ||
20 | urlMissing: 'Kuvan lähdeosoite puuttuu.', | ||
21 | vSpace: 'Pystytila', | ||
22 | validateBorder: 'Kehyksen täytyy olla kokonaisluku.', | ||
23 | validateHSpace: 'HSpace-määrityksen täytyy olla kokonaisluku.', | ||
24 | validateVSpace: 'VSpace-määrityksen täytyy olla kokonaisluku.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/fo.js b/sources/plugins/image/lang/fo.js new file mode 100644 index 0000000..6073e0c --- /dev/null +++ b/sources/plugins/image/lang/fo.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'fo', { | ||
6 | alt: 'Alternativur tekstur', | ||
7 | border: 'Bordi', | ||
8 | btnUpload: 'Send til ambætaran', | ||
9 | button2Img: 'Skal valdi myndaknøttur gerast til vanliga mynd?', | ||
10 | hSpace: 'Høgri breddi', | ||
11 | img2Button: 'Skal valda mynd gerast til myndaknøtt?', | ||
12 | infoTab: 'Myndaupplýsingar', | ||
13 | linkTab: 'Tilknýti', | ||
14 | lockRatio: 'Læs lutfallið', | ||
15 | menu: 'Myndaeginleikar', | ||
16 | resetSize: 'Upprunastødd', | ||
17 | title: 'Myndaeginleikar', | ||
18 | titleButton: 'Eginleikar fyri myndaknøtt', | ||
19 | upload: 'Send', | ||
20 | urlMissing: 'URL til mynd manglar.', | ||
21 | vSpace: 'Vinstri breddi', | ||
22 | validateBorder: 'Bordi má vera eitt heiltal.', | ||
23 | validateHSpace: 'HSpace má vera eitt heiltal.', | ||
24 | validateVSpace: 'VSpace má vera eitt heiltal.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/fr-ca.js b/sources/plugins/image/lang/fr-ca.js new file mode 100644 index 0000000..ebeddb2 --- /dev/null +++ b/sources/plugins/image/lang/fr-ca.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'fr-ca', { | ||
6 | alt: 'Texte alternatif', | ||
7 | border: 'Bordure', | ||
8 | btnUpload: 'Envoyer sur le serveur', | ||
9 | button2Img: 'Désirez-vous transformer l\'image sélectionnée en image simple?', | ||
10 | hSpace: 'Espacement horizontal', | ||
11 | img2Button: 'Désirez-vous transformer l\'image sélectionnée en bouton image?', | ||
12 | infoTab: 'Informations sur l\'image', | ||
13 | linkTab: 'Lien', | ||
14 | lockRatio: 'Verrouiller les proportions', | ||
15 | menu: 'Propriétés de l\'image', | ||
16 | resetSize: 'Taille originale', | ||
17 | title: 'Propriétés de l\'image', | ||
18 | titleButton: 'Propriétés du bouton image', | ||
19 | upload: 'Téléverser', | ||
20 | urlMissing: 'L\'URL de la source de l\'image est manquant.', | ||
21 | vSpace: 'Espacement vertical', | ||
22 | validateBorder: 'La bordure doit être un entier.', | ||
23 | validateHSpace: 'L\'espacement horizontal doit être un entier.', | ||
24 | validateVSpace: 'L\'espacement vertical doit être un entier.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/fr.js b/sources/plugins/image/lang/fr.js new file mode 100644 index 0000000..e06d095 --- /dev/null +++ b/sources/plugins/image/lang/fr.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'fr', { | ||
6 | alt: 'Texte de remplacement', | ||
7 | border: 'Bordure', | ||
8 | btnUpload: 'Envoyer sur le serveur', | ||
9 | button2Img: 'Voulez-vous transformer le bouton image sélectionné en simple image?', | ||
10 | hSpace: 'Espacement horizontal', | ||
11 | img2Button: 'Voulez-vous transformer l\'image en bouton image?', | ||
12 | infoTab: 'Informations sur l\'image', | ||
13 | linkTab: 'Lien', | ||
14 | lockRatio: 'Conserver les proportions', | ||
15 | menu: 'Propriétés de l\'image', | ||
16 | resetSize: 'Taille d\'origine', | ||
17 | title: 'Propriétés de l\'image', | ||
18 | titleButton: 'Propriétés du bouton image', | ||
19 | upload: 'Envoyer', | ||
20 | urlMissing: 'L\'adresse source de l\'image est manquante.', | ||
21 | vSpace: 'Espacement vertical', | ||
22 | validateBorder: 'Bordure doit être un entier.', | ||
23 | validateHSpace: 'HSpace doit être un entier.', | ||
24 | validateVSpace: 'VSpace doit être un entier.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/gl.js b/sources/plugins/image/lang/gl.js new file mode 100644 index 0000000..22f1f41 --- /dev/null +++ b/sources/plugins/image/lang/gl.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'gl', { | ||
6 | alt: 'Texto alternativo', | ||
7 | border: 'Bordo', | ||
8 | btnUpload: 'Enviar ao servidor', | ||
9 | button2Img: 'Quere converter o botón da imaxe seleccionada nunha imaxe sinxela?', | ||
10 | hSpace: 'Esp.Horiz.', | ||
11 | img2Button: 'Quere converter a imaxe seleccionada nun botón de imaxe?', | ||
12 | infoTab: 'Información da imaxe', | ||
13 | linkTab: 'Ligazón', | ||
14 | lockRatio: 'Proporcional', | ||
15 | menu: 'Propiedades da imaxe', | ||
16 | resetSize: 'Tamaño orixinal', | ||
17 | title: 'Propiedades da imaxe', | ||
18 | titleButton: 'Propiedades do botón de imaxe', | ||
19 | upload: 'Cargar', | ||
20 | urlMissing: 'Non se atopa o URL da imaxe.', | ||
21 | vSpace: 'Esp.Vert.', | ||
22 | validateBorder: 'O bordo debe ser un número.', | ||
23 | validateHSpace: 'O espazado horizontal debe ser un número.', | ||
24 | validateVSpace: 'O espazado vertical debe ser un número.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/gu.js b/sources/plugins/image/lang/gu.js new file mode 100644 index 0000000..36e26fc --- /dev/null +++ b/sources/plugins/image/lang/gu.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'gu', { | ||
6 | alt: 'ઑલ્ટર્નટ ટેક્સ્ટ', | ||
7 | border: 'બોર્ડર', | ||
8 | btnUpload: 'આ સર્વરને મોકલવું', | ||
9 | button2Img: 'તમારે ઈમેજ બટનને સાદી ઈમેજમાં બદલવું છે.', | ||
10 | hSpace: 'સમસ્તરીય જગ્યા', | ||
11 | img2Button: 'તમારે સાદી ઈમેજને ઈમેજ બટનમાં બદલવું છે.', | ||
12 | infoTab: 'ચિત્ર ની જાણકારી', | ||
13 | linkTab: 'લિંક', | ||
14 | lockRatio: 'લૉક ગુણોત્તર', | ||
15 | menu: 'ચિત્રના ગુણ', | ||
16 | resetSize: 'રીસેટ સાઇઝ', | ||
17 | title: 'ચિત્રના ગુણ', | ||
18 | titleButton: 'ચિત્ર બટનના ગુણ', | ||
19 | upload: 'અપલોડ', | ||
20 | urlMissing: 'ઈમેજની મૂળ URL છે નહી.', | ||
21 | vSpace: 'લંબરૂપ જગ્યા', | ||
22 | validateBorder: 'બોર્ડેર આંકડો હોવો જોઈએ.', | ||
23 | validateHSpace: 'HSpaceઆંકડો હોવો જોઈએ.', | ||
24 | validateVSpace: 'VSpace આંકડો હોવો જોઈએ. ' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/he.js b/sources/plugins/image/lang/he.js new file mode 100644 index 0000000..5b8e18d --- /dev/null +++ b/sources/plugins/image/lang/he.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'he', { | ||
6 | alt: 'טקסט חלופי', | ||
7 | border: 'מסגרת', | ||
8 | btnUpload: 'שליחה לשרת', | ||
9 | button2Img: 'האם להפוך את תמונת הכפתור לתמונה פשוטה?', | ||
10 | hSpace: 'מרווח אופקי', | ||
11 | img2Button: 'האם להפוך את התמונה לכפתור תמונה?', | ||
12 | infoTab: 'מידע על התמונה', | ||
13 | linkTab: 'קישור', | ||
14 | lockRatio: 'נעילת היחס', | ||
15 | menu: 'תכונות התמונה', | ||
16 | resetSize: 'איפוס הגודל', | ||
17 | title: 'מאפייני התמונה', | ||
18 | titleButton: 'מאפיני כפתור תמונה', | ||
19 | upload: 'העלאה', | ||
20 | urlMissing: 'כתובת התמונה חסרה.', | ||
21 | vSpace: 'מרווח אנכי', | ||
22 | validateBorder: 'שדה המסגרת חייב להיות מספר שלם.', | ||
23 | validateHSpace: 'שדה המרווח האופקי חייב להיות מספר שלם.', | ||
24 | validateVSpace: 'שדה המרווח האנכי חייב להיות מספר שלם.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/hi.js b/sources/plugins/image/lang/hi.js new file mode 100644 index 0000000..158c188 --- /dev/null +++ b/sources/plugins/image/lang/hi.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'hi', { | ||
6 | alt: 'वैकल्पिक टेक्स्ट', | ||
7 | border: 'बॉर्डर', | ||
8 | btnUpload: 'इसे सर्वर को भेजें', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'हॉरिज़ॉन्टल स्पेस', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', // MISSING | ||
12 | infoTab: 'तस्वीर की जानकारी', | ||
13 | linkTab: 'लिंक', | ||
14 | lockRatio: 'लॉक अनुपात', | ||
15 | menu: 'तस्वीर प्रॉपर्टीज़', | ||
16 | resetSize: 'रीसॅट साइज़', | ||
17 | title: 'तस्वीर प्रॉपर्टीज़', | ||
18 | titleButton: 'तस्वीर बटन प्रॉपर्टीज़', | ||
19 | upload: 'अपलोड', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'वर्टिकल स्पेस', | ||
22 | validateBorder: 'Border must be a whole number.', // MISSING | ||
23 | validateHSpace: 'HSpace must be a whole number.', // MISSING | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/hr.js b/sources/plugins/image/lang/hr.js new file mode 100644 index 0000000..6c3aade --- /dev/null +++ b/sources/plugins/image/lang/hr.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'hr', { | ||
6 | alt: 'Alternativni tekst', | ||
7 | border: 'Okvir', | ||
8 | btnUpload: 'Pošalji na server', | ||
9 | button2Img: 'Želite li promijeniti odabrani gumb u jednostavnu sliku?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Želite li promijeniti odabranu sliku u gumb?', | ||
12 | infoTab: 'Info slike', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Zaključaj odnos', | ||
15 | menu: 'Svojstva slika', | ||
16 | resetSize: 'Obriši veličinu', | ||
17 | title: 'Svojstva slika', | ||
18 | titleButton: 'Image Button svojstva', | ||
19 | upload: 'Pošalji', | ||
20 | urlMissing: 'Nedostaje URL slike.', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Okvir mora biti cijeli broj.', | ||
23 | validateHSpace: 'HSpace mora biti cijeli broj', | ||
24 | validateVSpace: 'VSpace mora biti cijeli broj.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/hu.js b/sources/plugins/image/lang/hu.js new file mode 100644 index 0000000..ed4c356 --- /dev/null +++ b/sources/plugins/image/lang/hu.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'hu', { | ||
6 | alt: 'Alternatív szöveg', | ||
7 | border: 'Keret', | ||
8 | btnUpload: 'Küldés a szerverre', | ||
9 | button2Img: 'A kiválasztott képgombból sima képet szeretne csinálni?', | ||
10 | hSpace: 'Vízsz. táv', | ||
11 | img2Button: 'A kiválasztott képből képgombot szeretne csinálni?', | ||
12 | infoTab: 'Alaptulajdonságok', | ||
13 | linkTab: 'Hivatkozás', | ||
14 | lockRatio: 'Arány megtartása', | ||
15 | menu: 'Kép tulajdonságai', | ||
16 | resetSize: 'Eredeti méret', | ||
17 | title: 'Kép tulajdonságai', | ||
18 | titleButton: 'Képgomb tulajdonságai', | ||
19 | upload: 'Feltöltés', | ||
20 | urlMissing: 'Hiányzik a kép URL-je', | ||
21 | vSpace: 'Függ. táv', | ||
22 | validateBorder: 'A keret méretének egész számot kell beírni!', | ||
23 | validateHSpace: 'Vízszintes távolságnak egész számot kell beírni!', | ||
24 | validateVSpace: 'Függőleges távolságnak egész számot kell beírni!' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/id.js b/sources/plugins/image/lang/id.js new file mode 100644 index 0000000..68ccd52 --- /dev/null +++ b/sources/plugins/image/lang/id.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'id', { | ||
6 | alt: 'Teks alternatif', | ||
7 | border: 'Batas', | ||
8 | btnUpload: 'Kirim ke Server', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'HSpace', // MISSING | ||
11 | img2Button: 'Apakah anda ingin mengubah gambar yang dipilih pada tombol gambar?', | ||
12 | infoTab: 'Info Gambar', | ||
13 | linkTab: 'Tautan', | ||
14 | lockRatio: 'Lock Ratio', // MISSING | ||
15 | menu: 'Image Properties', // MISSING | ||
16 | resetSize: 'Atur Ulang Ukuran', | ||
17 | title: 'Image Properties', // MISSING | ||
18 | titleButton: 'Image Button Properties', // MISSING | ||
19 | upload: 'Unggah', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Border harus berupa angka', | ||
23 | validateHSpace: 'HSpace harus berupa angka', | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/is.js b/sources/plugins/image/lang/is.js new file mode 100644 index 0000000..f55c69c --- /dev/null +++ b/sources/plugins/image/lang/is.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'is', { | ||
6 | alt: 'Baklægur texti', | ||
7 | border: 'Rammi', | ||
8 | btnUpload: 'Hlaða upp', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'Vinstri bil', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', // MISSING | ||
12 | infoTab: 'Almennt', | ||
13 | linkTab: 'Stikla', | ||
14 | lockRatio: 'Festa stærðarhlutfall', | ||
15 | menu: 'Eigindi myndar', | ||
16 | resetSize: 'Reikna stærð', | ||
17 | title: 'Eigindi myndar', | ||
18 | titleButton: 'Eigindi myndahnapps', | ||
19 | upload: 'Hlaða upp', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'Hægri bil', | ||
22 | validateBorder: 'Border must be a whole number.', // MISSING | ||
23 | validateHSpace: 'HSpace must be a whole number.', // MISSING | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/it.js b/sources/plugins/image/lang/it.js new file mode 100644 index 0000000..3aeb017 --- /dev/null +++ b/sources/plugins/image/lang/it.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'it', { | ||
6 | alt: 'Testo alternativo', | ||
7 | border: 'Bordo', | ||
8 | btnUpload: 'Invia al server', | ||
9 | button2Img: 'Vuoi trasformare il bottone immagine selezionato in un\'immagine semplice?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Vuoi trasferomare l\'immagine selezionata in un bottone immagine?', | ||
12 | infoTab: 'Informazioni immagine', | ||
13 | linkTab: 'Collegamento', | ||
14 | lockRatio: 'Blocca rapporto', | ||
15 | menu: 'Proprietà immagine', | ||
16 | resetSize: 'Reimposta dimensione', | ||
17 | title: 'Proprietà immagine', | ||
18 | titleButton: 'Proprietà bottone immagine', | ||
19 | upload: 'Carica', | ||
20 | urlMissing: 'Manca l\'URL dell\'immagine.', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Il campo Bordo deve essere un numero intero.', | ||
23 | validateHSpace: 'Il campo HSpace deve essere un numero intero.', | ||
24 | validateVSpace: 'Il campo VSpace deve essere un numero intero.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/ja.js b/sources/plugins/image/lang/ja.js new file mode 100644 index 0000000..86d54c8 --- /dev/null +++ b/sources/plugins/image/lang/ja.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'ja', { | ||
6 | alt: '代替テキスト', | ||
7 | border: '枠線の幅', | ||
8 | btnUpload: 'サーバーに送信', | ||
9 | button2Img: '選択した画像ボタンを画像に変換しますか?', | ||
10 | hSpace: '水平間隔', | ||
11 | img2Button: '選択した画像を画像ボタンに変換しますか?', | ||
12 | infoTab: '画像情報', | ||
13 | linkTab: 'リンク', | ||
14 | lockRatio: '比率を固定', | ||
15 | menu: '画像のプロパティ', | ||
16 | resetSize: 'サイズをリセット', | ||
17 | title: '画像のプロパティ', | ||
18 | titleButton: '画像ボタンのプロパティ', | ||
19 | upload: 'アップロード', | ||
20 | urlMissing: '画像のURLを入力してください。', | ||
21 | vSpace: '垂直間隔', | ||
22 | validateBorder: '枠線の幅は数値で入力してください。', | ||
23 | validateHSpace: '水平間隔は数値で入力してください。', | ||
24 | validateVSpace: '垂直間隔は数値で入力してください。' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/ka.js b/sources/plugins/image/lang/ka.js new file mode 100644 index 0000000..fe0f8f4 --- /dev/null +++ b/sources/plugins/image/lang/ka.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'ka', { | ||
6 | alt: 'სანაცვლო ტექსტი', | ||
7 | border: 'ჩარჩო', | ||
8 | btnUpload: 'სერვერისთვის გაგზავნა', | ||
9 | button2Img: 'გსურთ არჩეული სურათიანი ღილაკის გადაქცევა ჩვეულებრივ ღილაკად?', | ||
10 | hSpace: 'ჰორიზონტალური სივრცე', | ||
11 | img2Button: 'გსურთ არჩეული ჩვეულებრივი ღილაკის გადაქცევა სურათიან ღილაკად?', | ||
12 | infoTab: 'სურათის ინფორმცია', | ||
13 | linkTab: 'ბმული', | ||
14 | lockRatio: 'პროპორციის შენარჩუნება', | ||
15 | menu: 'სურათის პარამეტრები', | ||
16 | resetSize: 'ზომის დაბრუნება', | ||
17 | title: 'სურათის პარამეტრები', | ||
18 | titleButton: 'სურათიანი ღილაკის პარამეტრები', | ||
19 | upload: 'ატვირთვა', | ||
20 | urlMissing: 'სურათის URL არაა შევსებული.', | ||
21 | vSpace: 'ვერტიკალური სივრცე', | ||
22 | validateBorder: 'ჩარჩო მთელი რიცხვი უნდა იყოს.', | ||
23 | validateHSpace: 'ჰორიზონტალური სივრცე მთელი რიცხვი უნდა იყოს.', | ||
24 | validateVSpace: 'ვერტიკალური სივრცე მთელი რიცხვი უნდა იყოს.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/km.js b/sources/plugins/image/lang/km.js new file mode 100644 index 0000000..f3236ee --- /dev/null +++ b/sources/plugins/image/lang/km.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'km', { | ||
6 | alt: 'អត្ថបទជំនួស', | ||
7 | border: 'ស៊ុម', | ||
8 | btnUpload: 'ផ្ញើទៅម៉ាស៊ីនបម្រើ', | ||
9 | button2Img: 'តើអ្នកចង់ផ្លាស់ប្ដូរប៊ូតុងរូបភាពដែលបានជ្រើស នៅលើរូបភាពធម្មតាមួយមែនទេ?', | ||
10 | hSpace: 'គម្លាតផ្ដេក', | ||
11 | img2Button: 'តើអ្នកចង់ផ្លាស់ប្ដូររូបភាពដែលបានជ្រើស នៅលើប៊ូតុងរូបភាពមែនទេ?', | ||
12 | infoTab: 'ពត៌មានអំពីរូបភាព', | ||
13 | linkTab: 'តំណ', | ||
14 | lockRatio: 'ចាក់សោផលធៀប', | ||
15 | menu: 'លក្ខណៈរូបភាព', | ||
16 | resetSize: 'កំណត់ទំហំឡើងវិញ', | ||
17 | title: 'លក្ខណៈរូបភាព', | ||
18 | titleButton: 'លក្ខណៈប៊ូតុងរូបភាព', | ||
19 | upload: 'ផ្ទុកឡើង', | ||
20 | urlMissing: 'ខ្វះ URL ប្រភពរូបភាព។', | ||
21 | vSpace: 'គម្លាតបញ្ឈរ', | ||
22 | validateBorder: 'ស៊ុមត្រូវតែជាលេខ។', | ||
23 | validateHSpace: 'គម្លាតផ្ដេកត្រូវតែជាលេខ។', | ||
24 | validateVSpace: 'គម្លាតបញ្ឈរត្រូវតែជាលេខ។' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/ko.js b/sources/plugins/image/lang/ko.js new file mode 100644 index 0000000..30e7e45 --- /dev/null +++ b/sources/plugins/image/lang/ko.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'ko', { | ||
6 | alt: '대체 문자열', | ||
7 | border: '테두리', | ||
8 | btnUpload: '서버로 전송', | ||
9 | button2Img: '단순 이미지에서 선택한 이미지 버튼을 변환하시겠습니까?', | ||
10 | hSpace: '가로 여백', | ||
11 | img2Button: '이미지 버튼에 선택한 이미지를 변환하시겠습니까?', | ||
12 | infoTab: '이미지 정보', | ||
13 | linkTab: '링크', | ||
14 | lockRatio: '비율 유지', | ||
15 | menu: '이미지 속성', | ||
16 | resetSize: '원래 크기로', | ||
17 | title: '이미지 속성', | ||
18 | titleButton: '이미지 버튼 속성', | ||
19 | upload: '업로드', | ||
20 | urlMissing: '이미지 원본 주소(URL)가 없습니다.', | ||
21 | vSpace: '세로 여백', | ||
22 | validateBorder: '테두리 두께는 정수여야 합니다.', | ||
23 | validateHSpace: '가로 길이는 정수여야 합니다.', | ||
24 | validateVSpace: '세로 길이는 정수여야 합니다.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/ku.js b/sources/plugins/image/lang/ku.js new file mode 100644 index 0000000..9a8678a --- /dev/null +++ b/sources/plugins/image/lang/ku.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'ku', { | ||
6 | alt: 'جێگرەوەی دەق', | ||
7 | border: 'پەراوێز', | ||
8 | btnUpload: 'ناردنی بۆ ڕاژه', | ||
9 | button2Img: 'تۆ دەتەوێت دوگمەی وێنەی دیاریکراو بگۆڕیت بۆ وێنەیەکی ئاسایی؟', | ||
10 | hSpace: 'بۆشایی ئاسۆیی', | ||
11 | img2Button: 'تۆ دەتەوێت وێنەی دیاریکراو بگۆڕیت بۆ دوگمەی وێنه؟', | ||
12 | infoTab: 'زانیاری وێنه', | ||
13 | linkTab: 'بەستەر', | ||
14 | lockRatio: 'داخستنی ڕێژه', | ||
15 | menu: 'خاسیەتی وێنه', | ||
16 | resetSize: 'ڕێکخستنەوەی قەباره', | ||
17 | title: 'خاسیەتی وێنه', | ||
18 | titleButton: 'خاسیەتی دوگمەی وێنه', | ||
19 | upload: 'بارکردن', | ||
20 | urlMissing: 'سەرچاوەی بەستەری وێنه بزره', | ||
21 | vSpace: 'بۆشایی ئەستونی', | ||
22 | validateBorder: 'پەراوێز دەبێت بەتەواوی تەنها ژماره بێت.', | ||
23 | validateHSpace: 'بۆشایی ئاسۆیی دەبێت بەتەواوی تەنها ژمارە بێت.', | ||
24 | validateVSpace: 'بۆشایی ئەستونی دەبێت بەتەواوی تەنها ژماره بێت.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/lt.js b/sources/plugins/image/lang/lt.js new file mode 100644 index 0000000..0261413 --- /dev/null +++ b/sources/plugins/image/lang/lt.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'lt', { | ||
6 | alt: 'Alternatyvus Tekstas', | ||
7 | border: 'Rėmelis', | ||
8 | btnUpload: 'Siųsti į serverį', | ||
9 | button2Img: 'Ar norite mygtuką paversti paprastu paveiksliuku?', | ||
10 | hSpace: 'Hor.Erdvė', | ||
11 | img2Button: 'Ar norite paveiksliuką paversti mygtuku?', | ||
12 | infoTab: 'Vaizdo informacija', | ||
13 | linkTab: 'Nuoroda', | ||
14 | lockRatio: 'Išlaikyti proporciją', | ||
15 | menu: 'Vaizdo savybės', | ||
16 | resetSize: 'Atstatyti dydį', | ||
17 | title: 'Vaizdo savybės', | ||
18 | titleButton: 'Vaizdinio mygtuko savybės', | ||
19 | upload: 'Nusiųsti', | ||
20 | urlMissing: 'Paveiksliuko nuorodos nėra.', | ||
21 | vSpace: 'Vert.Erdvė', | ||
22 | validateBorder: 'Reikšmė turi būti sveikas skaičius.', | ||
23 | validateHSpace: 'Reikšmė turi būti sveikas skaičius.', | ||
24 | validateVSpace: 'Reikšmė turi būti sveikas skaičius.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/lv.js b/sources/plugins/image/lang/lv.js new file mode 100644 index 0000000..f4e6aef --- /dev/null +++ b/sources/plugins/image/lang/lv.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'lv', { | ||
6 | alt: 'Alternatīvais teksts', | ||
7 | border: 'Rāmis', | ||
8 | btnUpload: 'Nosūtīt serverim', | ||
9 | button2Img: 'Vai vēlaties pārveidot izvēlēto attēla pogu uz attēla?', | ||
10 | hSpace: 'Horizontālā telpa', | ||
11 | img2Button: 'Vai vēlaties pārveidot izvēlēto attēlu uz attēla pogas?', | ||
12 | infoTab: 'Informācija par attēlu', | ||
13 | linkTab: 'Hipersaite', | ||
14 | lockRatio: 'Nemainīga Augstuma/Platuma attiecība', | ||
15 | menu: 'Attēla īpašības', | ||
16 | resetSize: 'Atjaunot sākotnējo izmēru', | ||
17 | title: 'Attēla īpašības', | ||
18 | titleButton: 'Attēlpogas īpašības', | ||
19 | upload: 'Augšupielādēt', | ||
20 | urlMissing: 'Trūkst attēla atrašanās adrese.', | ||
21 | vSpace: 'Vertikālā telpa', | ||
22 | validateBorder: 'Apmalei jābūt veselam skaitlim', | ||
23 | validateHSpace: 'HSpace jābūt veselam skaitlim', | ||
24 | validateVSpace: 'VSpace jābūt veselam skaitlim' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/mk.js b/sources/plugins/image/lang/mk.js new file mode 100644 index 0000000..062f94f --- /dev/null +++ b/sources/plugins/image/lang/mk.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'mk', { | ||
6 | alt: 'Алтернативен текст', | ||
7 | border: 'Раб', | ||
8 | btnUpload: 'Прикачи на сервер', | ||
9 | button2Img: 'Дали сакате да направите сликата-копче да биде само слика?', | ||
10 | hSpace: 'Хоризонтален простор', | ||
11 | img2Button: 'Дали сакате да ја претворите сликата во слика-копче?', | ||
12 | infoTab: 'Информации за сликата', | ||
13 | linkTab: 'Врска', | ||
14 | lockRatio: 'Зачувај пропорција', | ||
15 | menu: 'Својства на сликата', | ||
16 | resetSize: 'Ресетирај големина', | ||
17 | title: 'Својства на сликата', | ||
18 | titleButton: 'Својства на копче-сликата', | ||
19 | upload: 'Прикачи', | ||
20 | urlMissing: 'Недостасува URL-то на сликата.', | ||
21 | vSpace: 'Вертикален простор', | ||
22 | validateBorder: 'Работ мора да биде цел број.', | ||
23 | validateHSpace: 'Хор. простор мора да биде цел број.', | ||
24 | validateVSpace: 'Верт. простор мора да биде цел број.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/mn.js b/sources/plugins/image/lang/mn.js new file mode 100644 index 0000000..7923ec6 --- /dev/null +++ b/sources/plugins/image/lang/mn.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'mn', { | ||
6 | alt: 'Зургийг орлох бичвэр', | ||
7 | border: 'Хүрээ', | ||
8 | btnUpload: 'Үүнийг сервэррүү илгээ', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'Хөндлөн зай', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', // MISSING | ||
12 | infoTab: 'Зурагны мэдээлэл', | ||
13 | linkTab: 'Холбоос', | ||
14 | lockRatio: 'Радио түгжих', | ||
15 | menu: 'Зураг', | ||
16 | resetSize: 'хэмжээ дахин оноох', | ||
17 | title: 'Зураг', | ||
18 | titleButton: 'Зурган товчны шинж чанар', | ||
19 | upload: 'Хуулах', | ||
20 | urlMissing: 'Зургийн эх сурвалжийн хаяг (URL) байхгүй байна.', | ||
21 | vSpace: 'Босоо зай', | ||
22 | validateBorder: 'Border must be a whole number.', // MISSING | ||
23 | validateHSpace: 'HSpace must be a whole number.', // MISSING | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/ms.js b/sources/plugins/image/lang/ms.js new file mode 100644 index 0000000..98adf09 --- /dev/null +++ b/sources/plugins/image/lang/ms.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'ms', { | ||
6 | alt: 'Text Alternatif', | ||
7 | border: 'Border', | ||
8 | btnUpload: 'Hantar ke Server', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'Ruang Melintang', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', // MISSING | ||
12 | infoTab: 'Info Imej', | ||
13 | linkTab: 'Sambungan', | ||
14 | lockRatio: 'Tetapkan Nisbah', | ||
15 | menu: 'Ciri-ciri Imej', | ||
16 | resetSize: 'Saiz Set Semula', | ||
17 | title: 'Ciri-ciri Imej', | ||
18 | titleButton: 'Ciri-ciri Butang Bergambar', | ||
19 | upload: 'Muat Naik', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'Ruang Menegak', | ||
22 | validateBorder: 'Border must be a whole number.', // MISSING | ||
23 | validateHSpace: 'HSpace must be a whole number.', // MISSING | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/nb.js b/sources/plugins/image/lang/nb.js new file mode 100644 index 0000000..ac94f30 --- /dev/null +++ b/sources/plugins/image/lang/nb.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'nb', { | ||
6 | alt: 'Alternativ tekst', | ||
7 | border: 'Ramme', | ||
8 | btnUpload: 'Send det til serveren', | ||
9 | button2Img: 'Vil du endre den valgte bildeknappen til et vanlig bilde?', | ||
10 | hSpace: 'HMarg', | ||
11 | img2Button: 'Vil du endre det valgte bildet til en bildeknapp?', | ||
12 | infoTab: 'Bildeinformasjon', | ||
13 | linkTab: 'Lenke', | ||
14 | lockRatio: 'Lås forhold', | ||
15 | menu: 'Bildeegenskaper', | ||
16 | resetSize: 'Tilbakestill størrelse', | ||
17 | title: 'Bildeegenskaper', | ||
18 | titleButton: 'Egenskaper for bildeknapp', | ||
19 | upload: 'Last opp', | ||
20 | urlMissing: 'Bildets adresse mangler.', | ||
21 | vSpace: 'VMarg', | ||
22 | validateBorder: 'Ramme må være et heltall.', | ||
23 | validateHSpace: 'HMarg må være et heltall.', | ||
24 | validateVSpace: 'VMarg må være et heltall.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/nl.js b/sources/plugins/image/lang/nl.js new file mode 100644 index 0000000..8755503 --- /dev/null +++ b/sources/plugins/image/lang/nl.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'nl', { | ||
6 | alt: 'Alternatieve tekst', | ||
7 | border: 'Rand', | ||
8 | btnUpload: 'Naar server verzenden', | ||
9 | button2Img: 'Wilt u de geselecteerde afbeeldingsknop vervangen door een eenvoudige afbeelding?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?', | ||
12 | infoTab: 'Informatie afbeelding', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Afmetingen vergrendelen', | ||
15 | menu: 'Eigenschappen afbeelding', | ||
16 | resetSize: 'Afmetingen resetten', | ||
17 | title: 'Eigenschappen afbeelding', | ||
18 | titleButton: 'Eigenschappen afbeeldingsknop', | ||
19 | upload: 'Upload', | ||
20 | urlMissing: 'De URL naar de afbeelding ontbreekt.', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Rand moet een heel nummer zijn.', | ||
23 | validateHSpace: 'HSpace moet een heel nummer zijn.', | ||
24 | validateVSpace: 'VSpace moet een heel nummer zijn.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/no.js b/sources/plugins/image/lang/no.js new file mode 100644 index 0000000..5f220cb --- /dev/null +++ b/sources/plugins/image/lang/no.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'no', { | ||
6 | alt: 'Alternativ tekst', | ||
7 | border: 'Ramme', | ||
8 | btnUpload: 'Send det til serveren', | ||
9 | button2Img: 'Vil du endre den valgte bildeknappen til et vanlig bilde?', | ||
10 | hSpace: 'HMarg', | ||
11 | img2Button: 'Vil du endre det valgte bildet til en bildeknapp?', | ||
12 | infoTab: 'Bildeinformasjon', | ||
13 | linkTab: 'Lenke', | ||
14 | lockRatio: 'Lås forhold', | ||
15 | menu: 'Bildeegenskaper', | ||
16 | resetSize: 'Tilbakestill størrelse', | ||
17 | title: 'Bildeegenskaper', | ||
18 | titleButton: 'Egenskaper for bildeknapp', | ||
19 | upload: 'Last opp', | ||
20 | urlMissing: 'Bildets adresse mangler.', | ||
21 | vSpace: 'VMarg', | ||
22 | validateBorder: 'Ramme må være et heltall.', | ||
23 | validateHSpace: 'HMarg må være et heltall.', | ||
24 | validateVSpace: 'VMarg må være et heltall.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/pl.js b/sources/plugins/image/lang/pl.js new file mode 100644 index 0000000..ba55b74 --- /dev/null +++ b/sources/plugins/image/lang/pl.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'pl', { | ||
6 | alt: 'Tekst zastępczy', | ||
7 | border: 'Obramowanie', | ||
8 | btnUpload: 'Wyślij', | ||
9 | button2Img: 'Czy chcesz przekonwertować zaznaczony przycisk graficzny do zwykłego obrazka?', | ||
10 | hSpace: 'Odstęp poziomy', | ||
11 | img2Button: 'Czy chcesz przekonwertować zaznaczony obrazek do przycisku graficznego?', | ||
12 | infoTab: 'Informacje o obrazku', | ||
13 | linkTab: 'Hiperłącze', | ||
14 | lockRatio: 'Zablokuj proporcje', | ||
15 | menu: 'Właściwości obrazka', | ||
16 | resetSize: 'Przywróć rozmiar', | ||
17 | title: 'Właściwości obrazka', | ||
18 | titleButton: 'Właściwości przycisku graficznego', | ||
19 | upload: 'Wyślij', | ||
20 | urlMissing: 'Podaj adres URL obrazka.', | ||
21 | vSpace: 'Odstęp pionowy', | ||
22 | validateBorder: 'Wartość obramowania musi być liczbą całkowitą.', | ||
23 | validateHSpace: 'Wartość odstępu poziomego musi być liczbą całkowitą.', | ||
24 | validateVSpace: 'Wartość odstępu pionowego musi być liczbą całkowitą.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/pt-br.js b/sources/plugins/image/lang/pt-br.js new file mode 100644 index 0000000..8ac3753 --- /dev/null +++ b/sources/plugins/image/lang/pt-br.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'pt-br', { | ||
6 | alt: 'Texto Alternativo', | ||
7 | border: 'Borda', | ||
8 | btnUpload: 'Enviar para o Servidor', | ||
9 | button2Img: 'Deseja transformar o botão de imagem em uma imagem comum?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Deseja transformar a imagem em um botão de imagem?', | ||
12 | infoTab: 'Informações da Imagem', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Travar Proporções', | ||
15 | menu: 'Formatar Imagem', | ||
16 | resetSize: 'Redefinir para o Tamanho Original', | ||
17 | title: 'Formatar Imagem', | ||
18 | titleButton: 'Formatar Botão de Imagem', | ||
19 | upload: 'Enviar', | ||
20 | urlMissing: 'URL da imagem está faltando.', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'A borda deve ser um número inteiro.', | ||
23 | validateHSpace: 'O HSpace deve ser um número inteiro.', | ||
24 | validateVSpace: 'O VSpace deve ser um número inteiro.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/pt.js b/sources/plugins/image/lang/pt.js new file mode 100644 index 0000000..c152d81 --- /dev/null +++ b/sources/plugins/image/lang/pt.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'pt', { | ||
6 | alt: 'Texto Alternativo', | ||
7 | border: 'Limite', | ||
8 | btnUpload: 'Enviar para o servidor', | ||
9 | button2Img: 'Deseja transformar o botão com imagem selecionado em uma imagem?', | ||
10 | hSpace: 'Esp.Horiz', | ||
11 | img2Button: 'Deseja transformar a imagem selecionada em um botão com imagem?', | ||
12 | infoTab: 'Informação da Imagem', | ||
13 | linkTab: 'Hiperligação', | ||
14 | lockRatio: 'Proporcional', | ||
15 | menu: 'Propriedades da Imagem', | ||
16 | resetSize: 'Tamanho Original', | ||
17 | title: 'Propriedades da Imagem', | ||
18 | titleButton: 'Propriedades do Botão de imagens', | ||
19 | upload: 'Carregar', | ||
20 | urlMissing: 'O URL da fonte da imagem está em falta.', | ||
21 | vSpace: 'Esp.Vert', | ||
22 | validateBorder: 'A borda tem de ser um numero.', | ||
23 | validateHSpace: 'HSpace tem de ser um numero.', | ||
24 | validateVSpace: 'VSpace tem de ser um numero.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/ro.js b/sources/plugins/image/lang/ro.js new file mode 100644 index 0000000..c45929a --- /dev/null +++ b/sources/plugins/image/lang/ro.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'ro', { | ||
6 | alt: 'Text alternativ', | ||
7 | border: 'Margine', | ||
8 | btnUpload: 'Trimite la server', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', // MISSING | ||
12 | infoTab: 'Informaţii despre imagine', | ||
13 | linkTab: 'Link (Legătură web)', | ||
14 | lockRatio: 'Păstrează proporţiile', | ||
15 | menu: 'Proprietăţile imaginii', | ||
16 | resetSize: 'Resetează mărimea', | ||
17 | title: 'Proprietăţile imaginii', | ||
18 | titleButton: 'Proprietăţi buton imagine (Image Button)', | ||
19 | upload: 'Încarcă', | ||
20 | urlMissing: 'Sursa URL a imaginii lipsește.', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Bordura trebuie să fie un număr întreg.', | ||
23 | validateHSpace: 'Hspace trebuie să fie un număr întreg.', | ||
24 | validateVSpace: 'Vspace trebuie să fie un număr întreg.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/ru.js b/sources/plugins/image/lang/ru.js new file mode 100644 index 0000000..1ea84d2 --- /dev/null +++ b/sources/plugins/image/lang/ru.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'ru', { | ||
6 | alt: 'Альтернативный текст', | ||
7 | border: 'Граница', | ||
8 | btnUpload: 'Загрузить на сервер', | ||
9 | button2Img: 'Вы желаете преобразовать это изображение-кнопку в обычное изображение?', | ||
10 | hSpace: 'Гориз. отступ', | ||
11 | img2Button: 'Вы желаете преобразовать это обычное изображение в изображение-кнопку?', | ||
12 | infoTab: 'Данные об изображении', | ||
13 | linkTab: 'Ссылка', | ||
14 | lockRatio: 'Сохранять пропорции', | ||
15 | menu: 'Свойства изображения', | ||
16 | resetSize: 'Вернуть обычные размеры', | ||
17 | title: 'Свойства изображения', | ||
18 | titleButton: 'Свойства изображения-кнопки', | ||
19 | upload: 'Загрузить', | ||
20 | urlMissing: 'Не указана ссылка на изображение.', | ||
21 | vSpace: 'Вертик. отступ', | ||
22 | validateBorder: 'Размер границ должен быть задан числом.', | ||
23 | validateHSpace: 'Горизонтальный отступ должен быть задан числом.', | ||
24 | validateVSpace: 'Вертикальный отступ должен быть задан числом.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/si.js b/sources/plugins/image/lang/si.js new file mode 100644 index 0000000..7a15196 --- /dev/null +++ b/sources/plugins/image/lang/si.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'si', { | ||
6 | alt: 'විකල්ප ', | ||
7 | border: 'සීමාවවල ', | ||
8 | btnUpload: 'සේවාදායකය වෙත යොමුකිරිම', | ||
9 | button2Img: 'ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්යද?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'ඔබට තෝරන ලද රුපය පරිවර්තනය කිරීමට අවශ්යද?', | ||
12 | infoTab: 'රුපයේ තොරතුරු', | ||
13 | linkTab: 'සබැඳිය', | ||
14 | lockRatio: 'නවතන අනුපාතය ', | ||
15 | menu: 'රුපයේ ගුණ', | ||
16 | resetSize: 'නැවතත් විශාලත්වය වෙනස් කිරීම', | ||
17 | title: 'රුපයේ ', | ||
18 | titleButton: 'රුප බොත්තමේ ගුණ', | ||
19 | upload: 'උඩුගතකිරීම', | ||
20 | urlMissing: 'රුප මුලාශ්ර URL නැත.', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'මාඉම් සම්පුර්ණ සංක්යාවක් විය යුතුය.', | ||
23 | validateHSpace: 'HSpace සම්පුර්ණ සංක්යාවක් විය යුතුය', | ||
24 | validateVSpace: 'VSpace සම්පුර්ණ සංක්යාවක් විය යුතුය.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/sk.js b/sources/plugins/image/lang/sk.js new file mode 100644 index 0000000..1384f6b --- /dev/null +++ b/sources/plugins/image/lang/sk.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'sk', { | ||
6 | alt: 'Alternatívny text', | ||
7 | border: 'Rám (border)', | ||
8 | btnUpload: 'Odoslať to na server', | ||
9 | button2Img: 'Chcete zmeniť vybrané obrázkové tlačidlo na jednoduchý obrázok?', | ||
10 | hSpace: 'H-medzera', | ||
11 | img2Button: 'Chcete zmeniť vybraný obrázok na obrázkové tlačidlo?', | ||
12 | infoTab: 'Informácie o obrázku', | ||
13 | linkTab: 'Odkaz', | ||
14 | lockRatio: 'Pomer zámky', | ||
15 | menu: 'Vlastnosti obrázka', | ||
16 | resetSize: 'Pôvodná veľkosť', | ||
17 | title: 'Vlastnosti obrázka', | ||
18 | titleButton: 'Vlastnosti obrázkového tlačidla', | ||
19 | upload: 'Nahrať', | ||
20 | urlMissing: 'Chýba URL zdroja obrázka.', | ||
21 | vSpace: 'V-medzera', | ||
22 | validateBorder: 'Rám (border) musí byť celé číslo.', | ||
23 | validateHSpace: 'H-medzera musí byť celé číslo.', | ||
24 | validateVSpace: 'V-medzera musí byť celé číslo.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/sl.js b/sources/plugins/image/lang/sl.js new file mode 100644 index 0000000..4c7ba8f --- /dev/null +++ b/sources/plugins/image/lang/sl.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'sl', { | ||
6 | alt: 'Nadomestno besedilo', | ||
7 | border: 'Obroba', | ||
8 | btnUpload: 'Pošlji na strežnik', | ||
9 | button2Img: 'Želiš pretvoriti izbrani gumb s sliko v preprosto sliko?', | ||
10 | hSpace: 'Vodoravni razmik', | ||
11 | img2Button: 'Želiš pretvoriti izbrano sliko v gumb s sliko?', | ||
12 | infoTab: 'Podatki o sliki', | ||
13 | linkTab: 'Povezava', | ||
14 | lockRatio: 'Zakleni razmerje', | ||
15 | menu: 'Lastnosti slike', | ||
16 | resetSize: 'Ponastavi velikost', | ||
17 | title: 'Lastnosti slike', | ||
18 | titleButton: 'Lastnosti gumba s sliko', | ||
19 | upload: 'Pošlji', | ||
20 | urlMissing: 'Manjka vir (URL) slike.', | ||
21 | vSpace: 'Navpični razmik', | ||
22 | validateBorder: 'Meja mora biti celo število.', | ||
23 | validateHSpace: 'HSpace mora biti celo število.', | ||
24 | validateVSpace: 'VSpace mora biti celo število.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/sq.js b/sources/plugins/image/lang/sq.js new file mode 100644 index 0000000..a851819 --- /dev/null +++ b/sources/plugins/image/lang/sq.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'sq', { | ||
6 | alt: 'Tekst Alternativ', | ||
7 | border: 'Korniza', | ||
8 | btnUpload: 'Dërgo në server', | ||
9 | button2Img: 'Dëshironi të e ndërroni pullën e fotos së selektuar në një foto të thjeshtë?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Dëshironi të ndryshoni foton e përzgjedhur në pullë?', | ||
12 | infoTab: 'Informacione mbi Fotografinë', | ||
13 | linkTab: 'Nyja', | ||
14 | lockRatio: 'Mbyll Racionin', | ||
15 | menu: 'Karakteristikat e Fotografisë', | ||
16 | resetSize: 'Rikthe Madhësinë', | ||
17 | title: 'Karakteristikat e Fotografisë', | ||
18 | titleButton: 'Karakteristikat e Pullës së Fotografisë', | ||
19 | upload: 'Ngarko', | ||
20 | urlMissing: 'Mungon URL e burimit të fotografisë.', | ||
21 | vSpace: 'Hapësira Vertikale', | ||
22 | validateBorder: 'Korniza duhet të jetë numër i plotë.', | ||
23 | validateHSpace: 'Hapësira horizontale duhet të jetë numër i plotë.', | ||
24 | validateVSpace: 'Hapësira vertikale duhet të jetë numër i plotë.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/sr-latn.js b/sources/plugins/image/lang/sr-latn.js new file mode 100644 index 0000000..25c39c3 --- /dev/null +++ b/sources/plugins/image/lang/sr-latn.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'sr-latn', { | ||
6 | alt: 'Alternativni tekst', | ||
7 | border: 'Okvir', | ||
8 | btnUpload: 'Pošalji na server', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', // MISSING | ||
12 | infoTab: 'Info slike', | ||
13 | linkTab: 'Link', | ||
14 | lockRatio: 'Zaključaj odnos', | ||
15 | menu: 'Osobine slika', | ||
16 | resetSize: 'Resetuj veličinu', | ||
17 | title: 'Osobine slika', | ||
18 | titleButton: 'Osobine dugmeta sa slikom', | ||
19 | upload: 'Pošalji', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Border must be a whole number.', // MISSING | ||
23 | validateHSpace: 'HSpace must be a whole number.', // MISSING | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/sr.js b/sources/plugins/image/lang/sr.js new file mode 100644 index 0000000..25b44c5 --- /dev/null +++ b/sources/plugins/image/lang/sr.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'sr', { | ||
6 | alt: 'Алтернативни текст', | ||
7 | border: 'Оквир', | ||
8 | btnUpload: 'Пошаљи на сервер', | ||
9 | button2Img: 'Да ли желите да промените одабрану слику дугмета као једноставну слику?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: 'Да ли желите да промените одабрану слику у слику дугмета?', | ||
12 | infoTab: 'Инфо слике', | ||
13 | linkTab: 'Линк', | ||
14 | lockRatio: 'Закључај однос', | ||
15 | menu: 'Особине слика', | ||
16 | resetSize: 'Ресетуј величину', | ||
17 | title: 'Особине слика', | ||
18 | titleButton: 'Особине дугмета са сликом', | ||
19 | upload: 'Пошаљи', | ||
20 | urlMissing: 'Недостаје УРЛ слике.', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: 'Ивица треба да буде цифра.', | ||
23 | validateHSpace: 'HSpace треба да буде цифра.', | ||
24 | validateVSpace: 'VSpace треба да буде цифра.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/sv.js b/sources/plugins/image/lang/sv.js new file mode 100644 index 0000000..bc11f09 --- /dev/null +++ b/sources/plugins/image/lang/sv.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'sv', { | ||
6 | alt: 'Alternativ text', | ||
7 | border: 'Kant', | ||
8 | btnUpload: 'Skicka till server', | ||
9 | button2Img: 'Vill du omvandla den valda bildknappen på en enkel bild?', | ||
10 | hSpace: 'Horis. marginal', | ||
11 | img2Button: 'Vill du omvandla den valda bildknappen på en enkel bild?', | ||
12 | infoTab: 'Bildinformation', | ||
13 | linkTab: 'Länk', | ||
14 | lockRatio: 'Lås höjd/bredd förhållanden', | ||
15 | menu: 'Bildegenskaper', | ||
16 | resetSize: 'Återställ storlek', | ||
17 | title: 'Bildegenskaper', | ||
18 | titleButton: 'Egenskaper för bildknapp', | ||
19 | upload: 'Ladda upp', | ||
20 | urlMissing: 'Bildkällans URL saknas.', | ||
21 | vSpace: 'Vert. marginal', | ||
22 | validateBorder: 'Kantlinje måste vara ett heltal.', | ||
23 | validateHSpace: 'HSpace måste vara ett heltal.', | ||
24 | validateVSpace: 'VSpace måste vara ett heltal.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/th.js b/sources/plugins/image/lang/th.js new file mode 100644 index 0000000..f9f8023 --- /dev/null +++ b/sources/plugins/image/lang/th.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'th', { | ||
6 | alt: 'คำประกอบรูปภาพ', | ||
7 | border: 'ขนาดขอบรูป', | ||
8 | btnUpload: 'อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'ระยะแนวนอน', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', // MISSING | ||
12 | infoTab: 'ข้อมูลของรูปภาพ', | ||
13 | linkTab: 'ลิ้งค์', | ||
14 | lockRatio: 'กำหนดอัตราส่วน กว้าง-สูง แบบคงที่', | ||
15 | menu: 'คุณสมบัติของ รูปภาพ', | ||
16 | resetSize: 'กำหนดรูปเท่าขนาดจริง', | ||
17 | title: 'คุณสมบัติของ รูปภาพ', | ||
18 | titleButton: 'คุณสมบัติของ ปุ่มแบบรูปภาพ', | ||
19 | upload: 'อัพโหลดไฟล์', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'ระยะแนวตั้ง', | ||
22 | validateBorder: 'Border must be a whole number.', // MISSING | ||
23 | validateHSpace: 'HSpace must be a whole number.', // MISSING | ||
24 | validateVSpace: 'VSpace must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/tr.js b/sources/plugins/image/lang/tr.js new file mode 100644 index 0000000..5a668f2 --- /dev/null +++ b/sources/plugins/image/lang/tr.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'tr', { | ||
6 | alt: 'Alternatif Yazı', | ||
7 | border: 'Kenar', | ||
8 | btnUpload: 'Sunucuya Yolla', | ||
9 | button2Img: 'Seçili resim butonunu basit resime çevirmek istermisiniz?', | ||
10 | hSpace: 'Yatay Boşluk', | ||
11 | img2Button: 'Seçili olan resimi, resimli butona çevirmek istermisiniz?', | ||
12 | infoTab: 'Resim Bilgisi', | ||
13 | linkTab: 'Köprü', | ||
14 | lockRatio: 'Oranı Kilitle', | ||
15 | menu: 'Resim Özellikleri', | ||
16 | resetSize: 'Boyutu Başa Döndür', | ||
17 | title: 'Resim Özellikleri', | ||
18 | titleButton: 'Resimli Düğme Özellikleri', | ||
19 | upload: 'Karşıya Yükle', | ||
20 | urlMissing: 'Resmin URL kaynağı eksiktir.', | ||
21 | vSpace: 'Dikey Boşluk', | ||
22 | validateBorder: 'Çerçeve tam sayı olmalıdır.', | ||
23 | validateHSpace: 'HSpace tam sayı olmalıdır.', | ||
24 | validateVSpace: 'VSpace tam sayı olmalıdır.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/tt.js b/sources/plugins/image/lang/tt.js new file mode 100644 index 0000000..8daf0af --- /dev/null +++ b/sources/plugins/image/lang/tt.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'tt', { | ||
6 | alt: 'Альтернатив текст', | ||
7 | border: 'Чик', | ||
8 | btnUpload: 'Серверга җибәрү', | ||
9 | button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING | ||
10 | hSpace: 'Горизонталь ара', | ||
11 | img2Button: 'Do you want to transform the selected image on a image button?', // MISSING | ||
12 | infoTab: 'Рәсем тасвирламасы', | ||
13 | linkTab: 'Сылталама', | ||
14 | lockRatio: 'Lock Ratio', // MISSING | ||
15 | menu: 'Рәсем үзлекләре', | ||
16 | resetSize: 'Баштагы зурлык', | ||
17 | title: 'Рәсем үзлекләре', | ||
18 | titleButton: 'Рәсемле төймə үзлекләре', | ||
19 | upload: 'Йөкләү', | ||
20 | urlMissing: 'Image source URL is missing.', // MISSING | ||
21 | vSpace: 'Вертикаль ара', | ||
22 | validateBorder: 'Чик киңлеге сан булырга тиеш.', | ||
23 | validateHSpace: 'Горизонталь ара бөтен сан булырга тиеш.', | ||
24 | validateVSpace: 'Вертикаль ара бөтен сан булырга тиеш.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/ug.js b/sources/plugins/image/lang/ug.js new file mode 100644 index 0000000..70382ec --- /dev/null +++ b/sources/plugins/image/lang/ug.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'ug', { | ||
6 | alt: 'تېكىست ئالماشتۇر', | ||
7 | border: 'گىرۋەك چوڭلۇقى', | ||
8 | btnUpload: 'مۇلازىمېتىرغا يۈكلە', | ||
9 | button2Img: 'نۆۋەتتىكى توپچىنى سۈرەتكە ئۆزگەرتەمسىز؟', | ||
10 | hSpace: 'توغرىسىغا ئارىلىقى', | ||
11 | img2Button: 'نۆۋەتتىكى سۈرەتنى توپچىغا ئۆزگەرتەمسىز؟', | ||
12 | infoTab: 'سۈرەت', | ||
13 | linkTab: 'ئۇلانما', | ||
14 | lockRatio: 'نىسبەتنى قۇلۇپلا', | ||
15 | menu: 'سۈرەت خاسلىقى', | ||
16 | resetSize: 'ئەسلى چوڭلۇق', | ||
17 | title: 'سۈرەت خاسلىقى', | ||
18 | titleButton: 'سۈرەت دائىرە خاسلىقى', | ||
19 | upload: 'يۈكلە', | ||
20 | urlMissing: 'سۈرەتنىڭ ئەسلى ھۆججەت ئادرېسى كەم', | ||
21 | vSpace: 'بويىغا ئارىلىقى', | ||
22 | validateBorder: 'گىرۋەك چوڭلۇقى چوقۇم سان بولىدۇ', | ||
23 | validateHSpace: 'توغرىسىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ', | ||
24 | validateVSpace: 'بويىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/uk.js b/sources/plugins/image/lang/uk.js new file mode 100644 index 0000000..c32c230 --- /dev/null +++ b/sources/plugins/image/lang/uk.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'uk', { | ||
6 | alt: 'Альтернативний текст', | ||
7 | border: 'Рамка', | ||
8 | btnUpload: 'Надіслати на сервер', | ||
9 | button2Img: 'Бажаєте перетворити обрану кнопку-зображення на просте зображення?', | ||
10 | hSpace: 'Гориз. відступ', | ||
11 | img2Button: 'Бажаєте перетворити обране зображення на кнопку-зображення?', | ||
12 | infoTab: 'Інформація про зображення', | ||
13 | linkTab: 'Посилання', | ||
14 | lockRatio: 'Зберегти пропорції', | ||
15 | menu: 'Властивості зображення', | ||
16 | resetSize: 'Очистити поля розмірів', | ||
17 | title: 'Властивості зображення', | ||
18 | titleButton: 'Властивості кнопки із зображенням', | ||
19 | upload: 'Надіслати', | ||
20 | urlMissing: 'Вкажіть URL зображення.', | ||
21 | vSpace: 'Верт. відступ', | ||
22 | validateBorder: 'Ширина рамки повинна бути цілим числом.', | ||
23 | validateHSpace: 'Гориз. відступ повинен бути цілим числом.', | ||
24 | validateVSpace: 'Верт. відступ повинен бути цілим числом.' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/vi.js b/sources/plugins/image/lang/vi.js new file mode 100644 index 0000000..70d7578 --- /dev/null +++ b/sources/plugins/image/lang/vi.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'vi', { | ||
6 | alt: 'Chú thích ảnh', | ||
7 | border: 'Đường viền', | ||
8 | btnUpload: 'Tải lên máy chủ', | ||
9 | button2Img: 'Bạn có muốn chuyển nút bấm bằng ảnh được chọn thành ảnh?', | ||
10 | hSpace: 'Khoảng đệm ngang', | ||
11 | img2Button: 'Bạn có muốn chuyển đổi ảnh được chọn thành nút bấm bằng ảnh?', | ||
12 | infoTab: 'Thông tin của ảnh', | ||
13 | linkTab: 'Tab liên kết', | ||
14 | lockRatio: 'Giữ nguyên tỷ lệ', | ||
15 | menu: 'Thuộc tính của ảnh', | ||
16 | resetSize: 'Kích thước gốc', | ||
17 | title: 'Thuộc tính của ảnh', | ||
18 | titleButton: 'Thuộc tính nút của ảnh', | ||
19 | upload: 'Tải lên', | ||
20 | urlMissing: 'Thiếu đường dẫn hình ảnh', | ||
21 | vSpace: 'Khoảng đệm dọc', | ||
22 | validateBorder: 'Chiều rộng của đường viền phải là một số nguyên dương', | ||
23 | validateHSpace: 'Khoảng đệm ngang phải là một số nguyên dương', | ||
24 | validateVSpace: 'Khoảng đệm dọc phải là một số nguyên dương' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/zh-cn.js b/sources/plugins/image/lang/zh-cn.js new file mode 100644 index 0000000..651468f --- /dev/null +++ b/sources/plugins/image/lang/zh-cn.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'zh-cn', { | ||
6 | alt: '替换文本', | ||
7 | border: '边框大小', | ||
8 | btnUpload: '上传到服务器', | ||
9 | button2Img: '确定要把当前图像按钮转换为普通图像吗?', | ||
10 | hSpace: '水平间距', | ||
11 | img2Button: '确定要把当前图像改变为图像按钮吗?', | ||
12 | infoTab: '图像信息', | ||
13 | linkTab: '链接', | ||
14 | lockRatio: '锁定比例', | ||
15 | menu: '图像属性', | ||
16 | resetSize: '原始尺寸', | ||
17 | title: '图像属性', | ||
18 | titleButton: '图像域属性', | ||
19 | upload: '上传', | ||
20 | urlMissing: '缺少图像源文件地址', | ||
21 | vSpace: '垂直间距', | ||
22 | validateBorder: '边框大小必须为整数格式', | ||
23 | validateHSpace: '水平间距必须为整数格式', | ||
24 | validateVSpace: '垂直间距必须为整数格式' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/lang/zh.js b/sources/plugins/image/lang/zh.js new file mode 100644 index 0000000..0859d26 --- /dev/null +++ b/sources/plugins/image/lang/zh.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'image', 'zh', { | ||
6 | alt: '替代文字', | ||
7 | border: '框線', | ||
8 | btnUpload: '傳送到伺服器', | ||
9 | button2Img: '請問您確定要將「圖片按鈕」轉換成「圖片」嗎?', | ||
10 | hSpace: 'HSpace', | ||
11 | img2Button: '請問您確定要將「圖片」轉換成「圖片按鈕」嗎?', | ||
12 | infoTab: '影像資訊', | ||
13 | linkTab: '連結', | ||
14 | lockRatio: '固定比例', | ||
15 | menu: '影像屬性', | ||
16 | resetSize: '重設大小', | ||
17 | title: '影像屬性', | ||
18 | titleButton: '影像按鈕屬性', | ||
19 | upload: '上傳', | ||
20 | urlMissing: '遺失圖片來源之 URL ', | ||
21 | vSpace: 'VSpace', | ||
22 | validateBorder: '框線必須是整數。', | ||
23 | validateHSpace: 'HSpace 必須是整數。', | ||
24 | validateVSpace: 'VSpace 必須是整數。' | ||
25 | } ); | ||
diff --git a/sources/plugins/image/plugin.js b/sources/plugins/image/plugin.js new file mode 100644 index 0000000..8bed8ec --- /dev/null +++ b/sources/plugins/image/plugin.js | |||
@@ -0,0 +1,183 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview The Image plugin. | ||
8 | */ | ||
9 | |||
10 | ( function() { | ||
11 | |||
12 | CKEDITOR.plugins.add( 'image', { | ||
13 | requires: 'dialog', | ||
14 | // jscs:disable maximumLineLength | ||
15 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
16 | // jscs:enable maximumLineLength | ||
17 | icons: 'image', // %REMOVE_LINE_CORE% | ||
18 | hidpi: true, // %REMOVE_LINE_CORE% | ||
19 | init: function( editor ) { | ||
20 | // Abort when Image2 is to be loaded since both plugins | ||
21 | // share the same button, command, etc. names (#11222). | ||
22 | if ( editor.plugins.image2 ) | ||
23 | return; | ||
24 | |||
25 | var pluginName = 'image'; | ||
26 | |||
27 | // Register the dialog. | ||
28 | CKEDITOR.dialog.add( pluginName, this.path + 'dialogs/image.js' ); | ||
29 | |||
30 | var allowed = 'img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}', | ||
31 | required = 'img[alt,src]'; | ||
32 | |||
33 | if ( CKEDITOR.dialog.isTabEnabled( editor, pluginName, 'advanced' ) ) | ||
34 | allowed = 'img[alt,dir,id,lang,longdesc,!src,title]{*}(*)'; | ||
35 | |||
36 | // Register the command. | ||
37 | editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName, { | ||
38 | allowedContent: allowed, | ||
39 | requiredContent: required, | ||
40 | contentTransformations: [ | ||
41 | [ 'img{width}: sizeToStyle', 'img[width]: sizeToAttribute' ], | ||
42 | [ 'img{float}: alignmentToStyle', 'img[align]: alignmentToAttribute' ] | ||
43 | ] | ||
44 | } ) ); | ||
45 | |||
46 | // Register the toolbar button. | ||
47 | editor.ui.addButton && editor.ui.addButton( 'Image', { | ||
48 | label: editor.lang.common.image, | ||
49 | command: pluginName, | ||
50 | toolbar: 'insert,10' | ||
51 | } ); | ||
52 | |||
53 | editor.on( 'doubleclick', function( evt ) { | ||
54 | var element = evt.data.element; | ||
55 | |||
56 | if ( element.is( 'img' ) && !element.data( 'cke-realelement' ) && !element.isReadOnly() ) | ||
57 | evt.data.dialog = 'image'; | ||
58 | } ); | ||
59 | |||
60 | // If the "menu" plugin is loaded, register the menu items. | ||
61 | if ( editor.addMenuItems ) { | ||
62 | editor.addMenuItems( { | ||
63 | image: { | ||
64 | label: editor.lang.image.menu, | ||
65 | command: 'image', | ||
66 | group: 'image' | ||
67 | } | ||
68 | } ); | ||
69 | } | ||
70 | |||
71 | // If the "contextmenu" plugin is loaded, register the listeners. | ||
72 | if ( editor.contextMenu ) { | ||
73 | editor.contextMenu.addListener( function( element ) { | ||
74 | if ( getSelectedImage( editor, element ) ) | ||
75 | return { image: CKEDITOR.TRISTATE_OFF }; | ||
76 | } ); | ||
77 | } | ||
78 | }, | ||
79 | afterInit: function( editor ) { | ||
80 | // Abort when Image2 is to be loaded since both plugins | ||
81 | // share the same button, command, etc. names (#11222). | ||
82 | if ( editor.plugins.image2 ) | ||
83 | return; | ||
84 | |||
85 | // Customize the behavior of the alignment commands. (#7430) | ||
86 | setupAlignCommand( 'left' ); | ||
87 | setupAlignCommand( 'right' ); | ||
88 | setupAlignCommand( 'center' ); | ||
89 | setupAlignCommand( 'block' ); | ||
90 | |||
91 | function setupAlignCommand( value ) { | ||
92 | var command = editor.getCommand( 'justify' + value ); | ||
93 | if ( command ) { | ||
94 | if ( value == 'left' || value == 'right' ) { | ||
95 | command.on( 'exec', function( evt ) { | ||
96 | var img = getSelectedImage( editor ), | ||
97 | align; | ||
98 | if ( img ) { | ||
99 | align = getImageAlignment( img ); | ||
100 | if ( align == value ) { | ||
101 | img.removeStyle( 'float' ); | ||
102 | |||
103 | // Remove "align" attribute when necessary. | ||
104 | if ( value == getImageAlignment( img ) ) | ||
105 | img.removeAttribute( 'align' ); | ||
106 | } else { | ||
107 | img.setStyle( 'float', value ); | ||
108 | } | ||
109 | |||
110 | evt.cancel(); | ||
111 | } | ||
112 | } ); | ||
113 | } | ||
114 | |||
115 | command.on( 'refresh', function( evt ) { | ||
116 | var img = getSelectedImage( editor ), | ||
117 | align; | ||
118 | if ( img ) { | ||
119 | align = getImageAlignment( img ); | ||
120 | |||
121 | this.setState( | ||
122 | ( align == value ) ? CKEDITOR.TRISTATE_ON : ( value == 'right' || value == 'left' ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); | ||
123 | |||
124 | evt.cancel(); | ||
125 | } | ||
126 | } ); | ||
127 | } | ||
128 | } | ||
129 | } | ||
130 | } ); | ||
131 | |||
132 | function getSelectedImage( editor, element ) { | ||
133 | if ( !element ) { | ||
134 | var sel = editor.getSelection(); | ||
135 | element = sel.getSelectedElement(); | ||
136 | } | ||
137 | |||
138 | if ( element && element.is( 'img' ) && !element.data( 'cke-realelement' ) && !element.isReadOnly() ) | ||
139 | return element; | ||
140 | } | ||
141 | |||
142 | function getImageAlignment( element ) { | ||
143 | var align = element.getStyle( 'float' ); | ||
144 | |||
145 | if ( align == 'inherit' || align == 'none' ) | ||
146 | align = 0; | ||
147 | |||
148 | if ( !align ) | ||
149 | align = element.getAttribute( 'align' ); | ||
150 | |||
151 | return align; | ||
152 | } | ||
153 | |||
154 | } )(); | ||
155 | |||
156 | /** | ||
157 | * Determines whether dimension inputs should be automatically filled when the image URL changes in the Image plugin dialog window. | ||
158 | * | ||
159 | * config.image_prefillDimensions = false; | ||
160 | * | ||
161 | * @since 4.5 | ||
162 | * @cfg {Boolean} [image_prefillDimensions=true] | ||
163 | * @member CKEDITOR.config | ||
164 | */ | ||
165 | |||
166 | /** | ||
167 | * Whether to remove links when emptying the link URL field in the Image dialog window. | ||
168 | * | ||
169 | * config.image_removeLinkByEmptyURL = false; | ||
170 | * | ||
171 | * @cfg {Boolean} [image_removeLinkByEmptyURL=true] | ||
172 | * @member CKEDITOR.config | ||
173 | */ | ||
174 | CKEDITOR.config.image_removeLinkByEmptyURL = true; | ||
175 | |||
176 | /** | ||
177 | * Padding text to set off the image in the preview area. | ||
178 | * | ||
179 | * config.image_previewText = CKEDITOR.tools.repeat( '___ ', 100 ); | ||
180 | * | ||
181 | * @cfg {String} [image_previewText='Lorem ipsum dolor...' (placeholder text)] | ||
182 | * @member CKEDITOR.config | ||
183 | */ | ||
diff --git a/sources/plugins/indent/dev/indent.html b/sources/plugins/indent/dev/indent.html new file mode 100644 index 0000000..4ddab5a --- /dev/null +++ b/sources/plugins/indent/dev/indent.html | |||
@@ -0,0 +1,284 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <!-- | ||
3 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
4 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
5 | --> | ||
6 | <html> | ||
7 | <head> | ||
8 | <meta charset="utf-8"> | ||
9 | <title>Indent DEV sample</title> | ||
10 | <script src="../../../ckeditor.js"></script> | ||
11 | <style> | ||
12 | body { | ||
13 | padding: 20px; | ||
14 | margin: 0; | ||
15 | } | ||
16 | .editors { | ||
17 | display: block; | ||
18 | overflow: hidden; | ||
19 | width: 100%; | ||
20 | margin: 0px auto; | ||
21 | list-style-type: none; | ||
22 | margin: 0; | ||
23 | padding: 0; | ||
24 | |||
25 | box-sizing: content-box; | ||
26 | |||
27 | background: #eee; | ||
28 | } | ||
29 | .editors li { | ||
30 | width: 50%; | ||
31 | margin: 0; | ||
32 | padding: 10px; | ||
33 | float: left; | ||
34 | |||
35 | box-sizing: border-box; | ||
36 | } | ||
37 | .editors li:nth-child(2n) { | ||
38 | background: #D4E59A; | ||
39 | } | ||
40 | #menu { | ||
41 | position: fixed; | ||
42 | top: 0; | ||
43 | right: 20px; | ||
44 | padding: 5px; | ||
45 | border: 1px solid #aaa; | ||
46 | background: #eee; | ||
47 | } | ||
48 | |||
49 | </style> | ||
50 | </head> | ||
51 | <body> | ||
52 | <p id="menu"> | ||
53 | <a href="#listnblock">List & Block</a>, | ||
54 | <a href="#classes">Classes</a>, | ||
55 | <a href="#list">List</a>, | ||
56 | <a href="#block">Block</a>, | ||
57 | <a href="#br">ENTER_BR</a> | ||
58 | </p> | ||
59 | |||
60 | <h1 class="samples">Indent DEV sample</h1> | ||
61 | <h2 id="listnblock">List & Block</h2> | ||
62 | <ul class="editors"> | ||
63 | <li> | ||
64 | <textarea cols="80" id="editor1" rows="10"> | ||
65 | <p>xx</p> | ||
66 | <ul> | ||
67 | <li>x</li> | ||
68 | <li>y</li> | ||
69 | </ul> | ||
70 | <p>xx</p> | ||
71 | |||
72 | <br> | ||
73 | |||
74 | <ul><li><ol><li>xx</li></ol></li><li>yy</li></ul> | ||
75 | </textarea> | ||
76 | </li> | ||
77 | <li> | ||
78 | <pre id="editor1_out"></pre> | ||
79 | </li> | ||
80 | </ul> | ||
81 | |||
82 | <h2 id="classes">Indent classes</h2> | ||
83 | <ul class="editors"> | ||
84 | <li> | ||
85 | <textarea cols="80" id="editor2" rows="10"> | ||
86 | <ul> | ||
87 | <li>a</li> | ||
88 | <li> | ||
89 | b | ||
90 | <ol> | ||
91 | <li>inner</li> | ||
92 | </ol> | ||
93 | </li> | ||
94 | <li>c</li> | ||
95 | </ul> | ||
96 | <p>moo</p> | ||
97 | </textarea> | ||
98 | </li> | ||
99 | <li> | ||
100 | <pre id="editor2_out"></pre> | ||
101 | </li> | ||
102 | </ul> | ||
103 | |||
104 | <h2 id="list">List only</h2> | ||
105 | <ul class="editors"> | ||
106 | <li> | ||
107 | <textarea cols="80" id="editor3" rows="10"> | ||
108 | <ul> | ||
109 | <li>a</li> | ||
110 | <li> | ||
111 | b | ||
112 | <ol> | ||
113 | <li>inner</li> | ||
114 | </ol> | ||
115 | </li> | ||
116 | <li>c</li> | ||
117 | </ul> | ||
118 | <p>moo</p> | ||
119 | </textarea> | ||
120 | </li> | ||
121 | <li> | ||
122 | <pre id="editor3_out"></pre> | ||
123 | </li> | ||
124 | </ul> | ||
125 | |||
126 | <h2 id="block">Block only</h2> | ||
127 | <ul class="editors"> | ||
128 | <li> | ||
129 | <textarea cols="80" id="editor4" rows="10"> | ||
130 | <ul> | ||
131 | <li>a</li> | ||
132 | <li> | ||
133 | b | ||
134 | <ol> | ||
135 | <li>inner</li> | ||
136 | </ol> | ||
137 | </li> | ||
138 | <li>c</li> | ||
139 | </ul> | ||
140 | <p>moo</p> | ||
141 | </textarea> | ||
142 | </li> | ||
143 | <li> | ||
144 | <pre id="editor4_out"></pre> | ||
145 | </li> | ||
146 | </ul> | ||
147 | |||
148 | <h2 id="br">CKEDITOR.ENTER_BR</h2> | ||
149 | <ul class="editors"> | ||
150 | <li> | ||
151 | <textarea cols="80" id="editor5" rows="10"> | ||
152 | Text | ||
153 | <br> | ||
154 | <ul> | ||
155 | <li>a</li> | ||
156 | <li>b</li> | ||
157 | </ul> | ||
158 | </textarea> | ||
159 | </li> | ||
160 | <li> | ||
161 | <pre id="editor5_out"></pre> | ||
162 | </li> | ||
163 | </ul> | ||
164 | <script> | ||
165 | |||
166 | var plugins = 'enterkey,toolbar,htmlwriter,wysiwygarea,undo,sourcearea,clipboard,list,justify,indent,indentlist,indentblock'; | ||
167 | |||
168 | CKEDITOR.config.indentOffset = 10; | ||
169 | CKEDITOR.addCss( '\ | ||
170 | .i1{ margin-left: 10px}\ | ||
171 | .i2{ margin-left: 20px}\ | ||
172 | .i3{ margin-left: 30px}' ); | ||
173 | |||
174 | function showData( event ) { | ||
175 | CKEDITOR.document.getById( this.name + '_out' ).setText( getHtmlWithSelection( this ) ); | ||
176 | } | ||
177 | |||
178 | function browserHtmlFix( html ) { | ||
179 | if ( CKEDITOR.env.ie && ( document.documentMode || CKEDITOR.env.version ) < 9 ) { | ||
180 | // Fix output base href on anchored link. | ||
181 | html = html.replace( /href="(.*?)#(.*?)"/gi, | ||
182 | function( m, base, anchor ) { | ||
183 | if ( base == window.location.href.replace( window.location.hash, '' ) ) | ||
184 | return 'href="#' + anchor + '"'; | ||
185 | |||
186 | return m; | ||
187 | } ); | ||
188 | |||
189 | // Fix output line break after HR. | ||
190 | html = html.replace( /(<HR>)\r\n/gi, function( m, hr ) { return hr; } ); | ||
191 | } | ||
192 | |||
193 | return html; | ||
194 | } | ||
195 | |||
196 | function getHtmlWithSelection( editorOrElement, root ) { | ||
197 | var isEditor = editorOrElement instanceof CKEDITOR.editor, | ||
198 | element = isEditor ? editorOrElement.editable() : editorOrElement; | ||
199 | |||
200 | root = isEditor ? element : | ||
201 | root instanceof CKEDITOR.dom.document ? | ||
202 | root.getBody() : root || CKEDITOR.document.getBody(); | ||
203 | |||
204 | function replaceWithBookmark( match, startOrEnd ) { | ||
205 | var bookmark; | ||
206 | switch( startOrEnd ) { | ||
207 | case 'S' : | ||
208 | bookmark = '['; | ||
209 | break; | ||
210 | case 'E' : | ||
211 | bookmark = ']'; | ||
212 | break; | ||
213 | case 'C' : | ||
214 | bookmark = '^'; | ||
215 | break; | ||
216 | } | ||
217 | return bookmark; | ||
218 | } | ||
219 | |||
220 | // Hack: force remove the filling char hack in Webkit. | ||
221 | isEditor && CKEDITOR.env.webkit && editorOrElement.fire( 'beforeSetMode' ); | ||
222 | |||
223 | var sel = isEditor ? editorOrElement.getSelection() | ||
224 | : new CKEDITOR.dom.selection( root ); | ||
225 | |||
226 | var doc = sel.document; | ||
227 | var ranges = sel.getRanges(), | ||
228 | range; | ||
229 | |||
230 | var bms = []; | ||
231 | var iter = ranges.createIterator(); | ||
232 | while( range = iter.getNextRange() ) | ||
233 | bms.push( range.createBookmark( 1 ) ); | ||
234 | |||
235 | var html = browserHtmlFix( isEditor ? editorOrElement.getData() : element.getHtml() ); | ||
236 | html = html.replace( /<span\b[^>]*?id="?cke_bm_\d+(\w)"?\b[^>]*?>.*?<\/span>/gi, | ||
237 | replaceWithBookmark ); | ||
238 | |||
239 | for ( var i = 0, bm; i < bms.length; i++ ) { | ||
240 | bm = bms[ i ]; | ||
241 | var start = doc.getById( bm.startNode ), | ||
242 | end = doc.getById( bm.endNode ); | ||
243 | |||
244 | start && start.remove(); | ||
245 | end && end.remove(); | ||
246 | } | ||
247 | |||
248 | return html; | ||
249 | } | ||
250 | |||
251 | CKEDITOR.on( 'instanceReady', function ( event ) { | ||
252 | var editor = event.editor; | ||
253 | |||
254 | showData.call( editor ); | ||
255 | |||
256 | editor.on( 'afterCommandExec', showData, editor ); | ||
257 | }); | ||
258 | |||
259 | CKEDITOR.replace( 'editor1', { | ||
260 | plugins: plugins | ||
261 | } ); | ||
262 | |||
263 | CKEDITOR.replace( 'editor2', { | ||
264 | plugins: plugins, | ||
265 | indentClasses: [ 'i1', 'i2', 'i3' ] | ||
266 | } ); | ||
267 | |||
268 | CKEDITOR.replace( 'editor3', { | ||
269 | plugins: plugins, | ||
270 | removePlugins: 'indentblock' | ||
271 | } ); | ||
272 | |||
273 | CKEDITOR.replace( 'editor4', { | ||
274 | plugins: plugins, | ||
275 | removePlugins: 'indentlist' | ||
276 | } ); | ||
277 | |||
278 | CKEDITOR.replace( 'editor5', { | ||
279 | plugins: plugins, | ||
280 | enterMode: CKEDITOR.ENTER_BR | ||
281 | } ); | ||
282 | </script> | ||
283 | </body> | ||
284 | </html> | ||
diff --git a/sources/plugins/indent/icons/hidpi/indent-rtl.png b/sources/plugins/indent/icons/hidpi/indent-rtl.png new file mode 100644 index 0000000..e14dc30 --- /dev/null +++ b/sources/plugins/indent/icons/hidpi/indent-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/indent/icons/hidpi/indent.png b/sources/plugins/indent/icons/hidpi/indent.png new file mode 100644 index 0000000..c629bb4 --- /dev/null +++ b/sources/plugins/indent/icons/hidpi/indent.png | |||
Binary files differ | |||
diff --git a/sources/plugins/indent/icons/hidpi/outdent-rtl.png b/sources/plugins/indent/icons/hidpi/outdent-rtl.png new file mode 100644 index 0000000..35f69ab --- /dev/null +++ b/sources/plugins/indent/icons/hidpi/outdent-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/indent/icons/hidpi/outdent.png b/sources/plugins/indent/icons/hidpi/outdent.png new file mode 100644 index 0000000..b00179e --- /dev/null +++ b/sources/plugins/indent/icons/hidpi/outdent.png | |||
Binary files differ | |||
diff --git a/sources/plugins/indent/icons/indent-rtl.png b/sources/plugins/indent/icons/indent-rtl.png new file mode 100644 index 0000000..ff3fd22 --- /dev/null +++ b/sources/plugins/indent/icons/indent-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/indent/icons/indent.png b/sources/plugins/indent/icons/indent.png new file mode 100644 index 0000000..3e151bc --- /dev/null +++ b/sources/plugins/indent/icons/indent.png | |||
Binary files differ | |||
diff --git a/sources/plugins/indent/icons/outdent-rtl.png b/sources/plugins/indent/icons/outdent-rtl.png new file mode 100644 index 0000000..7165424 --- /dev/null +++ b/sources/plugins/indent/icons/outdent-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/indent/icons/outdent.png b/sources/plugins/indent/icons/outdent.png new file mode 100644 index 0000000..54f205d --- /dev/null +++ b/sources/plugins/indent/icons/outdent.png | |||
Binary files differ | |||
diff --git a/sources/plugins/indent/lang/af.js b/sources/plugins/indent/lang/af.js new file mode 100644 index 0000000..416b241 --- /dev/null +++ b/sources/plugins/indent/lang/af.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'af', { | ||
6 | indent: 'Vergroot inspring', | ||
7 | outdent: 'Verklein inspring' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/ar.js b/sources/plugins/indent/lang/ar.js new file mode 100644 index 0000000..13458a6 --- /dev/null +++ b/sources/plugins/indent/lang/ar.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'ar', { | ||
6 | indent: 'زيادة المسافة البادئة', | ||
7 | outdent: 'إنقاص المسافة البادئة' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/bg.js b/sources/plugins/indent/lang/bg.js new file mode 100644 index 0000000..5c6c994 --- /dev/null +++ b/sources/plugins/indent/lang/bg.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'bg', { | ||
6 | indent: 'Увеличаване на отстъпа', | ||
7 | outdent: 'Намаляване на отстъпа' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/bn.js b/sources/plugins/indent/lang/bn.js new file mode 100644 index 0000000..11a428e --- /dev/null +++ b/sources/plugins/indent/lang/bn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'bn', { | ||
6 | indent: 'ইনডেন্ট বাড়াও', | ||
7 | outdent: 'ইনডেন্ট কমাও' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/bs.js b/sources/plugins/indent/lang/bs.js new file mode 100644 index 0000000..fcf1cc2 --- /dev/null +++ b/sources/plugins/indent/lang/bs.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'bs', { | ||
6 | indent: 'Poveæaj uvod', | ||
7 | outdent: 'Smanji uvod' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/ca.js b/sources/plugins/indent/lang/ca.js new file mode 100644 index 0000000..2ee7ad4 --- /dev/null +++ b/sources/plugins/indent/lang/ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'ca', { | ||
6 | indent: 'Augmenta el sagnat', | ||
7 | outdent: 'Redueix el sagnat' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/cs.js b/sources/plugins/indent/lang/cs.js new file mode 100644 index 0000000..3e5ed77 --- /dev/null +++ b/sources/plugins/indent/lang/cs.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'cs', { | ||
6 | indent: 'Zvětšit odsazení', | ||
7 | outdent: 'Zmenšit odsazení' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/cy.js b/sources/plugins/indent/lang/cy.js new file mode 100644 index 0000000..3380d70 --- /dev/null +++ b/sources/plugins/indent/lang/cy.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'cy', { | ||
6 | indent: 'Cynyddu\'r Mewnoliad', | ||
7 | outdent: 'Lleihau\'r Mewnoliad' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/da.js b/sources/plugins/indent/lang/da.js new file mode 100644 index 0000000..0f18d9a --- /dev/null +++ b/sources/plugins/indent/lang/da.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'da', { | ||
6 | indent: 'Forøg indrykning', | ||
7 | outdent: 'Formindsk indrykning' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/de-ch.js b/sources/plugins/indent/lang/de-ch.js new file mode 100644 index 0000000..ae8010b --- /dev/null +++ b/sources/plugins/indent/lang/de-ch.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'de-ch', { | ||
6 | indent: 'Einzug erhöhen', | ||
7 | outdent: 'Einzug verringern' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/de.js b/sources/plugins/indent/lang/de.js new file mode 100644 index 0000000..be211af --- /dev/null +++ b/sources/plugins/indent/lang/de.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'de', { | ||
6 | indent: 'Einzug erhöhen', | ||
7 | outdent: 'Einzug verringern' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/el.js b/sources/plugins/indent/lang/el.js new file mode 100644 index 0000000..e6df50c --- /dev/null +++ b/sources/plugins/indent/lang/el.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'el', { | ||
6 | indent: 'Αύξηση Εσοχής', | ||
7 | outdent: 'Μείωση Εσοχής' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/en-au.js b/sources/plugins/indent/lang/en-au.js new file mode 100644 index 0000000..26049a1 --- /dev/null +++ b/sources/plugins/indent/lang/en-au.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'en-au', { | ||
6 | indent: 'Increase Indent', | ||
7 | outdent: 'Decrease Indent' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/en-ca.js b/sources/plugins/indent/lang/en-ca.js new file mode 100644 index 0000000..cf67c87 --- /dev/null +++ b/sources/plugins/indent/lang/en-ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'en-ca', { | ||
6 | indent: 'Increase Indent', | ||
7 | outdent: 'Decrease Indent' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/en-gb.js b/sources/plugins/indent/lang/en-gb.js new file mode 100644 index 0000000..dd746c1 --- /dev/null +++ b/sources/plugins/indent/lang/en-gb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'en-gb', { | ||
6 | indent: 'Increase Indent', | ||
7 | outdent: 'Decrease Indent' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/en.js b/sources/plugins/indent/lang/en.js new file mode 100644 index 0000000..c3b968b --- /dev/null +++ b/sources/plugins/indent/lang/en.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'en', { | ||
6 | indent: 'Increase Indent', | ||
7 | outdent: 'Decrease Indent' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/eo.js b/sources/plugins/indent/lang/eo.js new file mode 100644 index 0000000..5955684 --- /dev/null +++ b/sources/plugins/indent/lang/eo.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'eo', { | ||
6 | indent: 'Pligrandigi Krommarĝenon', | ||
7 | outdent: 'Malpligrandigi Krommarĝenon' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/es.js b/sources/plugins/indent/lang/es.js new file mode 100644 index 0000000..277d048 --- /dev/null +++ b/sources/plugins/indent/lang/es.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'es', { | ||
6 | indent: 'Aumentar Sangría', | ||
7 | outdent: 'Disminuir Sangría' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/et.js b/sources/plugins/indent/lang/et.js new file mode 100644 index 0000000..aae3755 --- /dev/null +++ b/sources/plugins/indent/lang/et.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'et', { | ||
6 | indent: 'Taande suurendamine', | ||
7 | outdent: 'Taande vähendamine' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/eu.js b/sources/plugins/indent/lang/eu.js new file mode 100644 index 0000000..8e9a551 --- /dev/null +++ b/sources/plugins/indent/lang/eu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'eu', { | ||
6 | indent: 'Handitu koska', | ||
7 | outdent: 'Txikitu koska' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/fa.js b/sources/plugins/indent/lang/fa.js new file mode 100644 index 0000000..b17ce97 --- /dev/null +++ b/sources/plugins/indent/lang/fa.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'fa', { | ||
6 | indent: 'افزایش تورفتگی', | ||
7 | outdent: 'کاهش تورفتگی' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/fi.js b/sources/plugins/indent/lang/fi.js new file mode 100644 index 0000000..068452c --- /dev/null +++ b/sources/plugins/indent/lang/fi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'fi', { | ||
6 | indent: 'Suurenna sisennystä', | ||
7 | outdent: 'Pienennä sisennystä' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/fo.js b/sources/plugins/indent/lang/fo.js new file mode 100644 index 0000000..1763927 --- /dev/null +++ b/sources/plugins/indent/lang/fo.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'fo', { | ||
6 | indent: 'Økja reglubrotarinntriv', | ||
7 | outdent: 'Minka reglubrotarinntriv' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/fr-ca.js b/sources/plugins/indent/lang/fr-ca.js new file mode 100644 index 0000000..029e878 --- /dev/null +++ b/sources/plugins/indent/lang/fr-ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'fr-ca', { | ||
6 | indent: 'Augmenter le retrait', | ||
7 | outdent: 'Diminuer le retrait' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/fr.js b/sources/plugins/indent/lang/fr.js new file mode 100644 index 0000000..c0ad5fe --- /dev/null +++ b/sources/plugins/indent/lang/fr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'fr', { | ||
6 | indent: 'Augmenter le retrait (tabulation)', | ||
7 | outdent: 'Diminuer le retrait (tabulation)' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/gl.js b/sources/plugins/indent/lang/gl.js new file mode 100644 index 0000000..3d4a3af --- /dev/null +++ b/sources/plugins/indent/lang/gl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'gl', { | ||
6 | indent: 'Aumentar a sangría', | ||
7 | outdent: 'Reducir a sangría' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/gu.js b/sources/plugins/indent/lang/gu.js new file mode 100644 index 0000000..84f02c0 --- /dev/null +++ b/sources/plugins/indent/lang/gu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'gu', { | ||
6 | indent: 'ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી', | ||
7 | outdent: 'ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/he.js b/sources/plugins/indent/lang/he.js new file mode 100644 index 0000000..26a6626 --- /dev/null +++ b/sources/plugins/indent/lang/he.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'he', { | ||
6 | indent: 'הגדלת הזחה', | ||
7 | outdent: 'הקטנת הזחה' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/hi.js b/sources/plugins/indent/lang/hi.js new file mode 100644 index 0000000..a532d64 --- /dev/null +++ b/sources/plugins/indent/lang/hi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'hi', { | ||
6 | indent: 'इन्डॅन्ट बढ़ायें', | ||
7 | outdent: 'इन्डॅन्ट कम करें' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/hr.js b/sources/plugins/indent/lang/hr.js new file mode 100644 index 0000000..b4c0764 --- /dev/null +++ b/sources/plugins/indent/lang/hr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'hr', { | ||
6 | indent: 'Pomakni udesno', | ||
7 | outdent: 'Pomakni ulijevo' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/hu.js b/sources/plugins/indent/lang/hu.js new file mode 100644 index 0000000..b8f780d --- /dev/null +++ b/sources/plugins/indent/lang/hu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'hu', { | ||
6 | indent: 'Behúzás növelése', | ||
7 | outdent: 'Behúzás csökkentése' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/id.js b/sources/plugins/indent/lang/id.js new file mode 100644 index 0000000..7bb5efb --- /dev/null +++ b/sources/plugins/indent/lang/id.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'id', { | ||
6 | indent: 'Tingkatkan Lekuk', | ||
7 | outdent: 'Kurangi Lekuk' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/is.js b/sources/plugins/indent/lang/is.js new file mode 100644 index 0000000..9ced9f4 --- /dev/null +++ b/sources/plugins/indent/lang/is.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'is', { | ||
6 | indent: 'Minnka inndrátt', | ||
7 | outdent: 'Auka inndrátt' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/it.js b/sources/plugins/indent/lang/it.js new file mode 100644 index 0000000..aaffe67 --- /dev/null +++ b/sources/plugins/indent/lang/it.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'it', { | ||
6 | indent: 'Aumenta rientro', | ||
7 | outdent: 'Riduci rientro' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/ja.js b/sources/plugins/indent/lang/ja.js new file mode 100644 index 0000000..0ac03e9 --- /dev/null +++ b/sources/plugins/indent/lang/ja.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'ja', { | ||
6 | indent: 'インデント', | ||
7 | outdent: 'インデント解除' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/ka.js b/sources/plugins/indent/lang/ka.js new file mode 100644 index 0000000..9e95b2a --- /dev/null +++ b/sources/plugins/indent/lang/ka.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'ka', { | ||
6 | indent: 'მეტად შეწევა', | ||
7 | outdent: 'ნაკლებად შეწევა' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/km.js b/sources/plugins/indent/lang/km.js new file mode 100644 index 0000000..11feba1 --- /dev/null +++ b/sources/plugins/indent/lang/km.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'km', { | ||
6 | indent: 'បន្ថែមការចូលបន្ទាត់', | ||
7 | outdent: 'បន្ថយការចូលបន្ទាត់' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/ko.js b/sources/plugins/indent/lang/ko.js new file mode 100644 index 0000000..847528a --- /dev/null +++ b/sources/plugins/indent/lang/ko.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'ko', { | ||
6 | indent: '들여쓰기', | ||
7 | outdent: '내어쓰기' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/ku.js b/sources/plugins/indent/lang/ku.js new file mode 100644 index 0000000..d373698 --- /dev/null +++ b/sources/plugins/indent/lang/ku.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'ku', { | ||
6 | indent: 'زیادکردنی بۆشایی', | ||
7 | outdent: 'کەمکردنەوەی بۆشایی' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/lt.js b/sources/plugins/indent/lang/lt.js new file mode 100644 index 0000000..7677587 --- /dev/null +++ b/sources/plugins/indent/lang/lt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'lt', { | ||
6 | indent: 'Padidinti įtrauką', | ||
7 | outdent: 'Sumažinti įtrauką' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/lv.js b/sources/plugins/indent/lang/lv.js new file mode 100644 index 0000000..348b5ec --- /dev/null +++ b/sources/plugins/indent/lang/lv.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'lv', { | ||
6 | indent: 'Palielināt atkāpi', | ||
7 | outdent: 'Samazināt atkāpi' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/mk.js b/sources/plugins/indent/lang/mk.js new file mode 100644 index 0000000..f4071a0 --- /dev/null +++ b/sources/plugins/indent/lang/mk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'mk', { | ||
6 | indent: 'Increase Indent', // MISSING | ||
7 | outdent: 'Decrease Indent' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/mn.js b/sources/plugins/indent/lang/mn.js new file mode 100644 index 0000000..f1f1790 --- /dev/null +++ b/sources/plugins/indent/lang/mn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'mn', { | ||
6 | indent: 'Догол мөр хасах', | ||
7 | outdent: 'Догол мөр нэмэх' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/ms.js b/sources/plugins/indent/lang/ms.js new file mode 100644 index 0000000..6b633fe --- /dev/null +++ b/sources/plugins/indent/lang/ms.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'ms', { | ||
6 | indent: 'Tambahkan Inden', | ||
7 | outdent: 'Kurangkan Inden' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/nb.js b/sources/plugins/indent/lang/nb.js new file mode 100644 index 0000000..83cec71 --- /dev/null +++ b/sources/plugins/indent/lang/nb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'nb', { | ||
6 | indent: 'Øk innrykk', | ||
7 | outdent: 'Reduser innrykk' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/nl.js b/sources/plugins/indent/lang/nl.js new file mode 100644 index 0000000..9897f73 --- /dev/null +++ b/sources/plugins/indent/lang/nl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'nl', { | ||
6 | indent: 'Inspringing vergroten', | ||
7 | outdent: 'Inspringing verkleinen' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/no.js b/sources/plugins/indent/lang/no.js new file mode 100644 index 0000000..1ef07dd --- /dev/null +++ b/sources/plugins/indent/lang/no.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'no', { | ||
6 | indent: 'Øk innrykk', | ||
7 | outdent: 'Reduser innrykk' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/pl.js b/sources/plugins/indent/lang/pl.js new file mode 100644 index 0000000..3fc7978 --- /dev/null +++ b/sources/plugins/indent/lang/pl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'pl', { | ||
6 | indent: 'Zwiększ wcięcie', | ||
7 | outdent: 'Zmniejsz wcięcie' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/pt-br.js b/sources/plugins/indent/lang/pt-br.js new file mode 100644 index 0000000..0a02f0b --- /dev/null +++ b/sources/plugins/indent/lang/pt-br.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'pt-br', { | ||
6 | indent: 'Aumentar Recuo', | ||
7 | outdent: 'Diminuir Recuo' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/pt.js b/sources/plugins/indent/lang/pt.js new file mode 100644 index 0000000..1424b11 --- /dev/null +++ b/sources/plugins/indent/lang/pt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'pt', { | ||
6 | indent: 'Aumentar Avanço', | ||
7 | outdent: 'Diminuir Avanço' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/ro.js b/sources/plugins/indent/lang/ro.js new file mode 100644 index 0000000..51155b6 --- /dev/null +++ b/sources/plugins/indent/lang/ro.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'ro', { | ||
6 | indent: 'Creşte indentarea', | ||
7 | outdent: 'Scade indentarea' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/ru.js b/sources/plugins/indent/lang/ru.js new file mode 100644 index 0000000..4baa294 --- /dev/null +++ b/sources/plugins/indent/lang/ru.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'ru', { | ||
6 | indent: 'Увеличить отступ', | ||
7 | outdent: 'Уменьшить отступ' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/si.js b/sources/plugins/indent/lang/si.js new file mode 100644 index 0000000..1d38458 --- /dev/null +++ b/sources/plugins/indent/lang/si.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'si', { | ||
6 | indent: 'අතර පරතරය වැඩිකරන්න', | ||
7 | outdent: 'අතර පරතරය අඩුකරන්න' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/sk.js b/sources/plugins/indent/lang/sk.js new file mode 100644 index 0000000..f50d6d7 --- /dev/null +++ b/sources/plugins/indent/lang/sk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'sk', { | ||
6 | indent: 'Zväčšiť odsadenie', | ||
7 | outdent: 'Zmenšiť odsadenie' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/sl.js b/sources/plugins/indent/lang/sl.js new file mode 100644 index 0000000..0a81f97 --- /dev/null +++ b/sources/plugins/indent/lang/sl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'sl', { | ||
6 | indent: 'Povečaj zamik', | ||
7 | outdent: 'Zmanjšaj zamik' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/sq.js b/sources/plugins/indent/lang/sq.js new file mode 100644 index 0000000..85c4795 --- /dev/null +++ b/sources/plugins/indent/lang/sq.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'sq', { | ||
6 | indent: 'Rrite Identin', | ||
7 | outdent: 'Zvogëlo Identin' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/sr-latn.js b/sources/plugins/indent/lang/sr-latn.js new file mode 100644 index 0000000..d930020 --- /dev/null +++ b/sources/plugins/indent/lang/sr-latn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'sr-latn', { | ||
6 | indent: 'Uvećaj levu marginu', | ||
7 | outdent: 'Smanji levu marginu' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/sr.js b/sources/plugins/indent/lang/sr.js new file mode 100644 index 0000000..d0077fb --- /dev/null +++ b/sources/plugins/indent/lang/sr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'sr', { | ||
6 | indent: 'Увећај леву маргину', | ||
7 | outdent: 'Смањи леву маргину' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/sv.js b/sources/plugins/indent/lang/sv.js new file mode 100644 index 0000000..dd92d3a --- /dev/null +++ b/sources/plugins/indent/lang/sv.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'sv', { | ||
6 | indent: 'Öka indrag', | ||
7 | outdent: 'Minska indrag' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/th.js b/sources/plugins/indent/lang/th.js new file mode 100644 index 0000000..2aebdad --- /dev/null +++ b/sources/plugins/indent/lang/th.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'th', { | ||
6 | indent: 'เพิ่มระยะย่อหน้า', | ||
7 | outdent: 'ลดระยะย่อหน้า' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/tr.js b/sources/plugins/indent/lang/tr.js new file mode 100644 index 0000000..06a1910 --- /dev/null +++ b/sources/plugins/indent/lang/tr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'tr', { | ||
6 | indent: 'Sekme Arttır', | ||
7 | outdent: 'Sekme Azalt' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/tt.js b/sources/plugins/indent/lang/tt.js new file mode 100644 index 0000000..79e6c27 --- /dev/null +++ b/sources/plugins/indent/lang/tt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'tt', { | ||
6 | indent: 'Отступны арттыру', | ||
7 | outdent: 'Отступны кечерәйтү' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/ug.js b/sources/plugins/indent/lang/ug.js new file mode 100644 index 0000000..7f881d2 --- /dev/null +++ b/sources/plugins/indent/lang/ug.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'ug', { | ||
6 | indent: 'تارايت', | ||
7 | outdent: 'كەڭەيت' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/uk.js b/sources/plugins/indent/lang/uk.js new file mode 100644 index 0000000..4251ebe --- /dev/null +++ b/sources/plugins/indent/lang/uk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'uk', { | ||
6 | indent: 'Збільшити відступ', | ||
7 | outdent: 'Зменшити відступ' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/vi.js b/sources/plugins/indent/lang/vi.js new file mode 100644 index 0000000..0b56e84 --- /dev/null +++ b/sources/plugins/indent/lang/vi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'vi', { | ||
6 | indent: 'Dịch vào trong', | ||
7 | outdent: 'Dịch ra ngoài' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/zh-cn.js b/sources/plugins/indent/lang/zh-cn.js new file mode 100644 index 0000000..c06b21b --- /dev/null +++ b/sources/plugins/indent/lang/zh-cn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'zh-cn', { | ||
6 | indent: '增加缩进量', | ||
7 | outdent: '减少缩进量' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/lang/zh.js b/sources/plugins/indent/lang/zh.js new file mode 100644 index 0000000..1fe6e4e --- /dev/null +++ b/sources/plugins/indent/lang/zh.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'indent', 'zh', { | ||
6 | indent: '增加縮排', | ||
7 | outdent: '減少縮排' | ||
8 | } ); | ||
diff --git a/sources/plugins/indent/plugin.js b/sources/plugins/indent/plugin.js new file mode 100644 index 0000000..32ac0c4 --- /dev/null +++ b/sources/plugins/indent/plugin.js | |||
@@ -0,0 +1,461 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview Increase and Decrease Indent commands. | ||
8 | */ | ||
9 | |||
10 | ( function() { | ||
11 | 'use strict'; | ||
12 | |||
13 | var TRISTATE_DISABLED = CKEDITOR.TRISTATE_DISABLED, | ||
14 | TRISTATE_OFF = CKEDITOR.TRISTATE_OFF; | ||
15 | |||
16 | CKEDITOR.plugins.add( 'indent', { | ||
17 | // jscs:disable maximumLineLength | ||
18 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
19 | // jscs:enable maximumLineLength | ||
20 | icons: 'indent,indent-rtl,outdent,outdent-rtl', // %REMOVE_LINE_CORE% | ||
21 | hidpi: true, // %REMOVE_LINE_CORE% | ||
22 | |||
23 | init: function( editor ) { | ||
24 | var genericDefinition = CKEDITOR.plugins.indent.genericDefinition; | ||
25 | |||
26 | // Register generic commands. | ||
27 | setupGenericListeners( editor, editor.addCommand( 'indent', new genericDefinition( true ) ) ); | ||
28 | setupGenericListeners( editor, editor.addCommand( 'outdent', new genericDefinition() ) ); | ||
29 | |||
30 | // Create and register toolbar button if possible. | ||
31 | if ( editor.ui.addButton ) { | ||
32 | editor.ui.addButton( 'Indent', { | ||
33 | label: editor.lang.indent.indent, | ||
34 | command: 'indent', | ||
35 | directional: true, | ||
36 | toolbar: 'indent,20' | ||
37 | } ); | ||
38 | |||
39 | editor.ui.addButton( 'Outdent', { | ||
40 | label: editor.lang.indent.outdent, | ||
41 | command: 'outdent', | ||
42 | directional: true, | ||
43 | toolbar: 'indent,10' | ||
44 | } ); | ||
45 | } | ||
46 | |||
47 | // Register dirChanged listener. | ||
48 | editor.on( 'dirChanged', function( evt ) { | ||
49 | var range = editor.createRange(), | ||
50 | dataNode = evt.data.node; | ||
51 | |||
52 | range.setStartBefore( dataNode ); | ||
53 | range.setEndAfter( dataNode ); | ||
54 | |||
55 | var walker = new CKEDITOR.dom.walker( range ), | ||
56 | node; | ||
57 | |||
58 | while ( ( node = walker.next() ) ) { | ||
59 | if ( node.type == CKEDITOR.NODE_ELEMENT ) { | ||
60 | // A child with the defined dir is to be ignored. | ||
61 | if ( !node.equals( dataNode ) && node.getDirection() ) { | ||
62 | range.setStartAfter( node ); | ||
63 | walker = new CKEDITOR.dom.walker( range ); | ||
64 | continue; | ||
65 | } | ||
66 | |||
67 | // Switch alignment classes. | ||
68 | var classes = editor.config.indentClasses; | ||
69 | if ( classes ) { | ||
70 | var suffix = ( evt.data.dir == 'ltr' ) ? [ '_rtl', '' ] : [ '', '_rtl' ]; | ||
71 | for ( var i = 0; i < classes.length; i++ ) { | ||
72 | if ( node.hasClass( classes[ i ] + suffix[ 0 ] ) ) { | ||
73 | node.removeClass( classes[ i ] + suffix[ 0 ] ); | ||
74 | node.addClass( classes[ i ] + suffix[ 1 ] ); | ||
75 | } | ||
76 | } | ||
77 | } | ||
78 | |||
79 | // Switch the margins. | ||
80 | var marginLeft = node.getStyle( 'margin-right' ), | ||
81 | marginRight = node.getStyle( 'margin-left' ); | ||
82 | |||
83 | marginLeft ? node.setStyle( 'margin-left', marginLeft ) : node.removeStyle( 'margin-left' ); | ||
84 | marginRight ? node.setStyle( 'margin-right', marginRight ) : node.removeStyle( 'margin-right' ); | ||
85 | } | ||
86 | } | ||
87 | } ); | ||
88 | } | ||
89 | } ); | ||
90 | |||
91 | /** | ||
92 | * Global command class definitions and global helpers. | ||
93 | * | ||
94 | * @class | ||
95 | * @singleton | ||
96 | */ | ||
97 | CKEDITOR.plugins.indent = { | ||
98 | /** | ||
99 | * A base class for a generic command definition, responsible mainly for creating | ||
100 | * Increase Indent and Decrease Indent toolbar buttons as well as for refreshing | ||
101 | * UI states. | ||
102 | * | ||
103 | * Commands of this class do not perform any indentation by themselves. They | ||
104 | * delegate this job to content-specific indentation commands (i.e. indentlist). | ||
105 | * | ||
106 | * @class CKEDITOR.plugins.indent.genericDefinition | ||
107 | * @extends CKEDITOR.commandDefinition | ||
108 | * @param {CKEDITOR.editor} editor The editor instance this command will be | ||
109 | * applied to. | ||
110 | * @param {String} name The name of the command. | ||
111 | * @param {Boolean} [isIndent] Defines the command as indenting or outdenting. | ||
112 | */ | ||
113 | genericDefinition: function( isIndent ) { | ||
114 | /** | ||
115 | * Determines whether the command belongs to the indentation family. | ||
116 | * Otherwise it is assumed to be an outdenting command. | ||
117 | * | ||
118 | * @readonly | ||
119 | * @property {Boolean} [=false] | ||
120 | */ | ||
121 | this.isIndent = !!isIndent; | ||
122 | |||
123 | // Mimic naive startDisabled behavior for outdent. | ||
124 | this.startDisabled = !this.isIndent; | ||
125 | }, | ||
126 | |||
127 | /** | ||
128 | * A base class for specific indentation command definitions responsible for | ||
129 | * handling a pre-defined set of elements i.e. indentlist for lists or | ||
130 | * indentblock for text block elements. | ||
131 | * | ||
132 | * Commands of this class perform indentation operations and modify the DOM structure. | ||
133 | * They listen for events fired by {@link CKEDITOR.plugins.indent.genericDefinition} | ||
134 | * and execute defined actions. | ||
135 | * | ||
136 | * **NOTE**: This is not an {@link CKEDITOR.command editor command}. | ||
137 | * Context-specific commands are internal, for indentation system only. | ||
138 | * | ||
139 | * @class CKEDITOR.plugins.indent.specificDefinition | ||
140 | * @param {CKEDITOR.editor} editor The editor instance this command will be | ||
141 | * applied to. | ||
142 | * @param {String} name The name of the command. | ||
143 | * @param {Boolean} [isIndent] Defines the command as indenting or outdenting. | ||
144 | */ | ||
145 | specificDefinition: function( editor, name, isIndent ) { | ||
146 | this.name = name; | ||
147 | this.editor = editor; | ||
148 | |||
149 | /** | ||
150 | * An object of jobs handled by the command. Each job consists | ||
151 | * of two functions: `refresh` and `exec` as well as the execution priority. | ||
152 | * | ||
153 | * * The `refresh` function determines whether a job is doable for | ||
154 | * a particular context. These functions are executed in the | ||
155 | * order of priorities, one by one, for all plugins that registered | ||
156 | * jobs. As jobs are related to generic commands, refreshing | ||
157 | * occurs when the global command is firing the `refresh` event. | ||
158 | * | ||
159 | * **Note**: This function must return either {@link CKEDITOR#TRISTATE_DISABLED} | ||
160 | * or {@link CKEDITOR#TRISTATE_OFF}. | ||
161 | * | ||
162 | * * The `exec` function modifies the DOM if possible. Just like | ||
163 | * `refresh`, `exec` functions are executed in the order of priorities | ||
164 | * while the generic command is executed. This function is not executed | ||
165 | * if `refresh` for this job returned {@link CKEDITOR#TRISTATE_DISABLED}. | ||
166 | * | ||
167 | * **Note**: This function must return a Boolean value, indicating whether it | ||
168 | * was successful. If a job was successful, then no other jobs are being executed. | ||
169 | * | ||
170 | * Sample definition: | ||
171 | * | ||
172 | * command.jobs = { | ||
173 | * // Priority = 20. | ||
174 | * '20': { | ||
175 | * refresh( editor, path ) { | ||
176 | * if ( condition ) | ||
177 | * return CKEDITOR.TRISTATE_OFF; | ||
178 | * else | ||
179 | * return CKEDITOR.TRISTATE_DISABLED; | ||
180 | * }, | ||
181 | * exec( editor ) { | ||
182 | * // DOM modified! This was OK. | ||
183 | * return true; | ||
184 | * } | ||
185 | * }, | ||
186 | * // Priority = 60. This job is done later. | ||
187 | * '60': { | ||
188 | * // Another job. | ||
189 | * } | ||
190 | * }; | ||
191 | * | ||
192 | * For additional information, please check comments for | ||
193 | * the `setupGenericListeners` function. | ||
194 | * | ||
195 | * @readonly | ||
196 | * @property {Object} [={}] | ||
197 | */ | ||
198 | this.jobs = {}; | ||
199 | |||
200 | /** | ||
201 | * Determines whether the editor that the command belongs to has | ||
202 | * {@link CKEDITOR.config#enterMode config.enterMode} set to {@link CKEDITOR#ENTER_BR}. | ||
203 | * | ||
204 | * @readonly | ||
205 | * @see CKEDITOR.config#enterMode | ||
206 | * @property {Boolean} [=false] | ||
207 | */ | ||
208 | this.enterBr = editor.config.enterMode == CKEDITOR.ENTER_BR; | ||
209 | |||
210 | /** | ||
211 | * Determines whether the command belongs to the indentation family. | ||
212 | * Otherwise it is assumed to be an outdenting command. | ||
213 | * | ||
214 | * @readonly | ||
215 | * @property {Boolean} [=false] | ||
216 | */ | ||
217 | this.isIndent = !!isIndent; | ||
218 | |||
219 | /** | ||
220 | * The name of the global command related to this one. | ||
221 | * | ||
222 | * @readonly | ||
223 | */ | ||
224 | this.relatedGlobal = isIndent ? 'indent' : 'outdent'; | ||
225 | |||
226 | /** | ||
227 | * A keystroke associated with this command (*Tab* or *Shift+Tab*). | ||
228 | * | ||
229 | * @readonly | ||
230 | */ | ||
231 | this.indentKey = isIndent ? 9 : CKEDITOR.SHIFT + 9; | ||
232 | |||
233 | /** | ||
234 | * Stores created markers for the command so they can eventually be | ||
235 | * purged after the `exec` function is run. | ||
236 | */ | ||
237 | this.database = {}; | ||
238 | }, | ||
239 | |||
240 | /** | ||
241 | * Registers content-specific commands as a part of the indentation system | ||
242 | * directed by generic commands. Once a command is registered, | ||
243 | * it listens for events of a related generic command. | ||
244 | * | ||
245 | * CKEDITOR.plugins.indent.registerCommands( editor, { | ||
246 | * 'indentlist': new indentListCommand( editor, 'indentlist' ), | ||
247 | * 'outdentlist': new indentListCommand( editor, 'outdentlist' ) | ||
248 | * } ); | ||
249 | * | ||
250 | * Content-specific commands listen for the generic command's `exec` and | ||
251 | * try to execute their own jobs, one after another. If some execution is | ||
252 | * successful, `evt.data.done` is set so no more jobs (commands) are involved. | ||
253 | * | ||
254 | * Content-specific commands also listen for the generic command's `refresh` | ||
255 | * and fill the `evt.data.states` object with states of jobs. A generic command | ||
256 | * uses this data to determine its own state and to update the UI. | ||
257 | * | ||
258 | * @member CKEDITOR.plugins.indent | ||
259 | * @param {CKEDITOR.editor} editor The editor instance this command is | ||
260 | * applied to. | ||
261 | * @param {Object} commands An object of {@link CKEDITOR.command}. | ||
262 | */ | ||
263 | registerCommands: function( editor, commands ) { | ||
264 | editor.on( 'pluginsLoaded', function() { | ||
265 | for ( var name in commands ) { | ||
266 | ( function( editor, command ) { | ||
267 | var relatedGlobal = editor.getCommand( command.relatedGlobal ); | ||
268 | |||
269 | for ( var priority in command.jobs ) { | ||
270 | // Observe generic exec event and execute command when necessary. | ||
271 | // If the command was successfully handled by the command and | ||
272 | // DOM has been modified, stop event propagation so no other plugin | ||
273 | // will bother. Job is done. | ||
274 | relatedGlobal.on( 'exec', function( evt ) { | ||
275 | if ( evt.data.done ) | ||
276 | return; | ||
277 | |||
278 | // Make sure that anything this command will do is invisible | ||
279 | // for undoManager. What undoManager only can see and | ||
280 | // remember is the execution of the global command (relatedGlobal). | ||
281 | editor.fire( 'lockSnapshot' ); | ||
282 | |||
283 | if ( command.execJob( editor, priority ) ) | ||
284 | evt.data.done = true; | ||
285 | |||
286 | editor.fire( 'unlockSnapshot' ); | ||
287 | |||
288 | // Clean up the markers. | ||
289 | CKEDITOR.dom.element.clearAllMarkers( command.database ); | ||
290 | }, this, null, priority ); | ||
291 | |||
292 | // Observe generic refresh event and force command refresh. | ||
293 | // Once refreshed, save command state in event data | ||
294 | // so generic command plugin can update its own state and UI. | ||
295 | relatedGlobal.on( 'refresh', function( evt ) { | ||
296 | if ( !evt.data.states ) | ||
297 | evt.data.states = {}; | ||
298 | |||
299 | evt.data.states[ command.name + '@' + priority ] = | ||
300 | command.refreshJob( editor, priority, evt.data.path ); | ||
301 | }, this, null, priority ); | ||
302 | } | ||
303 | |||
304 | // Since specific indent commands have no UI elements, | ||
305 | // they need to be manually registered as a editor feature. | ||
306 | editor.addFeature( command ); | ||
307 | } )( this, commands[ name ] ); | ||
308 | } | ||
309 | } ); | ||
310 | } | ||
311 | }; | ||
312 | |||
313 | CKEDITOR.plugins.indent.genericDefinition.prototype = { | ||
314 | context: 'p', | ||
315 | |||
316 | exec: function() {} | ||
317 | }; | ||
318 | |||
319 | CKEDITOR.plugins.indent.specificDefinition.prototype = { | ||
320 | /** | ||
321 | * Executes the content-specific procedure if the context is correct. | ||
322 | * It calls the `exec` function of a job of the given `priority` | ||
323 | * that modifies the DOM. | ||
324 | * | ||
325 | * @param {CKEDITOR.editor} editor The editor instance this command | ||
326 | * will be applied to. | ||
327 | * @param {Number} priority The priority of the job to be executed. | ||
328 | * @returns {Boolean} Indicates whether the job was successful. | ||
329 | */ | ||
330 | execJob: function( editor, priority ) { | ||
331 | var job = this.jobs[ priority ]; | ||
332 | |||
333 | if ( job.state != TRISTATE_DISABLED ) | ||
334 | return job.exec.call( this, editor ); | ||
335 | }, | ||
336 | |||
337 | /** | ||
338 | * Calls the `refresh` function of a job of the given `priority`. | ||
339 | * The function returns the state of the job which can be either | ||
340 | * {@link CKEDITOR#TRISTATE_DISABLED} or {@link CKEDITOR#TRISTATE_OFF}. | ||
341 | * | ||
342 | * @param {CKEDITOR.editor} editor The editor instance this command | ||
343 | * will be applied to. | ||
344 | * @param {Number} priority The priority of the job to be executed. | ||
345 | * @returns {Number} The state of the job. | ||
346 | */ | ||
347 | refreshJob: function( editor, priority, path ) { | ||
348 | var job = this.jobs[ priority ]; | ||
349 | |||
350 | if ( !editor.activeFilter.checkFeature( this ) ) | ||
351 | job.state = TRISTATE_DISABLED; | ||
352 | else | ||
353 | job.state = job.refresh.call( this, editor, path ); | ||
354 | |||
355 | return job.state; | ||
356 | }, | ||
357 | |||
358 | /** | ||
359 | * Checks if the element path contains the element handled | ||
360 | * by this indentation command. | ||
361 | * | ||
362 | * @param {CKEDITOR.dom.elementPath} node A path to be checked. | ||
363 | * @returns {CKEDITOR.dom.element} | ||
364 | */ | ||
365 | getContext: function( path ) { | ||
366 | return path.contains( this.context ); | ||
367 | } | ||
368 | }; | ||
369 | |||
370 | /** | ||
371 | * Attaches event listeners for this generic command. Since the indentation | ||
372 | * system is event-oriented, generic commands communicate with | ||
373 | * content-specific commands using the `exec` and `refresh` events. | ||
374 | * | ||
375 | * Listener priorities are crucial. Different indentation phases | ||
376 | * are executed with different priorities. | ||
377 | * | ||
378 | * For the `exec` event: | ||
379 | * | ||
380 | * * 0: Selection and bookmarks are saved by the generic command. | ||
381 | * * 1-99: Content-specific commands try to indent the code by executing | ||
382 | * their own jobs ({@link CKEDITOR.plugins.indent.specificDefinition#jobs}). | ||
383 | * * 100: Bookmarks are re-selected by the generic command. | ||
384 | * | ||
385 | * The visual interpretation looks as follows: | ||
386 | * | ||
387 | * +------------------+ | ||
388 | * | Exec event fired | | ||
389 | * +------ + ---------+ | ||
390 | * | | ||
391 | * 0 -<----------+ Selection and bookmarks saved. | ||
392 | * | | ||
393 | * | | ||
394 | * 25 -<---+ Exec 1st job of plugin#1 (return false, continuing...). | ||
395 | * | | ||
396 | * | | ||
397 | * 50 -<---+ Exec 1st job of plugin#2 (return false, continuing...). | ||
398 | * | | ||
399 | * | | ||
400 | * 75 -<---+ Exec 2nd job of plugin#1 (only if plugin#2 failed). | ||
401 | * | | ||
402 | * | | ||
403 | * 100 -<-----------+ Re-select bookmarks, clean-up. | ||
404 | * | | ||
405 | * +-------- v ----------+ | ||
406 | * | Exec event finished | | ||
407 | * +---------------------+ | ||
408 | * | ||
409 | * For the `refresh` event: | ||
410 | * | ||
411 | * * <100: Content-specific commands refresh their job states according | ||
412 | * to the given path. Jobs save their states in the `evt.data.states` object | ||
413 | * passed along with the event. This can be either {@link CKEDITOR#TRISTATE_DISABLED} | ||
414 | * or {@link CKEDITOR#TRISTATE_OFF}. | ||
415 | * * 100: Command state is determined according to what states | ||
416 | * have been returned by content-specific jobs (`evt.data.states`). | ||
417 | * UI elements are updated at this stage. | ||
418 | * | ||
419 | * **Note**: If there is at least one job with the {@link CKEDITOR#TRISTATE_OFF} state, | ||
420 | * then the generic command state is also {@link CKEDITOR#TRISTATE_OFF}. Otherwise, | ||
421 | * the command state is {@link CKEDITOR#TRISTATE_DISABLED}. | ||
422 | * | ||
423 | * @param {CKEDITOR.command} command The command to be set up. | ||
424 | * @private | ||
425 | */ | ||
426 | function setupGenericListeners( editor, command ) { | ||
427 | var selection, bookmarks; | ||
428 | |||
429 | // Set the command state according to content-specific | ||
430 | // command states. | ||
431 | command.on( 'refresh', function( evt ) { | ||
432 | // If no state comes with event data, disable command. | ||
433 | var states = [ TRISTATE_DISABLED ]; | ||
434 | |||
435 | for ( var s in evt.data.states ) | ||
436 | states.push( evt.data.states[ s ] ); | ||
437 | |||
438 | this.setState( CKEDITOR.tools.search( states, TRISTATE_OFF ) ? TRISTATE_OFF : TRISTATE_DISABLED ); | ||
439 | }, command, null, 100 ); | ||
440 | |||
441 | // Initialization. Save bookmarks and mark event as not handled | ||
442 | // by any plugin (command) yet. | ||
443 | command.on( 'exec', function( evt ) { | ||
444 | selection = editor.getSelection(); | ||
445 | bookmarks = selection.createBookmarks( 1 ); | ||
446 | |||
447 | // Mark execution as not handled yet. | ||
448 | if ( !evt.data ) | ||
449 | evt.data = {}; | ||
450 | |||
451 | evt.data.done = false; | ||
452 | }, command, null, 0 ); | ||
453 | |||
454 | // Housekeeping. Make sure selectionChange will be called. | ||
455 | // Also re-select previously saved bookmarks. | ||
456 | command.on( 'exec', function() { | ||
457 | editor.forceNextSelectionCheck(); | ||
458 | selection.selectBookmarks( bookmarks ); | ||
459 | }, command, null, 100 ); | ||
460 | } | ||
461 | } )(); | ||
diff --git a/sources/plugins/indentblock/plugin.js b/sources/plugins/indentblock/plugin.js new file mode 100644 index 0000000..9d31b98 --- /dev/null +++ b/sources/plugins/indentblock/plugin.js | |||
@@ -0,0 +1,298 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview Handles the indentation of block elements. | ||
8 | */ | ||
9 | |||
10 | ( function() { | ||
11 | 'use strict'; | ||
12 | |||
13 | var $listItem = CKEDITOR.dtd.$listItem, | ||
14 | $list = CKEDITOR.dtd.$list, | ||
15 | TRISTATE_DISABLED = CKEDITOR.TRISTATE_DISABLED, | ||
16 | TRISTATE_OFF = CKEDITOR.TRISTATE_OFF; | ||
17 | |||
18 | CKEDITOR.plugins.add( 'indentblock', { | ||
19 | requires: 'indent', | ||
20 | init: function( editor ) { | ||
21 | var globalHelpers = CKEDITOR.plugins.indent, | ||
22 | classes = editor.config.indentClasses; | ||
23 | |||
24 | // Register commands. | ||
25 | globalHelpers.registerCommands( editor, { | ||
26 | indentblock: new commandDefinition( editor, 'indentblock', true ), | ||
27 | outdentblock: new commandDefinition( editor, 'outdentblock' ) | ||
28 | } ); | ||
29 | |||
30 | function commandDefinition() { | ||
31 | globalHelpers.specificDefinition.apply( this, arguments ); | ||
32 | |||
33 | this.allowedContent = { | ||
34 | 'div h1 h2 h3 h4 h5 h6 ol p pre ul': { | ||
35 | // Do not add elements, but only text-align style if element is validated by other rule. | ||
36 | propertiesOnly: true, | ||
37 | styles: !classes ? 'margin-left,margin-right' : null, | ||
38 | classes: classes || null | ||
39 | } | ||
40 | }; | ||
41 | |||
42 | if ( this.enterBr ) | ||
43 | this.allowedContent.div = true; | ||
44 | |||
45 | this.requiredContent = ( this.enterBr ? 'div' : 'p' ) + | ||
46 | ( classes ? '(' + classes.join( ',' ) + ')' : '{margin-left}' ); | ||
47 | |||
48 | this.jobs = { | ||
49 | '20': { | ||
50 | refresh: function( editor, path ) { | ||
51 | var firstBlock = path.block || path.blockLimit; | ||
52 | |||
53 | // Switch context from somewhere inside list item to list item, | ||
54 | // if not found just assign self (doing nothing). | ||
55 | if ( !firstBlock.is( $listItem ) ) { | ||
56 | var ascendant = firstBlock.getAscendant( $listItem ); | ||
57 | |||
58 | firstBlock = ( ascendant && path.contains( ascendant ) ) || firstBlock; | ||
59 | } | ||
60 | |||
61 | // Switch context from list item to list | ||
62 | // because indentblock can indent entire list | ||
63 | // but not a single list element. | ||
64 | |||
65 | if ( firstBlock.is( $listItem ) ) | ||
66 | firstBlock = firstBlock.getParent(); | ||
67 | |||
68 | // [-] Context in the path or ENTER_BR | ||
69 | // | ||
70 | // Don't try to indent if the element is out of | ||
71 | // this plugin's scope. This assertion is omitted | ||
72 | // if ENTER_BR is in use since there may be no block | ||
73 | // in the path. | ||
74 | |||
75 | if ( !this.enterBr && !this.getContext( path ) ) | ||
76 | return TRISTATE_DISABLED; | ||
77 | |||
78 | else if ( classes ) { | ||
79 | |||
80 | // [+] Context in the path or ENTER_BR | ||
81 | // [+] IndentClasses | ||
82 | // | ||
83 | // If there are indentation classes, check if reached | ||
84 | // the highest level of indentation. If so, disable | ||
85 | // the command. | ||
86 | |||
87 | if ( indentClassLeft.call( this, firstBlock, classes ) ) | ||
88 | return TRISTATE_OFF; | ||
89 | else | ||
90 | return TRISTATE_DISABLED; | ||
91 | } else { | ||
92 | |||
93 | // [+] Context in the path or ENTER_BR | ||
94 | // [-] IndentClasses | ||
95 | // [+] Indenting | ||
96 | // | ||
97 | // No indent-level limitations due to indent classes. | ||
98 | // Indent-like command can always be executed. | ||
99 | |||
100 | if ( this.isIndent ) | ||
101 | return TRISTATE_OFF; | ||
102 | |||
103 | // [+] Context in the path or ENTER_BR | ||
104 | // [-] IndentClasses | ||
105 | // [-] Indenting | ||
106 | // [-] Block in the path | ||
107 | // | ||
108 | // No block in path. There's no element to apply indentation | ||
109 | // so disable the command. | ||
110 | |||
111 | else if ( !firstBlock ) | ||
112 | return TRISTATE_DISABLED; | ||
113 | |||
114 | // [+] Context in the path or ENTER_BR | ||
115 | // [-] IndentClasses | ||
116 | // [-] Indenting | ||
117 | // [+] Block in path. | ||
118 | // | ||
119 | // Not using indentClasses but there is firstBlock. | ||
120 | // We can calculate current indentation level and | ||
121 | // try to increase/decrease it. | ||
122 | |||
123 | else { | ||
124 | return CKEDITOR[ | ||
125 | ( getIndent( firstBlock ) || 0 ) <= 0 ? 'TRISTATE_DISABLED' : 'TRISTATE_OFF' | ||
126 | ]; | ||
127 | } | ||
128 | } | ||
129 | }, | ||
130 | |||
131 | exec: function( editor ) { | ||
132 | var selection = editor.getSelection(), | ||
133 | range = selection && selection.getRanges()[ 0 ], | ||
134 | nearestListBlock; | ||
135 | |||
136 | // If there's some list in the path, then it will be | ||
137 | // a full-list indent by increasing or decreasing margin property. | ||
138 | if ( ( nearestListBlock = editor.elementPath().contains( $list ) ) ) | ||
139 | indentElement.call( this, nearestListBlock, classes ); | ||
140 | |||
141 | // If no list in the path, use iterator to indent all the possible | ||
142 | // paragraphs in the range, creating them if necessary. | ||
143 | else { | ||
144 | var iterator = range.createIterator(), | ||
145 | enterMode = editor.config.enterMode, | ||
146 | block; | ||
147 | |||
148 | iterator.enforceRealBlocks = true; | ||
149 | iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR; | ||
150 | |||
151 | while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) ) { | ||
152 | if ( !block.isReadOnly() ) | ||
153 | indentElement.call( this, block, classes ); | ||
154 | } | ||
155 | } | ||
156 | |||
157 | return true; | ||
158 | } | ||
159 | } | ||
160 | }; | ||
161 | } | ||
162 | |||
163 | CKEDITOR.tools.extend( commandDefinition.prototype, globalHelpers.specificDefinition.prototype, { | ||
164 | // Elements that, if in an elementpath, will be handled by this | ||
165 | // command. They restrict the scope of the plugin. | ||
166 | context: { div: 1, dl: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, ul: 1, ol: 1, p: 1, pre: 1, table: 1 }, | ||
167 | |||
168 | // A regex built on config#indentClasses to detect whether an | ||
169 | // element has some indentClass or not. | ||
170 | classNameRegex: classes ? new RegExp( '(?:^|\\s+)(' + classes.join( '|' ) + ')(?=$|\\s)' ) : null | ||
171 | } ); | ||
172 | } | ||
173 | } ); | ||
174 | |||
175 | // Generic indentation procedure for indentation of any element | ||
176 | // either with margin property or config#indentClass. | ||
177 | function indentElement( element, classes, dir ) { | ||
178 | if ( element.getCustomData( 'indent_processed' ) ) | ||
179 | return; | ||
180 | |||
181 | var editor = this.editor, | ||
182 | isIndent = this.isIndent; | ||
183 | |||
184 | if ( classes ) { | ||
185 | // Transform current class f to indent step index. | ||
186 | var indentClass = element.$.className.match( this.classNameRegex ), | ||
187 | indentStep = 0; | ||
188 | |||
189 | if ( indentClass ) { | ||
190 | indentClass = indentClass[ 1 ]; | ||
191 | indentStep = CKEDITOR.tools.indexOf( classes, indentClass ) + 1; | ||
192 | } | ||
193 | |||
194 | // Operate on indent step index, transform indent step index | ||
195 | // back to class name. | ||
196 | if ( ( indentStep += isIndent ? 1 : -1 ) < 0 ) | ||
197 | return; | ||
198 | |||
199 | indentStep = Math.min( indentStep, classes.length ); | ||
200 | indentStep = Math.max( indentStep, 0 ); | ||
201 | element.$.className = CKEDITOR.tools.ltrim( element.$.className.replace( this.classNameRegex, '' ) ); | ||
202 | |||
203 | if ( indentStep > 0 ) | ||
204 | element.addClass( classes[ indentStep - 1 ] ); | ||
205 | } else { | ||
206 | var indentCssProperty = getIndentCss( element, dir ), | ||
207 | currentOffset = parseInt( element.getStyle( indentCssProperty ), 10 ), | ||
208 | indentOffset = editor.config.indentOffset || 40; | ||
209 | |||
210 | if ( isNaN( currentOffset ) ) | ||
211 | currentOffset = 0; | ||
212 | |||
213 | currentOffset += ( isIndent ? 1 : -1 ) * indentOffset; | ||
214 | |||
215 | if ( currentOffset < 0 ) | ||
216 | return; | ||
217 | |||
218 | currentOffset = Math.max( currentOffset, 0 ); | ||
219 | currentOffset = Math.ceil( currentOffset / indentOffset ) * indentOffset; | ||
220 | |||
221 | element.setStyle( | ||
222 | indentCssProperty, | ||
223 | currentOffset ? currentOffset + ( editor.config.indentUnit || 'px' ) : '' | ||
224 | ); | ||
225 | |||
226 | if ( element.getAttribute( 'style' ) === '' ) | ||
227 | element.removeAttribute( 'style' ); | ||
228 | } | ||
229 | |||
230 | CKEDITOR.dom.element.setMarker( this.database, element, 'indent_processed', 1 ); | ||
231 | |||
232 | return; | ||
233 | } | ||
234 | |||
235 | // Method that checks if current indentation level for an element | ||
236 | // reached the limit determined by config#indentClasses. | ||
237 | function indentClassLeft( node, classes ) { | ||
238 | var indentClass = node.$.className.match( this.classNameRegex ), | ||
239 | isIndent = this.isIndent; | ||
240 | |||
241 | // If node has one of the indentClasses: | ||
242 | // * If it holds the topmost indentClass, then | ||
243 | // no more classes have left. | ||
244 | // * If it holds any other indentClass, it can use the next one | ||
245 | // or the previous one. | ||
246 | // * Outdent is always possible. We can remove indentClass. | ||
247 | if ( indentClass ) | ||
248 | return isIndent ? indentClass[ 1 ] != classes.slice( -1 ) : true; | ||
249 | |||
250 | // If node has no class which belongs to indentClasses, | ||
251 | // then it is at 0-level. It can be indented but not outdented. | ||
252 | else | ||
253 | return isIndent; | ||
254 | } | ||
255 | |||
256 | // Determines indent CSS property for an element according to | ||
257 | // what is the direction of such element. It can be either `margin-left` | ||
258 | // or `margin-right`. | ||
259 | function getIndentCss( element, dir ) { | ||
260 | return ( dir || element.getComputedStyle( 'direction' ) ) == 'ltr' ? 'margin-left' : 'margin-right'; | ||
261 | } | ||
262 | |||
263 | // Return the numerical indent value of margin-left|right of an element, | ||
264 | // considering element's direction. If element has no margin specified, | ||
265 | // NaN is returned. | ||
266 | function getIndent( element ) { | ||
267 | return parseInt( element.getStyle( getIndentCss( element ) ), 10 ); | ||
268 | } | ||
269 | } )(); | ||
270 | |||
271 | /** | ||
272 | * A list of classes to use for indenting the contents. If set to `null`, no classes will be used | ||
273 | * and instead the {@link #indentUnit} and {@link #indentOffset} properties will be used. | ||
274 | * | ||
275 | * // Use the 'Indent1', 'Indent2', 'Indent3' classes. | ||
276 | * config.indentClasses = ['Indent1', 'Indent2', 'Indent3']; | ||
277 | * | ||
278 | * @cfg {Array} [indentClasses=null] | ||
279 | * @member CKEDITOR.config | ||
280 | */ | ||
281 | |||
282 | /** | ||
283 | * The size in {@link CKEDITOR.config#indentUnit indentation units} of each indentation step. | ||
284 | * | ||
285 | * config.indentOffset = 4; | ||
286 | * | ||
287 | * @cfg {Number} [indentOffset=40] | ||
288 | * @member CKEDITOR.config | ||
289 | */ | ||
290 | |||
291 | /** | ||
292 | * The unit used for {@link CKEDITOR.config#indentOffset indentation offset}. | ||
293 | * | ||
294 | * config.indentUnit = 'em'; | ||
295 | * | ||
296 | * @cfg {String} [indentUnit='px'] | ||
297 | * @member CKEDITOR.config | ||
298 | */ | ||
diff --git a/sources/plugins/indentlist/plugin.js b/sources/plugins/indentlist/plugin.js new file mode 100644 index 0000000..126af11 --- /dev/null +++ b/sources/plugins/indentlist/plugin.js | |||
@@ -0,0 +1,318 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview Handles the indentation of lists. | ||
8 | */ | ||
9 | |||
10 | ( function() { | ||
11 | 'use strict'; | ||
12 | |||
13 | var isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( true ), | ||
14 | isNotBookmark = CKEDITOR.dom.walker.bookmark( false, true ), | ||
15 | TRISTATE_DISABLED = CKEDITOR.TRISTATE_DISABLED, | ||
16 | TRISTATE_OFF = CKEDITOR.TRISTATE_OFF; | ||
17 | |||
18 | CKEDITOR.plugins.add( 'indentlist', { | ||
19 | requires: 'indent', | ||
20 | init: function( editor ) { | ||
21 | var globalHelpers = CKEDITOR.plugins.indent; | ||
22 | |||
23 | // Register commands. | ||
24 | globalHelpers.registerCommands( editor, { | ||
25 | indentlist: new commandDefinition( editor, 'indentlist', true ), | ||
26 | outdentlist: new commandDefinition( editor, 'outdentlist' ) | ||
27 | } ); | ||
28 | |||
29 | function commandDefinition( editor ) { | ||
30 | globalHelpers.specificDefinition.apply( this, arguments ); | ||
31 | |||
32 | // Require ul OR ol list. | ||
33 | this.requiredContent = [ 'ul', 'ol' ]; | ||
34 | |||
35 | // Indent and outdent lists with TAB/SHIFT+TAB key. Indenting can | ||
36 | // be done for any list item that isn't the first child of the parent. | ||
37 | editor.on( 'key', function( evt ) { | ||
38 | if ( editor.mode != 'wysiwyg' ) | ||
39 | return; | ||
40 | |||
41 | if ( evt.data.keyCode == this.indentKey ) { | ||
42 | var list = this.getContext( editor.elementPath() ); | ||
43 | |||
44 | if ( list ) { | ||
45 | // Don't indent if in first list item of the parent. | ||
46 | // Outdent, however, can always be done to collapse | ||
47 | // the list into a paragraph (div). | ||
48 | if ( this.isIndent && CKEDITOR.plugins.indentList.firstItemInPath( this.context, editor.elementPath(), list ) ) | ||
49 | return; | ||
50 | |||
51 | // Exec related global indentation command. Global | ||
52 | // commands take care of bookmarks and selection, | ||
53 | // so it's much easier to use them instead of | ||
54 | // content-specific commands. | ||
55 | editor.execCommand( this.relatedGlobal ); | ||
56 | |||
57 | // Cancel the key event so editor doesn't lose focus. | ||
58 | evt.cancel(); | ||
59 | } | ||
60 | } | ||
61 | }, this ); | ||
62 | |||
63 | // There are two different jobs for this plugin: | ||
64 | // | ||
65 | // * Indent job (priority=10), before indentblock. | ||
66 | // | ||
67 | // This job is before indentblock because, if this plugin is | ||
68 | // loaded it has higher priority over indentblock. It means that, | ||
69 | // if possible, nesting is performed, and then block manipulation, | ||
70 | // if necessary. | ||
71 | // | ||
72 | // * Outdent job (priority=30), after outdentblock. | ||
73 | // | ||
74 | // This job got to be after outdentblock because in some cases | ||
75 | // (margin, config#indentClass on list) outdent must be done on | ||
76 | // block-level. | ||
77 | |||
78 | this.jobs[ this.isIndent ? 10 : 30 ] = { | ||
79 | refresh: this.isIndent ? | ||
80 | function( editor, path ) { | ||
81 | var list = this.getContext( path ), | ||
82 | inFirstListItem = CKEDITOR.plugins.indentList.firstItemInPath( this.context, path, list ); | ||
83 | |||
84 | if ( !list || !this.isIndent || inFirstListItem ) | ||
85 | return TRISTATE_DISABLED; | ||
86 | |||
87 | return TRISTATE_OFF; | ||
88 | } : function( editor, path ) { | ||
89 | var list = this.getContext( path ); | ||
90 | |||
91 | if ( !list || this.isIndent ) | ||
92 | return TRISTATE_DISABLED; | ||
93 | |||
94 | return TRISTATE_OFF; | ||
95 | }, | ||
96 | |||
97 | exec: CKEDITOR.tools.bind( indentList, this ) | ||
98 | }; | ||
99 | } | ||
100 | |||
101 | CKEDITOR.tools.extend( commandDefinition.prototype, globalHelpers.specificDefinition.prototype, { | ||
102 | // Elements that, if in an elementpath, will be handled by this | ||
103 | // command. They restrict the scope of the plugin. | ||
104 | context: { ol: 1, ul: 1 } | ||
105 | } ); | ||
106 | } | ||
107 | } ); | ||
108 | |||
109 | function indentList( editor ) { | ||
110 | var that = this, | ||
111 | database = this.database, | ||
112 | context = this.context; | ||
113 | |||
114 | function indent( listNode ) { | ||
115 | // Our starting and ending points of the range might be inside some blocks under a list item... | ||
116 | // So before playing with the iterator, we need to expand the block to include the list items. | ||
117 | var startContainer = range.startContainer, | ||
118 | endContainer = range.endContainer; | ||
119 | while ( startContainer && !startContainer.getParent().equals( listNode ) ) | ||
120 | startContainer = startContainer.getParent(); | ||
121 | while ( endContainer && !endContainer.getParent().equals( listNode ) ) | ||
122 | endContainer = endContainer.getParent(); | ||
123 | |||
124 | if ( !startContainer || !endContainer ) | ||
125 | return false; | ||
126 | |||
127 | // Now we can iterate over the individual items on the same tree depth. | ||
128 | var block = startContainer, | ||
129 | itemsToMove = [], | ||
130 | stopFlag = false; | ||
131 | |||
132 | while ( !stopFlag ) { | ||
133 | if ( block.equals( endContainer ) ) | ||
134 | stopFlag = true; | ||
135 | |||
136 | itemsToMove.push( block ); | ||
137 | block = block.getNext(); | ||
138 | } | ||
139 | |||
140 | if ( itemsToMove.length < 1 ) | ||
141 | return false; | ||
142 | |||
143 | // Do indent or outdent operations on the array model of the list, not the | ||
144 | // list's DOM tree itself. The array model demands that it knows as much as | ||
145 | // possible about the surrounding lists, we need to feed it the further | ||
146 | // ancestor node that is still a list. | ||
147 | var listParents = listNode.getParents( true ); | ||
148 | for ( var i = 0; i < listParents.length; i++ ) { | ||
149 | if ( listParents[ i ].getName && context[ listParents[ i ].getName() ] ) { | ||
150 | listNode = listParents[ i ]; | ||
151 | break; | ||
152 | } | ||
153 | } | ||
154 | |||
155 | var indentOffset = that.isIndent ? 1 : -1, | ||
156 | startItem = itemsToMove[ 0 ], | ||
157 | lastItem = itemsToMove[ itemsToMove.length - 1 ], | ||
158 | |||
159 | // Convert the list DOM tree into a one dimensional array. | ||
160 | listArray = CKEDITOR.plugins.list.listToArray( listNode, database ), | ||
161 | |||
162 | // Apply indenting or outdenting on the array. | ||
163 | baseIndent = listArray[ lastItem.getCustomData( 'listarray_index' ) ].indent; | ||
164 | |||
165 | for ( i = startItem.getCustomData( 'listarray_index' ); i <= lastItem.getCustomData( 'listarray_index' ); i++ ) { | ||
166 | listArray[ i ].indent += indentOffset; | ||
167 | // Make sure the newly created sublist get a brand-new element of the same type. (#5372) | ||
168 | if ( indentOffset > 0 ) { | ||
169 | var listRoot = listArray[ i ].parent; | ||
170 | listArray[ i ].parent = new CKEDITOR.dom.element( listRoot.getName(), listRoot.getDocument() ); | ||
171 | } | ||
172 | } | ||
173 | |||
174 | for ( i = lastItem.getCustomData( 'listarray_index' ) + 1; i < listArray.length && listArray[ i ].indent > baseIndent; i++ ) | ||
175 | listArray[ i ].indent += indentOffset; | ||
176 | |||
177 | // Convert the array back to a DOM forest (yes we might have a few subtrees now). | ||
178 | // And replace the old list with the new forest. | ||
179 | var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, listNode.getDirection() ); | ||
180 | |||
181 | // Avoid nested <li> after outdent even they're visually same, | ||
182 | // recording them for later refactoring.(#3982) | ||
183 | if ( !that.isIndent ) { | ||
184 | var parentLiElement; | ||
185 | if ( ( parentLiElement = listNode.getParent() ) && parentLiElement.is( 'li' ) ) { | ||
186 | var children = newList.listNode.getChildren(), | ||
187 | pendingLis = [], | ||
188 | count = children.count(), | ||
189 | child; | ||
190 | |||
191 | for ( i = count - 1; i >= 0; i-- ) { | ||
192 | if ( ( child = children.getItem( i ) ) && child.is && child.is( 'li' ) ) | ||
193 | pendingLis.push( child ); | ||
194 | } | ||
195 | } | ||
196 | } | ||
197 | |||
198 | if ( newList ) | ||
199 | newList.listNode.replace( listNode ); | ||
200 | |||
201 | // Move the nested <li> to be appeared after the parent. | ||
202 | if ( pendingLis && pendingLis.length ) { | ||
203 | for ( i = 0; i < pendingLis.length; i++ ) { | ||
204 | var li = pendingLis[ i ], | ||
205 | followingList = li; | ||
206 | |||
207 | // Nest preceding <ul>/<ol> inside current <li> if any. | ||
208 | while ( ( followingList = followingList.getNext() ) && followingList.is && followingList.getName() in context ) { | ||
209 | // IE requires a filler NBSP for nested list inside empty list item, | ||
210 | // otherwise the list item will be inaccessiable. (#4476) | ||
211 | if ( CKEDITOR.env.needsNbspFiller && !li.getFirst( neitherWhitespacesNorBookmark ) ) | ||
212 | li.append( range.document.createText( '\u00a0' ) ); | ||
213 | |||
214 | li.append( followingList ); | ||
215 | } | ||
216 | |||
217 | li.insertAfter( parentLiElement ); | ||
218 | } | ||
219 | } | ||
220 | |||
221 | if ( newList ) | ||
222 | editor.fire( 'contentDomInvalidated' ); | ||
223 | |||
224 | return true; | ||
225 | } | ||
226 | |||
227 | var selection = editor.getSelection(), | ||
228 | ranges = selection && selection.getRanges(), | ||
229 | iterator = ranges.createIterator(), | ||
230 | range; | ||
231 | |||
232 | while ( ( range = iterator.getNextRange() ) ) { | ||
233 | var nearestListBlock = range.getCommonAncestor(); | ||
234 | |||
235 | while ( nearestListBlock && !( nearestListBlock.type == CKEDITOR.NODE_ELEMENT && context[ nearestListBlock.getName() ] ) ) { | ||
236 | // Avoid having plugin propagate to parent of editor in inline mode by canceling the indentation. (#12796) | ||
237 | if ( editor.editable().equals( nearestListBlock ) ) { | ||
238 | nearestListBlock = false; | ||
239 | break; | ||
240 | } | ||
241 | nearestListBlock = nearestListBlock.getParent(); | ||
242 | } | ||
243 | |||
244 | // Avoid having selection boundaries out of the list. | ||
245 | // <ul><li>[...</li></ul><p>...]</p> => <ul><li>[...]</li></ul><p>...</p> | ||
246 | if ( !nearestListBlock ) { | ||
247 | if ( ( nearestListBlock = range.startPath().contains( context ) ) ) | ||
248 | range.setEndAt( nearestListBlock, CKEDITOR.POSITION_BEFORE_END ); | ||
249 | } | ||
250 | |||
251 | // Avoid having selection enclose the entire list. (#6138) | ||
252 | // [<ul><li>...</li></ul>] =><ul><li>[...]</li></ul> | ||
253 | if ( !nearestListBlock ) { | ||
254 | var selectedNode = range.getEnclosedNode(); | ||
255 | if ( selectedNode && selectedNode.type == CKEDITOR.NODE_ELEMENT && selectedNode.getName() in context ) { | ||
256 | range.setStartAt( selectedNode, CKEDITOR.POSITION_AFTER_START ); | ||
257 | range.setEndAt( selectedNode, CKEDITOR.POSITION_BEFORE_END ); | ||
258 | nearestListBlock = selectedNode; | ||
259 | } | ||
260 | } | ||
261 | |||
262 | // Avoid selection anchors under list root. | ||
263 | // <ul>[<li>...</li>]</ul> => <ul><li>[...]</li></ul> | ||
264 | if ( nearestListBlock && range.startContainer.type == CKEDITOR.NODE_ELEMENT && range.startContainer.getName() in context ) { | ||
265 | var walker = new CKEDITOR.dom.walker( range ); | ||
266 | walker.evaluator = listItem; | ||
267 | range.startContainer = walker.next(); | ||
268 | } | ||
269 | |||
270 | if ( nearestListBlock && range.endContainer.type == CKEDITOR.NODE_ELEMENT && range.endContainer.getName() in context ) { | ||
271 | walker = new CKEDITOR.dom.walker( range ); | ||
272 | walker.evaluator = listItem; | ||
273 | range.endContainer = walker.previous(); | ||
274 | } | ||
275 | |||
276 | if ( nearestListBlock ) | ||
277 | return indent( nearestListBlock ); | ||
278 | } | ||
279 | return 0; | ||
280 | } | ||
281 | |||
282 | // Determines whether a node is a list <li> element. | ||
283 | function listItem( node ) { | ||
284 | return node.type == CKEDITOR.NODE_ELEMENT && node.is( 'li' ); | ||
285 | } | ||
286 | |||
287 | function neitherWhitespacesNorBookmark( node ) { | ||
288 | return isNotWhitespaces( node ) && isNotBookmark( node ); | ||
289 | } | ||
290 | |||
291 | /** | ||
292 | * Global namespace for methods exposed by the Indent List plugin. | ||
293 | * | ||
294 | * @singleton | ||
295 | * @class | ||
296 | */ | ||
297 | CKEDITOR.plugins.indentList = {}; | ||
298 | |||
299 | /** | ||
300 | * Checks whether the first child of the list is in the path. | ||
301 | * The list can be extracted from the path or given explicitly | ||
302 | * e.g. for better performance if cached. | ||
303 | * | ||
304 | * @since 4.4.6 | ||
305 | * @param {Object} query See the {@link CKEDITOR.dom.elementPath#contains} method arguments. | ||
306 | * @param {CKEDITOR.dom.elementPath} path | ||
307 | * @param {CKEDITOR.dom.element} [list] | ||
308 | * @returns {Boolean} | ||
309 | * @member CKEDITOR.plugins.indentList | ||
310 | */ | ||
311 | CKEDITOR.plugins.indentList.firstItemInPath = function( query, path, list ) { | ||
312 | var firstListItemInPath = path.contains( listItem ); | ||
313 | if ( !list ) | ||
314 | list = path.contains( query ); | ||
315 | |||
316 | return list && firstListItemInPath && firstListItemInPath.equals( list.getFirst( listItem ) ); | ||
317 | }; | ||
318 | } )(); | ||
diff --git a/sources/plugins/justify/icons/hidpi/justifyblock.png b/sources/plugins/justify/icons/hidpi/justifyblock.png new file mode 100644 index 0000000..7209fd4 --- /dev/null +++ b/sources/plugins/justify/icons/hidpi/justifyblock.png | |||
Binary files differ | |||
diff --git a/sources/plugins/justify/icons/hidpi/justifycenter.png b/sources/plugins/justify/icons/hidpi/justifycenter.png new file mode 100644 index 0000000..365e320 --- /dev/null +++ b/sources/plugins/justify/icons/hidpi/justifycenter.png | |||
Binary files differ | |||
diff --git a/sources/plugins/justify/icons/hidpi/justifyleft.png b/sources/plugins/justify/icons/hidpi/justifyleft.png new file mode 100644 index 0000000..75308c1 --- /dev/null +++ b/sources/plugins/justify/icons/hidpi/justifyleft.png | |||
Binary files differ | |||
diff --git a/sources/plugins/justify/icons/hidpi/justifyright.png b/sources/plugins/justify/icons/hidpi/justifyright.png new file mode 100644 index 0000000..de7c3d4 --- /dev/null +++ b/sources/plugins/justify/icons/hidpi/justifyright.png | |||
Binary files differ | |||
diff --git a/sources/plugins/justify/icons/justifyblock.png b/sources/plugins/justify/icons/justifyblock.png new file mode 100644 index 0000000..a507be1 --- /dev/null +++ b/sources/plugins/justify/icons/justifyblock.png | |||
Binary files differ | |||
diff --git a/sources/plugins/justify/icons/justifycenter.png b/sources/plugins/justify/icons/justifycenter.png new file mode 100644 index 0000000..f758bc4 --- /dev/null +++ b/sources/plugins/justify/icons/justifycenter.png | |||
Binary files differ | |||
diff --git a/sources/plugins/justify/icons/justifyleft.png b/sources/plugins/justify/icons/justifyleft.png new file mode 100644 index 0000000..542ddee --- /dev/null +++ b/sources/plugins/justify/icons/justifyleft.png | |||
Binary files differ | |||
diff --git a/sources/plugins/justify/icons/justifyright.png b/sources/plugins/justify/icons/justifyright.png new file mode 100644 index 0000000..71a983c --- /dev/null +++ b/sources/plugins/justify/icons/justifyright.png | |||
Binary files differ | |||
diff --git a/sources/plugins/justify/lang/af.js b/sources/plugins/justify/lang/af.js new file mode 100644 index 0000000..d9b468d --- /dev/null +++ b/sources/plugins/justify/lang/af.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'af', { | ||
6 | block: 'Uitvul', | ||
7 | center: 'Sentreer', | ||
8 | left: 'Links oplyn', | ||
9 | right: 'Regs oplyn' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/ar.js b/sources/plugins/justify/lang/ar.js new file mode 100644 index 0000000..4db5875 --- /dev/null +++ b/sources/plugins/justify/lang/ar.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'ar', { | ||
6 | block: 'ضبط', | ||
7 | center: 'توسيط', | ||
8 | left: 'محاذاة إلى اليسار', | ||
9 | right: 'محاذاة إلى اليمين' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/bg.js b/sources/plugins/justify/lang/bg.js new file mode 100644 index 0000000..7a2841c --- /dev/null +++ b/sources/plugins/justify/lang/bg.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'bg', { | ||
6 | block: 'Двустранно подравняване', | ||
7 | center: 'Център', | ||
8 | left: 'Подравни в ляво', | ||
9 | right: 'Подравни в дясно' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/bn.js b/sources/plugins/justify/lang/bn.js new file mode 100644 index 0000000..77d5827 --- /dev/null +++ b/sources/plugins/justify/lang/bn.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'bn', { | ||
6 | block: 'ব্লক জাস্টিফাই', | ||
7 | center: 'মাঝ বরাবর ঘেষা', | ||
8 | left: 'বা দিকে ঘেঁষা', | ||
9 | right: 'ডান দিকে ঘেঁষা' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/bs.js b/sources/plugins/justify/lang/bs.js new file mode 100644 index 0000000..1412437 --- /dev/null +++ b/sources/plugins/justify/lang/bs.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'bs', { | ||
6 | block: 'Puno poravnanje', | ||
7 | center: 'Centralno poravnanje', | ||
8 | left: 'Lijevo poravnanje', | ||
9 | right: 'Desno poravnanje' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/ca.js b/sources/plugins/justify/lang/ca.js new file mode 100644 index 0000000..02c3858 --- /dev/null +++ b/sources/plugins/justify/lang/ca.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'ca', { | ||
6 | block: 'Justificat', | ||
7 | center: 'Centrat', | ||
8 | left: 'Alinea a l\'esquerra', | ||
9 | right: 'Alinea a la dreta' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/cs.js b/sources/plugins/justify/lang/cs.js new file mode 100644 index 0000000..d5f263f --- /dev/null +++ b/sources/plugins/justify/lang/cs.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'cs', { | ||
6 | block: 'Zarovnat do bloku', | ||
7 | center: 'Zarovnat na střed', | ||
8 | left: 'Zarovnat vlevo', | ||
9 | right: 'Zarovnat vpravo' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/cy.js b/sources/plugins/justify/lang/cy.js new file mode 100644 index 0000000..80883d1 --- /dev/null +++ b/sources/plugins/justify/lang/cy.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'cy', { | ||
6 | block: 'Unioni', | ||
7 | center: 'Alinio i\'r Canol', | ||
8 | left: 'Alinio i\'r Chwith', | ||
9 | right: 'Alinio i\'r Dde' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/da.js b/sources/plugins/justify/lang/da.js new file mode 100644 index 0000000..e595639 --- /dev/null +++ b/sources/plugins/justify/lang/da.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'da', { | ||
6 | block: 'Lige margener', | ||
7 | center: 'Centreret', | ||
8 | left: 'Venstrestillet', | ||
9 | right: 'Højrestillet' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/de-ch.js b/sources/plugins/justify/lang/de-ch.js new file mode 100644 index 0000000..36fc080 --- /dev/null +++ b/sources/plugins/justify/lang/de-ch.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'de-ch', { | ||
6 | block: 'Blocksatz', | ||
7 | center: 'Zentriert', | ||
8 | left: 'Linksbündig', | ||
9 | right: 'Rechtsbündig' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/de.js b/sources/plugins/justify/lang/de.js new file mode 100644 index 0000000..dc45266 --- /dev/null +++ b/sources/plugins/justify/lang/de.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'de', { | ||
6 | block: 'Blocksatz', | ||
7 | center: 'Zentriert', | ||
8 | left: 'Linksbündig', | ||
9 | right: 'Rechtsbündig' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/el.js b/sources/plugins/justify/lang/el.js new file mode 100644 index 0000000..1d50fd2 --- /dev/null +++ b/sources/plugins/justify/lang/el.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'el', { | ||
6 | block: 'Πλήρης Στοίχιση', | ||
7 | center: 'Στο Κέντρο', | ||
8 | left: 'Στοίχιση Αριστερά', | ||
9 | right: 'Στοίχιση Δεξιά' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/en-au.js b/sources/plugins/justify/lang/en-au.js new file mode 100644 index 0000000..53162fd --- /dev/null +++ b/sources/plugins/justify/lang/en-au.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'en-au', { | ||
6 | block: 'Justify', | ||
7 | center: 'Centre', | ||
8 | left: 'Align Left', | ||
9 | right: 'Align Right' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/en-ca.js b/sources/plugins/justify/lang/en-ca.js new file mode 100644 index 0000000..d64b9bf --- /dev/null +++ b/sources/plugins/justify/lang/en-ca.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'en-ca', { | ||
6 | block: 'Justify', | ||
7 | center: 'Centre', | ||
8 | left: 'Align Left', | ||
9 | right: 'Align Right' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/en-gb.js b/sources/plugins/justify/lang/en-gb.js new file mode 100644 index 0000000..adb3b56 --- /dev/null +++ b/sources/plugins/justify/lang/en-gb.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'en-gb', { | ||
6 | block: 'Justify', | ||
7 | center: 'Centre', | ||
8 | left: 'Align Left', | ||
9 | right: 'Align Right' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/en.js b/sources/plugins/justify/lang/en.js new file mode 100644 index 0000000..acaaccb --- /dev/null +++ b/sources/plugins/justify/lang/en.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'en', { | ||
6 | block: 'Justify', | ||
7 | center: 'Center', | ||
8 | left: 'Align Left', | ||
9 | right: 'Align Right' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/eo.js b/sources/plugins/justify/lang/eo.js new file mode 100644 index 0000000..f58b324 --- /dev/null +++ b/sources/plugins/justify/lang/eo.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'eo', { | ||
6 | block: 'Ĝisrandigi Ambaŭflanke', | ||
7 | center: 'Centrigi', | ||
8 | left: 'Ĝisrandigi maldekstren', | ||
9 | right: 'Ĝisrandigi dekstren' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/es.js b/sources/plugins/justify/lang/es.js new file mode 100644 index 0000000..23baf68 --- /dev/null +++ b/sources/plugins/justify/lang/es.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'es', { | ||
6 | block: 'Justificado', | ||
7 | center: 'Centrar', | ||
8 | left: 'Alinear a Izquierda', | ||
9 | right: 'Alinear a Derecha' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/et.js b/sources/plugins/justify/lang/et.js new file mode 100644 index 0000000..3226e87 --- /dev/null +++ b/sources/plugins/justify/lang/et.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'et', { | ||
6 | block: 'Rööpjoondus', | ||
7 | center: 'Keskjoondus', | ||
8 | left: 'Vasakjoondus', | ||
9 | right: 'Paremjoondus' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/eu.js b/sources/plugins/justify/lang/eu.js new file mode 100644 index 0000000..dfcc507 --- /dev/null +++ b/sources/plugins/justify/lang/eu.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'eu', { | ||
6 | block: 'Justifikatu', | ||
7 | center: 'Erdian', | ||
8 | left: 'Lerrokatu ezkerrean', | ||
9 | right: 'Lerrokatu eskuinean' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/fa.js b/sources/plugins/justify/lang/fa.js new file mode 100644 index 0000000..ed6e14e --- /dev/null +++ b/sources/plugins/justify/lang/fa.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'fa', { | ||
6 | block: 'بلوک چین', | ||
7 | center: 'میان چین', | ||
8 | left: 'چپ چین', | ||
9 | right: 'راست چین' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/fi.js b/sources/plugins/justify/lang/fi.js new file mode 100644 index 0000000..52ad58f --- /dev/null +++ b/sources/plugins/justify/lang/fi.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'fi', { | ||
6 | block: 'Tasaa molemmat reunat', | ||
7 | center: 'Keskitä', | ||
8 | left: 'Tasaa vasemmat reunat', | ||
9 | right: 'Tasaa oikeat reunat' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/fo.js b/sources/plugins/justify/lang/fo.js new file mode 100644 index 0000000..6705be4 --- /dev/null +++ b/sources/plugins/justify/lang/fo.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'fo', { | ||
6 | block: 'Javnir tekstkantar', | ||
7 | center: 'Miðsett', | ||
8 | left: 'Vinstrasett', | ||
9 | right: 'Høgrasett' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/fr-ca.js b/sources/plugins/justify/lang/fr-ca.js new file mode 100644 index 0000000..bb11f6e --- /dev/null +++ b/sources/plugins/justify/lang/fr-ca.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'fr-ca', { | ||
6 | block: 'Justifié', | ||
7 | center: 'Centré', | ||
8 | left: 'Aligner à gauche', | ||
9 | right: 'Aligner à Droite' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/fr.js b/sources/plugins/justify/lang/fr.js new file mode 100644 index 0000000..348771c --- /dev/null +++ b/sources/plugins/justify/lang/fr.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'fr', { | ||
6 | block: 'Justifier', | ||
7 | center: 'Centrer', | ||
8 | left: 'Aligner à gauche', | ||
9 | right: 'Aligner à droite' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/gl.js b/sources/plugins/justify/lang/gl.js new file mode 100644 index 0000000..0fdd269 --- /dev/null +++ b/sources/plugins/justify/lang/gl.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'gl', { | ||
6 | block: 'Xustificado', | ||
7 | center: 'Centrado', | ||
8 | left: 'Aliñar á esquerda', | ||
9 | right: 'Aliñar á dereita' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/gu.js b/sources/plugins/justify/lang/gu.js new file mode 100644 index 0000000..a59efa7 --- /dev/null +++ b/sources/plugins/justify/lang/gu.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'gu', { | ||
6 | block: 'બ્લૉક, અંતરાય જસ્ટિફાઇ', | ||
7 | center: 'સંકેંદ્રણ/સેંટરિંગ', | ||
8 | left: 'ડાબી બાજુએ/બાજુ તરફ', | ||
9 | right: 'જમણી બાજુએ/બાજુ તરફ' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/he.js b/sources/plugins/justify/lang/he.js new file mode 100644 index 0000000..92e7c9c --- /dev/null +++ b/sources/plugins/justify/lang/he.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'he', { | ||
6 | block: 'יישור לשוליים', | ||
7 | center: 'מרכוז', | ||
8 | left: 'יישור לשמאל', | ||
9 | right: 'יישור לימין' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/hi.js b/sources/plugins/justify/lang/hi.js new file mode 100644 index 0000000..4606e3d --- /dev/null +++ b/sources/plugins/justify/lang/hi.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'hi', { | ||
6 | block: 'ब्लॉक जस्टीफ़ाई', | ||
7 | center: 'बीच में', | ||
8 | left: 'बायीं तरफ', | ||
9 | right: 'दायीं तरफ' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/hr.js b/sources/plugins/justify/lang/hr.js new file mode 100644 index 0000000..79282d9 --- /dev/null +++ b/sources/plugins/justify/lang/hr.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'hr', { | ||
6 | block: 'Blok poravnanje', | ||
7 | center: 'Središnje poravnanje', | ||
8 | left: 'Lijevo poravnanje', | ||
9 | right: 'Desno poravnanje' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/hu.js b/sources/plugins/justify/lang/hu.js new file mode 100644 index 0000000..0aaff0f --- /dev/null +++ b/sources/plugins/justify/lang/hu.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'hu', { | ||
6 | block: 'Sorkizárt', | ||
7 | center: 'Középre', | ||
8 | left: 'Balra', | ||
9 | right: 'Jobbra' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/id.js b/sources/plugins/justify/lang/id.js new file mode 100644 index 0000000..297ae8e --- /dev/null +++ b/sources/plugins/justify/lang/id.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'id', { | ||
6 | block: 'Rata kiri-kanan', | ||
7 | center: 'Pusat', | ||
8 | left: 'Align Left', // MISSING | ||
9 | right: 'Align Right' // MISSING | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/is.js b/sources/plugins/justify/lang/is.js new file mode 100644 index 0000000..c2f6ad4 --- /dev/null +++ b/sources/plugins/justify/lang/is.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'is', { | ||
6 | block: 'Jafna báðum megin', | ||
7 | center: 'Miðja texta', | ||
8 | left: 'Vinstrijöfnun', | ||
9 | right: 'Hægrijöfnun' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/it.js b/sources/plugins/justify/lang/it.js new file mode 100644 index 0000000..10fc772 --- /dev/null +++ b/sources/plugins/justify/lang/it.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'it', { | ||
6 | block: 'Giustifica', | ||
7 | center: 'Centra', | ||
8 | left: 'Allinea a sinistra', | ||
9 | right: 'Allinea a destra' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/ja.js b/sources/plugins/justify/lang/ja.js new file mode 100644 index 0000000..5665a8b --- /dev/null +++ b/sources/plugins/justify/lang/ja.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'ja', { | ||
6 | block: '両端揃え', | ||
7 | center: '中央揃え', | ||
8 | left: '左揃え', | ||
9 | right: '右揃え' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/ka.js b/sources/plugins/justify/lang/ka.js new file mode 100644 index 0000000..b80d2ef --- /dev/null +++ b/sources/plugins/justify/lang/ka.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'ka', { | ||
6 | block: 'გადასწორება', | ||
7 | center: 'შუაში სწორება', | ||
8 | left: 'მარცხნივ სწორება', | ||
9 | right: 'მარჯვნივ სწორება' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/km.js b/sources/plugins/justify/lang/km.js new file mode 100644 index 0000000..6161873 --- /dev/null +++ b/sources/plugins/justify/lang/km.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'km', { | ||
6 | block: 'តម្រឹមពេញ', | ||
7 | center: 'កណ្ដាល', | ||
8 | left: 'តម្រឹមឆ្វេង', | ||
9 | right: 'តម្រឹមស្ដាំ' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/ko.js b/sources/plugins/justify/lang/ko.js new file mode 100644 index 0000000..13c155c --- /dev/null +++ b/sources/plugins/justify/lang/ko.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'ko', { | ||
6 | block: '양쪽 맞춤', | ||
7 | center: '가운데 정렬', | ||
8 | left: '왼쪽 정렬', | ||
9 | right: '오른쪽 정렬' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/ku.js b/sources/plugins/justify/lang/ku.js new file mode 100644 index 0000000..794b588 --- /dev/null +++ b/sources/plugins/justify/lang/ku.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'ku', { | ||
6 | block: 'هاوستوونی', | ||
7 | center: 'ناوەڕاست', | ||
8 | left: 'بەهێڵ کردنی چەپ', | ||
9 | right: 'بەهێڵ کردنی ڕاست' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/lt.js b/sources/plugins/justify/lang/lt.js new file mode 100644 index 0000000..1b373fd --- /dev/null +++ b/sources/plugins/justify/lang/lt.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'lt', { | ||
6 | block: 'Lygiuoti abi puses', | ||
7 | center: 'Centruoti', | ||
8 | left: 'Lygiuoti kairę', | ||
9 | right: 'Lygiuoti dešinę' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/lv.js b/sources/plugins/justify/lang/lv.js new file mode 100644 index 0000000..e20fe95 --- /dev/null +++ b/sources/plugins/justify/lang/lv.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'lv', { | ||
6 | block: 'Izlīdzināt malas', | ||
7 | center: 'Izlīdzināt pret centru', | ||
8 | left: 'Izlīdzināt pa kreisi', | ||
9 | right: 'Izlīdzināt pa labi' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/mk.js b/sources/plugins/justify/lang/mk.js new file mode 100644 index 0000000..eb9d847 --- /dev/null +++ b/sources/plugins/justify/lang/mk.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'mk', { | ||
6 | block: 'Justify', // MISSING | ||
7 | center: 'Во средина', | ||
8 | left: 'Align Left', // MISSING | ||
9 | right: 'Align Right' // MISSING | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/mn.js b/sources/plugins/justify/lang/mn.js new file mode 100644 index 0000000..ff904dd --- /dev/null +++ b/sources/plugins/justify/lang/mn.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'mn', { | ||
6 | block: 'Тэгшлэх', | ||
7 | center: 'Голлуулах', | ||
8 | left: 'Зүүн талд тулгах', | ||
9 | right: 'Баруун талд тулгах' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/ms.js b/sources/plugins/justify/lang/ms.js new file mode 100644 index 0000000..41d736b --- /dev/null +++ b/sources/plugins/justify/lang/ms.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'ms', { | ||
6 | block: 'Jajaran Blok', | ||
7 | center: 'Jajaran Tengah', | ||
8 | left: 'Jajaran Kiri', | ||
9 | right: 'Jajaran Kanan' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/nb.js b/sources/plugins/justify/lang/nb.js new file mode 100644 index 0000000..aac1f86 --- /dev/null +++ b/sources/plugins/justify/lang/nb.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'nb', { | ||
6 | block: 'Blokkjuster', | ||
7 | center: 'Midtstill', | ||
8 | left: 'Venstrejuster', | ||
9 | right: 'Høyrejuster' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/nl.js b/sources/plugins/justify/lang/nl.js new file mode 100644 index 0000000..3b33e46 --- /dev/null +++ b/sources/plugins/justify/lang/nl.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'nl', { | ||
6 | block: 'Uitvullen', | ||
7 | center: 'Centreren', | ||
8 | left: 'Links uitlijnen', | ||
9 | right: 'Rechts uitlijnen' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/no.js b/sources/plugins/justify/lang/no.js new file mode 100644 index 0000000..c77daaa --- /dev/null +++ b/sources/plugins/justify/lang/no.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'no', { | ||
6 | block: 'Blokkjuster', | ||
7 | center: 'Midtstill', | ||
8 | left: 'Venstrejuster', | ||
9 | right: 'Høyrejuster' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/pl.js b/sources/plugins/justify/lang/pl.js new file mode 100644 index 0000000..07f9807 --- /dev/null +++ b/sources/plugins/justify/lang/pl.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'pl', { | ||
6 | block: 'Wyjustuj', | ||
7 | center: 'Wyśrodkuj', | ||
8 | left: 'Wyrównaj do lewej', | ||
9 | right: 'Wyrównaj do prawej' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/pt-br.js b/sources/plugins/justify/lang/pt-br.js new file mode 100644 index 0000000..bb63097 --- /dev/null +++ b/sources/plugins/justify/lang/pt-br.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'pt-br', { | ||
6 | block: 'Justificado', | ||
7 | center: 'Centralizar', | ||
8 | left: 'Alinhar Esquerda', | ||
9 | right: 'Alinhar Direita' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/pt.js b/sources/plugins/justify/lang/pt.js new file mode 100644 index 0000000..f1f233a --- /dev/null +++ b/sources/plugins/justify/lang/pt.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'pt', { | ||
6 | block: 'Justificado', | ||
7 | center: 'Alinhar ao Centro', | ||
8 | left: 'Alinhar à esquerda', | ||
9 | right: 'Alinhar à direita' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/ro.js b/sources/plugins/justify/lang/ro.js new file mode 100644 index 0000000..3ef171b --- /dev/null +++ b/sources/plugins/justify/lang/ro.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'ro', { | ||
6 | block: 'Aliniere în bloc (Block Justify)', | ||
7 | center: 'Aliniere centrală', | ||
8 | left: 'Aliniere la stânga', | ||
9 | right: 'Aliniere la dreapta' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/ru.js b/sources/plugins/justify/lang/ru.js new file mode 100644 index 0000000..5198476 --- /dev/null +++ b/sources/plugins/justify/lang/ru.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'ru', { | ||
6 | block: 'По ширине', | ||
7 | center: 'По центру', | ||
8 | left: 'По левому краю', | ||
9 | right: 'По правому краю' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/si.js b/sources/plugins/justify/lang/si.js new file mode 100644 index 0000000..a29953e --- /dev/null +++ b/sources/plugins/justify/lang/si.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'si', { | ||
6 | block: 'Justify', // MISSING | ||
7 | center: 'මධ්ය', | ||
8 | left: 'Align Left', // MISSING | ||
9 | right: 'Align Right' // MISSING | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/sk.js b/sources/plugins/justify/lang/sk.js new file mode 100644 index 0000000..f749df5 --- /dev/null +++ b/sources/plugins/justify/lang/sk.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'sk', { | ||
6 | block: 'Zarovnať do bloku', | ||
7 | center: 'Zarovnať na stred', | ||
8 | left: 'Zarovnať vľavo', | ||
9 | right: 'Zarovnať vpravo' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/sl.js b/sources/plugins/justify/lang/sl.js new file mode 100644 index 0000000..bd4cd0b --- /dev/null +++ b/sources/plugins/justify/lang/sl.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'sl', { | ||
6 | block: 'Obojestranska poravnava', | ||
7 | center: 'Sredinska poravnava', | ||
8 | left: 'Leva poravnava', | ||
9 | right: 'Desna poravnava' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/sq.js b/sources/plugins/justify/lang/sq.js new file mode 100644 index 0000000..b184d79 --- /dev/null +++ b/sources/plugins/justify/lang/sq.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'sq', { | ||
6 | block: 'Zgjero', | ||
7 | center: 'Qendër', | ||
8 | left: 'Rreshto majtas', | ||
9 | right: 'Rreshto Djathtas' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/sr-latn.js b/sources/plugins/justify/lang/sr-latn.js new file mode 100644 index 0000000..978c540 --- /dev/null +++ b/sources/plugins/justify/lang/sr-latn.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'sr-latn', { | ||
6 | block: 'Obostrano ravnanje', | ||
7 | center: 'Centriran tekst', | ||
8 | left: 'Levo ravnanje', | ||
9 | right: 'Desno ravnanje' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/sr.js b/sources/plugins/justify/lang/sr.js new file mode 100644 index 0000000..062b368 --- /dev/null +++ b/sources/plugins/justify/lang/sr.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'sr', { | ||
6 | block: 'Обострано равнање', | ||
7 | center: 'Центриран текст', | ||
8 | left: 'Лево равнање', | ||
9 | right: 'Десно равнање' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/sv.js b/sources/plugins/justify/lang/sv.js new file mode 100644 index 0000000..9e798ac --- /dev/null +++ b/sources/plugins/justify/lang/sv.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'sv', { | ||
6 | block: 'Justera till marginaler', | ||
7 | center: 'Centrera', | ||
8 | left: 'Vänsterjustera', | ||
9 | right: 'Högerjustera' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/th.js b/sources/plugins/justify/lang/th.js new file mode 100644 index 0000000..da8a403 --- /dev/null +++ b/sources/plugins/justify/lang/th.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'th', { | ||
6 | block: 'จัดพอดีหน้ากระดาษ', | ||
7 | center: 'จัดกึ่งกลาง', | ||
8 | left: 'จัดชิดซ้าย', | ||
9 | right: 'จัดชิดขวา' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/tr.js b/sources/plugins/justify/lang/tr.js new file mode 100644 index 0000000..661782c --- /dev/null +++ b/sources/plugins/justify/lang/tr.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'tr', { | ||
6 | block: 'İki Kenara Yaslanmış', | ||
7 | center: 'Ortalanmış', | ||
8 | left: 'Sola Dayalı', | ||
9 | right: 'Sağa Dayalı' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/tt.js b/sources/plugins/justify/lang/tt.js new file mode 100644 index 0000000..a6b41a1 --- /dev/null +++ b/sources/plugins/justify/lang/tt.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'tt', { | ||
6 | block: 'Киңлеккә карап тигезләү', | ||
7 | center: 'Үзәккә тигезләү', | ||
8 | left: 'Сул як кырыйдан тигезләү', | ||
9 | right: 'Уң як кырыйдан тигезләү' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/ug.js b/sources/plugins/justify/lang/ug.js new file mode 100644 index 0000000..6c71c49 --- /dev/null +++ b/sources/plugins/justify/lang/ug.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'ug', { | ||
6 | block: 'ئىككى تەرەپتىن توغرىلا', | ||
7 | center: 'ئوتتۇرىغا توغرىلا', | ||
8 | left: 'سولغا توغرىلا', | ||
9 | right: 'ئوڭغا توغرىلا' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/uk.js b/sources/plugins/justify/lang/uk.js new file mode 100644 index 0000000..55ee9c4 --- /dev/null +++ b/sources/plugins/justify/lang/uk.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'uk', { | ||
6 | block: 'По ширині', | ||
7 | center: 'По центру', | ||
8 | left: 'По лівому краю', | ||
9 | right: 'По правому краю' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/vi.js b/sources/plugins/justify/lang/vi.js new file mode 100644 index 0000000..0d9dce2 --- /dev/null +++ b/sources/plugins/justify/lang/vi.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'vi', { | ||
6 | block: 'Canh đều', | ||
7 | center: 'Canh giữa', | ||
8 | left: 'Canh trái', | ||
9 | right: 'Canh phải' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/zh-cn.js b/sources/plugins/justify/lang/zh-cn.js new file mode 100644 index 0000000..f1d3df4 --- /dev/null +++ b/sources/plugins/justify/lang/zh-cn.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'zh-cn', { | ||
6 | block: '两端对齐', | ||
7 | center: '居中', | ||
8 | left: '左对齐', | ||
9 | right: '右对齐' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/lang/zh.js b/sources/plugins/justify/lang/zh.js new file mode 100644 index 0000000..9cdd4fc --- /dev/null +++ b/sources/plugins/justify/lang/zh.js | |||
@@ -0,0 +1,10 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'justify', 'zh', { | ||
6 | block: '左右對齊', | ||
7 | center: '置中', | ||
8 | left: '靠左對齊', | ||
9 | right: '靠右對齊' | ||
10 | } ); | ||
diff --git a/sources/plugins/justify/plugin.js b/sources/plugins/justify/plugin.js new file mode 100644 index 0000000..15163b8 --- /dev/null +++ b/sources/plugins/justify/plugin.js | |||
@@ -0,0 +1,245 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview Justify commands. | ||
8 | */ | ||
9 | |||
10 | ( function() { | ||
11 | function getAlignment( element, useComputedState ) { | ||
12 | useComputedState = useComputedState === undefined || useComputedState; | ||
13 | |||
14 | var align; | ||
15 | if ( useComputedState ) | ||
16 | align = element.getComputedStyle( 'text-align' ); | ||
17 | else { | ||
18 | while ( !element.hasAttribute || !( element.hasAttribute( 'align' ) || element.getStyle( 'text-align' ) ) ) { | ||
19 | var parent = element.getParent(); | ||
20 | if ( !parent ) | ||
21 | break; | ||
22 | element = parent; | ||
23 | } | ||
24 | align = element.getStyle( 'text-align' ) || element.getAttribute( 'align' ) || ''; | ||
25 | } | ||
26 | |||
27 | // Sometimes computed values doesn't tell. | ||
28 | align && ( align = align.replace( /(?:-(?:moz|webkit)-)?(?:start|auto)/i, '' ) ); | ||
29 | |||
30 | !align && useComputedState && ( align = element.getComputedStyle( 'direction' ) == 'rtl' ? 'right' : 'left' ); | ||
31 | |||
32 | return align; | ||
33 | } | ||
34 | |||
35 | function justifyCommand( editor, name, value ) { | ||
36 | this.editor = editor; | ||
37 | this.name = name; | ||
38 | this.value = value; | ||
39 | this.context = 'p'; | ||
40 | |||
41 | var classes = editor.config.justifyClasses, | ||
42 | blockTag = editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div'; | ||
43 | |||
44 | if ( classes ) { | ||
45 | switch ( value ) { | ||
46 | case 'left': | ||
47 | this.cssClassName = classes[ 0 ]; | ||
48 | break; | ||
49 | case 'center': | ||
50 | this.cssClassName = classes[ 1 ]; | ||
51 | break; | ||
52 | case 'right': | ||
53 | this.cssClassName = classes[ 2 ]; | ||
54 | break; | ||
55 | case 'justify': | ||
56 | this.cssClassName = classes[ 3 ]; | ||
57 | break; | ||
58 | } | ||
59 | |||
60 | this.cssClassRegex = new RegExp( '(?:^|\\s+)(?:' + classes.join( '|' ) + ')(?=$|\\s)' ); | ||
61 | this.requiredContent = blockTag + '(' + this.cssClassName + ')'; | ||
62 | } | ||
63 | else { | ||
64 | this.requiredContent = blockTag + '{text-align}'; | ||
65 | } | ||
66 | |||
67 | this.allowedContent = { | ||
68 | 'caption div h1 h2 h3 h4 h5 h6 p pre td th li': { | ||
69 | // Do not add elements, but only text-align style if element is validated by other rule. | ||
70 | propertiesOnly: true, | ||
71 | styles: this.cssClassName ? null : 'text-align', | ||
72 | classes: this.cssClassName || null | ||
73 | } | ||
74 | }; | ||
75 | |||
76 | // In enter mode BR we need to allow here for div, because when non other | ||
77 | // feature allows div justify is the only plugin that uses it. | ||
78 | if ( editor.config.enterMode == CKEDITOR.ENTER_BR ) | ||
79 | this.allowedContent.div = true; | ||
80 | } | ||
81 | |||
82 | function onDirChanged( e ) { | ||
83 | var editor = e.editor; | ||
84 | |||
85 | var range = editor.createRange(); | ||
86 | range.setStartBefore( e.data.node ); | ||
87 | range.setEndAfter( e.data.node ); | ||
88 | |||
89 | var walker = new CKEDITOR.dom.walker( range ), | ||
90 | node; | ||
91 | |||
92 | while ( ( node = walker.next() ) ) { | ||
93 | if ( node.type == CKEDITOR.NODE_ELEMENT ) { | ||
94 | // A child with the defined dir is to be ignored. | ||
95 | if ( !node.equals( e.data.node ) && node.getDirection() ) { | ||
96 | range.setStartAfter( node ); | ||
97 | walker = new CKEDITOR.dom.walker( range ); | ||
98 | continue; | ||
99 | } | ||
100 | |||
101 | // Switch the alignment. | ||
102 | var classes = editor.config.justifyClasses; | ||
103 | if ( classes ) { | ||
104 | // The left align class. | ||
105 | if ( node.hasClass( classes[ 0 ] ) ) { | ||
106 | node.removeClass( classes[ 0 ] ); | ||
107 | node.addClass( classes[ 2 ] ); | ||
108 | } | ||
109 | // The right align class. | ||
110 | else if ( node.hasClass( classes[ 2 ] ) ) { | ||
111 | node.removeClass( classes[ 2 ] ); | ||
112 | node.addClass( classes[ 0 ] ); | ||
113 | } | ||
114 | } | ||
115 | |||
116 | // Always switch CSS margins. | ||
117 | var style = 'text-align'; | ||
118 | var align = node.getStyle( style ); | ||
119 | |||
120 | if ( align == 'left' ) | ||
121 | node.setStyle( style, 'right' ); | ||
122 | else if ( align == 'right' ) | ||
123 | node.setStyle( style, 'left' ); | ||
124 | } | ||
125 | } | ||
126 | } | ||
127 | |||
128 | justifyCommand.prototype = { | ||
129 | exec: function( editor ) { | ||
130 | var selection = editor.getSelection(), | ||
131 | enterMode = editor.config.enterMode; | ||
132 | |||
133 | if ( !selection ) | ||
134 | return; | ||
135 | |||
136 | var bookmarks = selection.createBookmarks(), | ||
137 | ranges = selection.getRanges(); | ||
138 | |||
139 | var cssClassName = this.cssClassName, | ||
140 | iterator, block; | ||
141 | |||
142 | var useComputedState = editor.config.useComputedState; | ||
143 | useComputedState = useComputedState === undefined || useComputedState; | ||
144 | |||
145 | for ( var i = ranges.length - 1; i >= 0; i-- ) { | ||
146 | iterator = ranges[ i ].createIterator(); | ||
147 | iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR; | ||
148 | |||
149 | while ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) ) { | ||
150 | if ( block.isReadOnly() ) | ||
151 | continue; | ||
152 | |||
153 | block.removeAttribute( 'align' ); | ||
154 | block.removeStyle( 'text-align' ); | ||
155 | |||
156 | // Remove any of the alignment classes from the className. | ||
157 | var className = cssClassName && ( block.$.className = CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) ) ); | ||
158 | |||
159 | var apply = ( this.state == CKEDITOR.TRISTATE_OFF ) && ( !useComputedState || ( getAlignment( block, true ) != this.value ) ); | ||
160 | |||
161 | if ( cssClassName ) { | ||
162 | // Append the desired class name. | ||
163 | if ( apply ) | ||
164 | block.addClass( cssClassName ); | ||
165 | else if ( !className ) | ||
166 | block.removeAttribute( 'class' ); | ||
167 | } else if ( apply ) { | ||
168 | block.setStyle( 'text-align', this.value ); | ||
169 | } | ||
170 | } | ||
171 | |||
172 | } | ||
173 | |||
174 | editor.focus(); | ||
175 | editor.forceNextSelectionCheck(); | ||
176 | selection.selectBookmarks( bookmarks ); | ||
177 | }, | ||
178 | |||
179 | refresh: function( editor, path ) { | ||
180 | var firstBlock = path.block || path.blockLimit; | ||
181 | |||
182 | this.setState( firstBlock.getName() != 'body' && getAlignment( firstBlock, this.editor.config.useComputedState ) == this.value ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); | ||
183 | } | ||
184 | }; | ||
185 | |||
186 | CKEDITOR.plugins.add( 'justify', { | ||
187 | // jscs:disable maximumLineLength | ||
188 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
189 | // jscs:enable maximumLineLength | ||
190 | icons: 'justifyblock,justifycenter,justifyleft,justifyright', // %REMOVE_LINE_CORE% | ||
191 | hidpi: true, // %REMOVE_LINE_CORE% | ||
192 | init: function( editor ) { | ||
193 | if ( editor.blockless ) | ||
194 | return; | ||
195 | |||
196 | var left = new justifyCommand( editor, 'justifyleft', 'left' ), | ||
197 | center = new justifyCommand( editor, 'justifycenter', 'center' ), | ||
198 | right = new justifyCommand( editor, 'justifyright', 'right' ), | ||
199 | justify = new justifyCommand( editor, 'justifyblock', 'justify' ); | ||
200 | |||
201 | editor.addCommand( 'justifyleft', left ); | ||
202 | editor.addCommand( 'justifycenter', center ); | ||
203 | editor.addCommand( 'justifyright', right ); | ||
204 | editor.addCommand( 'justifyblock', justify ); | ||
205 | |||
206 | if ( editor.ui.addButton ) { | ||
207 | editor.ui.addButton( 'JustifyLeft', { | ||
208 | label: editor.lang.justify.left, | ||
209 | command: 'justifyleft', | ||
210 | toolbar: 'align,10' | ||
211 | } ); | ||
212 | editor.ui.addButton( 'JustifyCenter', { | ||
213 | label: editor.lang.justify.center, | ||
214 | command: 'justifycenter', | ||
215 | toolbar: 'align,20' | ||
216 | } ); | ||
217 | editor.ui.addButton( 'JustifyRight', { | ||
218 | label: editor.lang.justify.right, | ||
219 | command: 'justifyright', | ||
220 | toolbar: 'align,30' | ||
221 | } ); | ||
222 | editor.ui.addButton( 'JustifyBlock', { | ||
223 | label: editor.lang.justify.block, | ||
224 | command: 'justifyblock', | ||
225 | toolbar: 'align,40' | ||
226 | } ); | ||
227 | } | ||
228 | |||
229 | editor.on( 'dirChanged', onDirChanged ); | ||
230 | } | ||
231 | } ); | ||
232 | } )(); | ||
233 | |||
234 | /** | ||
235 | * List of classes to use for aligning the contents. If it's `null`, no classes will be used | ||
236 | * and instead the corresponding CSS values will be used. | ||
237 | * | ||
238 | * The array should contain 4 members, in the following order: left, center, right, justify. | ||
239 | * | ||
240 | * // Use the classes 'AlignLeft', 'AlignCenter', 'AlignRight', 'AlignJustify' | ||
241 | * config.justifyClasses = [ 'AlignLeft', 'AlignCenter', 'AlignRight', 'AlignJustify' ]; | ||
242 | * | ||
243 | * @cfg {Array} [justifyClasses=null] | ||
244 | * @member CKEDITOR.config | ||
245 | */ | ||
diff --git a/sources/plugins/link/dialogs/anchor.js b/sources/plugins/link/dialogs/anchor.js new file mode 100644 index 0000000..e544275 --- /dev/null +++ b/sources/plugins/link/dialogs/anchor.js | |||
@@ -0,0 +1,105 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.dialog.add( 'anchor', function( editor ) { | ||
7 | // Function called in onShow to load selected element. | ||
8 | var loadElements = function( element ) { | ||
9 | this._.selectedElement = element; | ||
10 | |||
11 | var attributeValue = element.data( 'cke-saved-name' ); | ||
12 | this.setValueOf( 'info', 'txtName', attributeValue || '' ); | ||
13 | }; | ||
14 | |||
15 | function createFakeAnchor( editor, attributes ) { | ||
16 | return editor.createFakeElement( editor.document.createElement( 'a', { | ||
17 | attributes: attributes | ||
18 | } ), 'cke_anchor', 'anchor' ); | ||
19 | } | ||
20 | |||
21 | return { | ||
22 | title: editor.lang.link.anchor.title, | ||
23 | minWidth: 300, | ||
24 | minHeight: 60, | ||
25 | onOk: function() { | ||
26 | var name = CKEDITOR.tools.trim( this.getValueOf( 'info', 'txtName' ) ); | ||
27 | var attributes = { | ||
28 | id: name, | ||
29 | name: name, | ||
30 | 'data-cke-saved-name': name | ||
31 | }; | ||
32 | |||
33 | if ( this._.selectedElement ) { | ||
34 | if ( this._.selectedElement.data( 'cke-realelement' ) ) { | ||
35 | var newFake = createFakeAnchor( editor, attributes ); | ||
36 | newFake.replace( this._.selectedElement ); | ||
37 | |||
38 | // Selecting fake element for IE. (#11377) | ||
39 | if ( CKEDITOR.env.ie ) | ||
40 | editor.getSelection().selectElement( newFake ); | ||
41 | } else { | ||
42 | this._.selectedElement.setAttributes( attributes ); | ||
43 | } | ||
44 | } else { | ||
45 | var sel = editor.getSelection(), | ||
46 | range = sel && sel.getRanges()[ 0 ]; | ||
47 | |||
48 | // Empty anchor | ||
49 | if ( range.collapsed ) { | ||
50 | var anchor = createFakeAnchor( editor, attributes ); | ||
51 | range.insertNode( anchor ); | ||
52 | } else { | ||
53 | if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) | ||
54 | attributes[ 'class' ] = 'cke_anchor'; | ||
55 | |||
56 | // Apply style. | ||
57 | var style = new CKEDITOR.style( { element: 'a', attributes: attributes } ); | ||
58 | style.type = CKEDITOR.STYLE_INLINE; | ||
59 | editor.applyStyle( style ); | ||
60 | } | ||
61 | } | ||
62 | }, | ||
63 | |||
64 | onHide: function() { | ||
65 | delete this._.selectedElement; | ||
66 | }, | ||
67 | |||
68 | onShow: function() { | ||
69 | var sel = editor.getSelection(), | ||
70 | fullySelected = sel.getSelectedElement(), | ||
71 | fakeSelected = fullySelected && fullySelected.data( 'cke-realelement' ), | ||
72 | linkElement = fakeSelected ? | ||
73 | CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, fullySelected ) : | ||
74 | CKEDITOR.plugins.link.getSelectedLink( editor ); | ||
75 | |||
76 | if ( linkElement ) { | ||
77 | loadElements.call( this, linkElement ); | ||
78 | !fakeSelected && sel.selectElement( linkElement ); | ||
79 | |||
80 | if ( fullySelected ) | ||
81 | this._.selectedElement = fullySelected; | ||
82 | } | ||
83 | |||
84 | this.getContentElement( 'info', 'txtName' ).focus(); | ||
85 | }, | ||
86 | contents: [ { | ||
87 | id: 'info', | ||
88 | label: editor.lang.link.anchor.title, | ||
89 | accessKey: 'I', | ||
90 | elements: [ { | ||
91 | type: 'text', | ||
92 | id: 'txtName', | ||
93 | label: editor.lang.link.anchor.name, | ||
94 | required: true, | ||
95 | validate: function() { | ||
96 | if ( !this.getValue() ) { | ||
97 | alert( editor.lang.link.anchor.errorName ); // jshint ignore:line | ||
98 | return false; | ||
99 | } | ||
100 | return true; | ||
101 | } | ||
102 | } ] | ||
103 | } ] | ||
104 | }; | ||
105 | } ); | ||
diff --git a/sources/plugins/link/dialogs/link.js b/sources/plugins/link/dialogs/link.js new file mode 100644 index 0000000..35975c7 --- /dev/null +++ b/sources/plugins/link/dialogs/link.js | |||
@@ -0,0 +1,904 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | 'use strict'; | ||
7 | |||
8 | ( function() { | ||
9 | CKEDITOR.dialog.add( 'link', function( editor ) { | ||
10 | var plugin = CKEDITOR.plugins.link; | ||
11 | |||
12 | // Handles the event when the "Target" selection box is changed. | ||
13 | var targetChanged = function() { | ||
14 | var dialog = this.getDialog(), | ||
15 | popupFeatures = dialog.getContentElement( 'target', 'popupFeatures' ), | ||
16 | targetName = dialog.getContentElement( 'target', 'linkTargetName' ), | ||
17 | value = this.getValue(); | ||
18 | |||
19 | if ( !popupFeatures || !targetName ) | ||
20 | return; | ||
21 | |||
22 | popupFeatures = popupFeatures.getElement(); | ||
23 | popupFeatures.hide(); | ||
24 | targetName.setValue( '' ); | ||
25 | |||
26 | switch ( value ) { | ||
27 | case 'frame': | ||
28 | targetName.setLabel( editor.lang.link.targetFrameName ); | ||
29 | targetName.getElement().show(); | ||
30 | break; | ||
31 | case 'popup': | ||
32 | popupFeatures.show(); | ||
33 | targetName.setLabel( editor.lang.link.targetPopupName ); | ||
34 | targetName.getElement().show(); | ||
35 | break; | ||
36 | default: | ||
37 | targetName.setValue( value ); | ||
38 | targetName.getElement().hide(); | ||
39 | break; | ||
40 | } | ||
41 | |||
42 | }; | ||
43 | |||
44 | // Handles the event when the "Type" selection box is changed. | ||
45 | var linkTypeChanged = function() { | ||
46 | var dialog = this.getDialog(), | ||
47 | partIds = [ 'urlOptions', 'anchorOptions', 'emailOptions' ], | ||
48 | typeValue = this.getValue(), | ||
49 | uploadTab = dialog.definition.getContents( 'upload' ), | ||
50 | uploadInitiallyHidden = uploadTab && uploadTab.hidden; | ||
51 | |||
52 | if ( typeValue == 'url' ) { | ||
53 | if ( editor.config.linkShowTargetTab ) | ||
54 | dialog.showPage( 'target' ); | ||
55 | if ( !uploadInitiallyHidden ) | ||
56 | dialog.showPage( 'upload' ); | ||
57 | } else { | ||
58 | dialog.hidePage( 'target' ); | ||
59 | if ( !uploadInitiallyHidden ) | ||
60 | dialog.hidePage( 'upload' ); | ||
61 | } | ||
62 | |||
63 | for ( var i = 0; i < partIds.length; i++ ) { | ||
64 | var element = dialog.getContentElement( 'info', partIds[ i ] ); | ||
65 | if ( !element ) | ||
66 | continue; | ||
67 | |||
68 | element = element.getElement().getParent().getParent(); | ||
69 | if ( partIds[ i ] == typeValue + 'Options' ) | ||
70 | element.show(); | ||
71 | else | ||
72 | element.hide(); | ||
73 | } | ||
74 | |||
75 | dialog.layout(); | ||
76 | }; | ||
77 | |||
78 | var setupParams = function( page, data ) { | ||
79 | if ( data[ page ] ) | ||
80 | this.setValue( data[ page ][ this.id ] || '' ); | ||
81 | }; | ||
82 | |||
83 | var setupPopupParams = function( data ) { | ||
84 | return setupParams.call( this, 'target', data ); | ||
85 | }; | ||
86 | |||
87 | var setupAdvParams = function( data ) { | ||
88 | return setupParams.call( this, 'advanced', data ); | ||
89 | }; | ||
90 | |||
91 | var commitParams = function( page, data ) { | ||
92 | if ( !data[ page ] ) | ||
93 | data[ page ] = {}; | ||
94 | |||
95 | data[ page ][ this.id ] = this.getValue() || ''; | ||
96 | }; | ||
97 | |||
98 | var commitPopupParams = function( data ) { | ||
99 | return commitParams.call( this, 'target', data ); | ||
100 | }; | ||
101 | |||
102 | var commitAdvParams = function( data ) { | ||
103 | return commitParams.call( this, 'advanced', data ); | ||
104 | }; | ||
105 | |||
106 | var commonLang = editor.lang.common, | ||
107 | linkLang = editor.lang.link, | ||
108 | anchors; | ||
109 | |||
110 | return { | ||
111 | title: linkLang.title, | ||
112 | minWidth: 350, | ||
113 | minHeight: 230, | ||
114 | contents: [ { | ||
115 | id: 'info', | ||
116 | label: linkLang.info, | ||
117 | title: linkLang.info, | ||
118 | elements: [ { | ||
119 | id: 'linkType', | ||
120 | type: 'select', | ||
121 | label: linkLang.type, | ||
122 | 'default': 'url', | ||
123 | items: [ | ||
124 | [ linkLang.toUrl, 'url' ], | ||
125 | [ linkLang.toAnchor, 'anchor' ], | ||
126 | [ linkLang.toEmail, 'email' ] | ||
127 | ], | ||
128 | onChange: linkTypeChanged, | ||
129 | setup: function( data ) { | ||
130 | this.setValue( data.type || 'url' ); | ||
131 | }, | ||
132 | commit: function( data ) { | ||
133 | data.type = this.getValue(); | ||
134 | } | ||
135 | }, | ||
136 | { | ||
137 | type: 'vbox', | ||
138 | id: 'urlOptions', | ||
139 | children: [ { | ||
140 | type: 'hbox', | ||
141 | widths: [ '25%', '75%' ], | ||
142 | children: [ { | ||
143 | id: 'protocol', | ||
144 | type: 'select', | ||
145 | label: commonLang.protocol, | ||
146 | 'default': 'http://', | ||
147 | items: [ | ||
148 | // Force 'ltr' for protocol names in BIDI. (#5433) | ||
149 | [ 'http://\u200E', 'http://' ], | ||
150 | [ 'https://\u200E', 'https://' ], | ||
151 | [ 'ftp://\u200E', 'ftp://' ], | ||
152 | [ 'news://\u200E', 'news://' ], | ||
153 | [ linkLang.other, '' ] | ||
154 | ], | ||
155 | setup: function( data ) { | ||
156 | if ( data.url ) | ||
157 | this.setValue( data.url.protocol || '' ); | ||
158 | }, | ||
159 | commit: function( data ) { | ||
160 | if ( !data.url ) | ||
161 | data.url = {}; | ||
162 | |||
163 | data.url.protocol = this.getValue(); | ||
164 | } | ||
165 | }, | ||
166 | { | ||
167 | type: 'text', | ||
168 | id: 'url', | ||
169 | label: commonLang.url, | ||
170 | required: true, | ||
171 | onLoad: function() { | ||
172 | this.allowOnChange = true; | ||
173 | }, | ||
174 | onKeyUp: function() { | ||
175 | this.allowOnChange = false; | ||
176 | var protocolCmb = this.getDialog().getContentElement( 'info', 'protocol' ), | ||
177 | url = this.getValue(), | ||
178 | urlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/i, | ||
179 | urlOnChangeTestOther = /^((javascript:)|[#\/\.\?])/i; | ||
180 | |||
181 | var protocol = urlOnChangeProtocol.exec( url ); | ||
182 | if ( protocol ) { | ||
183 | this.setValue( url.substr( protocol[ 0 ].length ) ); | ||
184 | protocolCmb.setValue( protocol[ 0 ].toLowerCase() ); | ||
185 | } else if ( urlOnChangeTestOther.test( url ) ) { | ||
186 | protocolCmb.setValue( '' ); | ||
187 | } | ||
188 | |||
189 | this.allowOnChange = true; | ||
190 | }, | ||
191 | onChange: function() { | ||
192 | if ( this.allowOnChange ) // Dont't call on dialog load. | ||
193 | this.onKeyUp(); | ||
194 | }, | ||
195 | validate: function() { | ||
196 | var dialog = this.getDialog(); | ||
197 | |||
198 | if ( dialog.getContentElement( 'info', 'linkType' ) && dialog.getValueOf( 'info', 'linkType' ) != 'url' ) | ||
199 | return true; | ||
200 | |||
201 | if ( !editor.config.linkJavaScriptLinksAllowed && ( /javascript\:/ ).test( this.getValue() ) ) { | ||
202 | alert( commonLang.invalidValue ); // jshint ignore:line | ||
203 | return false; | ||
204 | } | ||
205 | |||
206 | if ( this.getDialog().fakeObj ) // Edit Anchor. | ||
207 | return true; | ||
208 | |||
209 | var func = CKEDITOR.dialog.validate.notEmpty( linkLang.noUrl ); | ||
210 | return func.apply( this ); | ||
211 | }, | ||
212 | setup: function( data ) { | ||
213 | this.allowOnChange = false; | ||
214 | if ( data.url ) | ||
215 | this.setValue( data.url.url ); | ||
216 | this.allowOnChange = true; | ||
217 | |||
218 | }, | ||
219 | commit: function( data ) { | ||
220 | // IE will not trigger the onChange event if the mouse has been used | ||
221 | // to carry all the operations #4724 | ||
222 | this.onChange(); | ||
223 | |||
224 | if ( !data.url ) | ||
225 | data.url = {}; | ||
226 | |||
227 | data.url.url = this.getValue(); | ||
228 | this.allowOnChange = false; | ||
229 | } | ||
230 | } ], | ||
231 | setup: function() { | ||
232 | if ( !this.getDialog().getContentElement( 'info', 'linkType' ) ) | ||
233 | this.getElement().show(); | ||
234 | } | ||
235 | }, | ||
236 | { | ||
237 | type: 'button', | ||
238 | id: 'browse', | ||
239 | hidden: 'true', | ||
240 | filebrowser: 'info:url', | ||
241 | label: commonLang.browseServer | ||
242 | } ] | ||
243 | }, | ||
244 | { | ||
245 | type: 'vbox', | ||
246 | id: 'anchorOptions', | ||
247 | width: 260, | ||
248 | align: 'center', | ||
249 | padding: 0, | ||
250 | children: [ { | ||
251 | type: 'fieldset', | ||
252 | id: 'selectAnchorText', | ||
253 | label: linkLang.selectAnchor, | ||
254 | setup: function() { | ||
255 | anchors = plugin.getEditorAnchors( editor ); | ||
256 | |||
257 | this.getElement()[ anchors && anchors.length ? 'show' : 'hide' ](); | ||
258 | }, | ||
259 | children: [ { | ||
260 | type: 'hbox', | ||
261 | id: 'selectAnchor', | ||
262 | children: [ { | ||
263 | type: 'select', | ||
264 | id: 'anchorName', | ||
265 | 'default': '', | ||
266 | label: linkLang.anchorName, | ||
267 | style: 'width: 100%;', | ||
268 | items: [ | ||
269 | [ '' ] | ||
270 | ], | ||
271 | setup: function( data ) { | ||
272 | this.clear(); | ||
273 | this.add( '' ); | ||
274 | |||
275 | if ( anchors ) { | ||
276 | for ( var i = 0; i < anchors.length; i++ ) { | ||
277 | if ( anchors[ i ].name ) | ||
278 | this.add( anchors[ i ].name ); | ||
279 | } | ||
280 | } | ||
281 | |||
282 | if ( data.anchor ) | ||
283 | this.setValue( data.anchor.name ); | ||
284 | |||
285 | var linkType = this.getDialog().getContentElement( 'info', 'linkType' ); | ||
286 | if ( linkType && linkType.getValue() == 'email' ) | ||
287 | this.focus(); | ||
288 | }, | ||
289 | commit: function( data ) { | ||
290 | if ( !data.anchor ) | ||
291 | data.anchor = {}; | ||
292 | |||
293 | data.anchor.name = this.getValue(); | ||
294 | } | ||
295 | }, | ||
296 | { | ||
297 | type: 'select', | ||
298 | id: 'anchorId', | ||
299 | 'default': '', | ||
300 | label: linkLang.anchorId, | ||
301 | style: 'width: 100%;', | ||
302 | items: [ | ||
303 | [ '' ] | ||
304 | ], | ||
305 | setup: function( data ) { | ||
306 | this.clear(); | ||
307 | this.add( '' ); | ||
308 | |||
309 | if ( anchors ) { | ||
310 | for ( var i = 0; i < anchors.length; i++ ) { | ||
311 | if ( anchors[ i ].id ) | ||
312 | this.add( anchors[ i ].id ); | ||
313 | } | ||
314 | } | ||
315 | |||
316 | if ( data.anchor ) | ||
317 | this.setValue( data.anchor.id ); | ||
318 | }, | ||
319 | commit: function( data ) { | ||
320 | if ( !data.anchor ) | ||
321 | data.anchor = {}; | ||
322 | |||
323 | data.anchor.id = this.getValue(); | ||
324 | } | ||
325 | } ], | ||
326 | setup: function() { | ||
327 | this.getElement()[ anchors && anchors.length ? 'show' : 'hide' ](); | ||
328 | } | ||
329 | } ] | ||
330 | }, | ||
331 | { | ||
332 | type: 'html', | ||
333 | id: 'noAnchors', | ||
334 | style: 'text-align: center;', | ||
335 | html: '<div role="note" tabIndex="-1">' + CKEDITOR.tools.htmlEncode( linkLang.noAnchors ) + '</div>', | ||
336 | // Focus the first element defined in above html. | ||
337 | focus: true, | ||
338 | setup: function() { | ||
339 | this.getElement()[ anchors && anchors.length ? 'hide' : 'show' ](); | ||
340 | } | ||
341 | } ], | ||
342 | setup: function() { | ||
343 | if ( !this.getDialog().getContentElement( 'info', 'linkType' ) ) | ||
344 | this.getElement().hide(); | ||
345 | } | ||
346 | }, | ||
347 | { | ||
348 | type: 'vbox', | ||
349 | id: 'emailOptions', | ||
350 | padding: 1, | ||
351 | children: [ { | ||
352 | type: 'text', | ||
353 | id: 'emailAddress', | ||
354 | label: linkLang.emailAddress, | ||
355 | required: true, | ||
356 | validate: function() { | ||
357 | var dialog = this.getDialog(); | ||
358 | |||
359 | if ( !dialog.getContentElement( 'info', 'linkType' ) || dialog.getValueOf( 'info', 'linkType' ) != 'email' ) | ||
360 | return true; | ||
361 | |||
362 | var func = CKEDITOR.dialog.validate.notEmpty( linkLang.noEmail ); | ||
363 | return func.apply( this ); | ||
364 | }, | ||
365 | setup: function( data ) { | ||
366 | if ( data.email ) | ||
367 | this.setValue( data.email.address ); | ||
368 | |||
369 | var linkType = this.getDialog().getContentElement( 'info', 'linkType' ); | ||
370 | if ( linkType && linkType.getValue() == 'email' ) | ||
371 | this.select(); | ||
372 | }, | ||
373 | commit: function( data ) { | ||
374 | if ( !data.email ) | ||
375 | data.email = {}; | ||
376 | |||
377 | data.email.address = this.getValue(); | ||
378 | } | ||
379 | }, | ||
380 | { | ||
381 | type: 'text', | ||
382 | id: 'emailSubject', | ||
383 | label: linkLang.emailSubject, | ||
384 | setup: function( data ) { | ||
385 | if ( data.email ) | ||
386 | this.setValue( data.email.subject ); | ||
387 | }, | ||
388 | commit: function( data ) { | ||
389 | if ( !data.email ) | ||
390 | data.email = {}; | ||
391 | |||
392 | data.email.subject = this.getValue(); | ||
393 | } | ||
394 | }, | ||
395 | { | ||
396 | type: 'textarea', | ||
397 | id: 'emailBody', | ||
398 | label: linkLang.emailBody, | ||
399 | rows: 3, | ||
400 | 'default': '', | ||
401 | setup: function( data ) { | ||
402 | if ( data.email ) | ||
403 | this.setValue( data.email.body ); | ||
404 | }, | ||
405 | commit: function( data ) { | ||
406 | if ( !data.email ) | ||
407 | data.email = {}; | ||
408 | |||
409 | data.email.body = this.getValue(); | ||
410 | } | ||
411 | } ], | ||
412 | setup: function() { | ||
413 | if ( !this.getDialog().getContentElement( 'info', 'linkType' ) ) | ||
414 | this.getElement().hide(); | ||
415 | } | ||
416 | } ] | ||
417 | }, | ||
418 | { | ||
419 | id: 'target', | ||
420 | requiredContent: 'a[target]', // This is not fully correct, because some target option requires JS. | ||
421 | label: linkLang.target, | ||
422 | title: linkLang.target, | ||
423 | elements: [ { | ||
424 | type: 'hbox', | ||
425 | widths: [ '50%', '50%' ], | ||
426 | children: [ { | ||
427 | type: 'select', | ||
428 | id: 'linkTargetType', | ||
429 | label: commonLang.target, | ||
430 | 'default': 'notSet', | ||
431 | style: 'width : 100%;', | ||
432 | 'items': [ | ||
433 | [ commonLang.notSet, 'notSet' ], | ||
434 | [ linkLang.targetFrame, 'frame' ], | ||
435 | [ linkLang.targetPopup, 'popup' ], | ||
436 | [ commonLang.targetNew, '_blank' ], | ||
437 | [ commonLang.targetTop, '_top' ], | ||
438 | [ commonLang.targetSelf, '_self' ], | ||
439 | [ commonLang.targetParent, '_parent' ] | ||
440 | ], | ||
441 | onChange: targetChanged, | ||
442 | setup: function( data ) { | ||
443 | if ( data.target ) | ||
444 | this.setValue( data.target.type || 'notSet' ); | ||
445 | targetChanged.call( this ); | ||
446 | }, | ||
447 | commit: function( data ) { | ||
448 | if ( !data.target ) | ||
449 | data.target = {}; | ||
450 | |||
451 | data.target.type = this.getValue(); | ||
452 | } | ||
453 | }, | ||
454 | { | ||
455 | type: 'text', | ||
456 | id: 'linkTargetName', | ||
457 | label: linkLang.targetFrameName, | ||
458 | 'default': '', | ||
459 | setup: function( data ) { | ||
460 | if ( data.target ) | ||
461 | this.setValue( data.target.name ); | ||
462 | }, | ||
463 | commit: function( data ) { | ||
464 | if ( !data.target ) | ||
465 | data.target = {}; | ||
466 | |||
467 | data.target.name = this.getValue().replace( /([^\x00-\x7F]|\s)/gi, '' ); | ||
468 | } | ||
469 | } ] | ||
470 | }, | ||
471 | { | ||
472 | type: 'vbox', | ||
473 | width: '100%', | ||
474 | align: 'center', | ||
475 | padding: 2, | ||
476 | id: 'popupFeatures', | ||
477 | children: [ { | ||
478 | type: 'fieldset', | ||
479 | label: linkLang.popupFeatures, | ||
480 | children: [ { | ||
481 | type: 'hbox', | ||
482 | children: [ { | ||
483 | type: 'checkbox', | ||
484 | id: 'resizable', | ||
485 | label: linkLang.popupResizable, | ||
486 | setup: setupPopupParams, | ||
487 | commit: commitPopupParams | ||
488 | }, | ||
489 | { | ||
490 | type: 'checkbox', | ||
491 | id: 'status', | ||
492 | label: linkLang.popupStatusBar, | ||
493 | setup: setupPopupParams, | ||
494 | commit: commitPopupParams | ||
495 | |||
496 | } ] | ||
497 | }, | ||
498 | { | ||
499 | type: 'hbox', | ||
500 | children: [ { | ||
501 | type: 'checkbox', | ||
502 | id: 'location', | ||
503 | label: linkLang.popupLocationBar, | ||
504 | setup: setupPopupParams, | ||
505 | commit: commitPopupParams | ||
506 | |||
507 | }, | ||
508 | { | ||
509 | type: 'checkbox', | ||
510 | id: 'toolbar', | ||
511 | label: linkLang.popupToolbar, | ||
512 | setup: setupPopupParams, | ||
513 | commit: commitPopupParams | ||
514 | |||
515 | } ] | ||
516 | }, | ||
517 | { | ||
518 | type: 'hbox', | ||
519 | children: [ { | ||
520 | type: 'checkbox', | ||
521 | id: 'menubar', | ||
522 | label: linkLang.popupMenuBar, | ||
523 | setup: setupPopupParams, | ||
524 | commit: commitPopupParams | ||
525 | |||
526 | }, | ||
527 | { | ||
528 | type: 'checkbox', | ||
529 | id: 'fullscreen', | ||
530 | label: linkLang.popupFullScreen, | ||
531 | setup: setupPopupParams, | ||
532 | commit: commitPopupParams | ||
533 | |||
534 | } ] | ||
535 | }, | ||
536 | { | ||
537 | type: 'hbox', | ||
538 | children: [ { | ||
539 | type: 'checkbox', | ||
540 | id: 'scrollbars', | ||
541 | label: linkLang.popupScrollBars, | ||
542 | setup: setupPopupParams, | ||
543 | commit: commitPopupParams | ||
544 | |||
545 | }, | ||
546 | { | ||
547 | type: 'checkbox', | ||
548 | id: 'dependent', | ||
549 | label: linkLang.popupDependent, | ||
550 | setup: setupPopupParams, | ||
551 | commit: commitPopupParams | ||
552 | |||
553 | } ] | ||
554 | }, | ||
555 | { | ||
556 | type: 'hbox', | ||
557 | children: [ { | ||
558 | type: 'text', | ||
559 | widths: [ '50%', '50%' ], | ||
560 | labelLayout: 'horizontal', | ||
561 | label: commonLang.width, | ||
562 | id: 'width', | ||
563 | setup: setupPopupParams, | ||
564 | commit: commitPopupParams | ||
565 | |||
566 | }, | ||
567 | { | ||
568 | type: 'text', | ||
569 | labelLayout: 'horizontal', | ||
570 | widths: [ '50%', '50%' ], | ||
571 | label: linkLang.popupLeft, | ||
572 | id: 'left', | ||
573 | setup: setupPopupParams, | ||
574 | commit: commitPopupParams | ||
575 | |||
576 | } ] | ||
577 | }, | ||
578 | { | ||
579 | type: 'hbox', | ||
580 | children: [ { | ||
581 | type: 'text', | ||
582 | labelLayout: 'horizontal', | ||
583 | widths: [ '50%', '50%' ], | ||
584 | label: commonLang.height, | ||
585 | id: 'height', | ||
586 | setup: setupPopupParams, | ||
587 | commit: commitPopupParams | ||
588 | |||
589 | }, | ||
590 | { | ||
591 | type: 'text', | ||
592 | labelLayout: 'horizontal', | ||
593 | label: linkLang.popupTop, | ||
594 | widths: [ '50%', '50%' ], | ||
595 | id: 'top', | ||
596 | setup: setupPopupParams, | ||
597 | commit: commitPopupParams | ||
598 | |||
599 | } ] | ||
600 | } ] | ||
601 | } ] | ||
602 | } ] | ||
603 | }, | ||
604 | { | ||
605 | id: 'upload', | ||
606 | label: linkLang.upload, | ||
607 | title: linkLang.upload, | ||
608 | hidden: true, | ||
609 | filebrowser: 'uploadButton', | ||
610 | elements: [ { | ||
611 | type: 'file', | ||
612 | id: 'upload', | ||
613 | label: commonLang.upload, | ||
614 | style: 'height:40px', | ||
615 | size: 29 | ||
616 | }, | ||
617 | { | ||
618 | type: 'fileButton', | ||
619 | id: 'uploadButton', | ||
620 | label: commonLang.uploadSubmit, | ||
621 | filebrowser: 'info:url', | ||
622 | 'for': [ 'upload', 'upload' ] | ||
623 | } ] | ||
624 | }, | ||
625 | { | ||
626 | id: 'advanced', | ||
627 | label: linkLang.advanced, | ||
628 | title: linkLang.advanced, | ||
629 | elements: [ { | ||
630 | type: 'vbox', | ||
631 | padding: 1, | ||
632 | children: [ { | ||
633 | type: 'hbox', | ||
634 | widths: [ '45%', '35%', '20%' ], | ||
635 | children: [ { | ||
636 | type: 'text', | ||
637 | id: 'advId', | ||
638 | requiredContent: 'a[id]', | ||
639 | label: linkLang.id, | ||
640 | setup: setupAdvParams, | ||
641 | commit: commitAdvParams | ||
642 | }, | ||
643 | { | ||
644 | type: 'select', | ||
645 | id: 'advLangDir', | ||
646 | requiredContent: 'a[dir]', | ||
647 | label: linkLang.langDir, | ||
648 | 'default': '', | ||
649 | style: 'width:110px', | ||
650 | items: [ | ||
651 | [ commonLang.notSet, '' ], | ||
652 | [ linkLang.langDirLTR, 'ltr' ], | ||
653 | [ linkLang.langDirRTL, 'rtl' ] | ||
654 | ], | ||
655 | setup: setupAdvParams, | ||
656 | commit: commitAdvParams | ||
657 | }, | ||
658 | { | ||
659 | type: 'text', | ||
660 | id: 'advAccessKey', | ||
661 | requiredContent: 'a[accesskey]', | ||
662 | width: '80px', | ||
663 | label: linkLang.acccessKey, | ||
664 | maxLength: 1, | ||
665 | setup: setupAdvParams, | ||
666 | commit: commitAdvParams | ||
667 | |||
668 | } ] | ||
669 | }, | ||
670 | { | ||
671 | type: 'hbox', | ||
672 | widths: [ '45%', '35%', '20%' ], | ||
673 | children: [ { | ||
674 | type: 'text', | ||
675 | label: linkLang.name, | ||
676 | id: 'advName', | ||
677 | requiredContent: 'a[name]', | ||
678 | setup: setupAdvParams, | ||
679 | commit: commitAdvParams | ||
680 | |||
681 | }, | ||
682 | { | ||
683 | type: 'text', | ||
684 | label: linkLang.langCode, | ||
685 | id: 'advLangCode', | ||
686 | requiredContent: 'a[lang]', | ||
687 | width: '110px', | ||
688 | 'default': '', | ||
689 | setup: setupAdvParams, | ||
690 | commit: commitAdvParams | ||
691 | |||
692 | }, | ||
693 | { | ||
694 | type: 'text', | ||
695 | label: linkLang.tabIndex, | ||
696 | id: 'advTabIndex', | ||
697 | requiredContent: 'a[tabindex]', | ||
698 | width: '80px', | ||
699 | maxLength: 5, | ||
700 | setup: setupAdvParams, | ||
701 | commit: commitAdvParams | ||
702 | |||
703 | } ] | ||
704 | } ] | ||
705 | }, | ||
706 | { | ||
707 | type: 'vbox', | ||
708 | padding: 1, | ||
709 | children: [ { | ||
710 | type: 'hbox', | ||
711 | widths: [ '45%', '55%' ], | ||
712 | children: [ { | ||
713 | type: 'text', | ||
714 | label: linkLang.advisoryTitle, | ||
715 | requiredContent: 'a[title]', | ||
716 | 'default': '', | ||
717 | id: 'advTitle', | ||
718 | setup: setupAdvParams, | ||
719 | commit: commitAdvParams | ||
720 | |||
721 | }, | ||
722 | { | ||
723 | type: 'text', | ||
724 | label: linkLang.advisoryContentType, | ||
725 | requiredContent: 'a[type]', | ||
726 | 'default': '', | ||
727 | id: 'advContentType', | ||
728 | setup: setupAdvParams, | ||
729 | commit: commitAdvParams | ||
730 | |||
731 | } ] | ||
732 | }, | ||
733 | { | ||
734 | type: 'hbox', | ||
735 | widths: [ '45%', '55%' ], | ||
736 | children: [ { | ||
737 | type: 'text', | ||
738 | label: linkLang.cssClasses, | ||
739 | requiredContent: 'a(cke-xyz)', // Random text like 'xyz' will check if all are allowed. | ||
740 | 'default': '', | ||
741 | id: 'advCSSClasses', | ||
742 | setup: setupAdvParams, | ||
743 | commit: commitAdvParams | ||
744 | |||
745 | }, | ||
746 | { | ||
747 | type: 'text', | ||
748 | label: linkLang.charset, | ||
749 | requiredContent: 'a[charset]', | ||
750 | 'default': '', | ||
751 | id: 'advCharset', | ||
752 | setup: setupAdvParams, | ||
753 | commit: commitAdvParams | ||
754 | |||
755 | } ] | ||
756 | }, | ||
757 | { | ||
758 | type: 'hbox', | ||
759 | widths: [ '45%', '55%' ], | ||
760 | children: [ { | ||
761 | type: 'text', | ||
762 | label: linkLang.rel, | ||
763 | requiredContent: 'a[rel]', | ||
764 | 'default': '', | ||
765 | id: 'advRel', | ||
766 | setup: setupAdvParams, | ||
767 | commit: commitAdvParams | ||
768 | }, | ||
769 | { | ||
770 | type: 'text', | ||
771 | label: linkLang.styles, | ||
772 | requiredContent: 'a{cke-xyz}', // Random text like 'xyz' will check if all are allowed. | ||
773 | 'default': '', | ||
774 | id: 'advStyles', | ||
775 | validate: CKEDITOR.dialog.validate.inlineStyle( editor.lang.common.invalidInlineStyle ), | ||
776 | setup: setupAdvParams, | ||
777 | commit: commitAdvParams | ||
778 | } ] | ||
779 | } ] | ||
780 | } ] | ||
781 | } ], | ||
782 | onShow: function() { | ||
783 | var editor = this.getParentEditor(), | ||
784 | selection = editor.getSelection(), | ||
785 | element = null; | ||
786 | |||
787 | // Fill in all the relevant fields if there's already one link selected. | ||
788 | if ( ( element = plugin.getSelectedLink( editor ) ) && element.hasAttribute( 'href' ) ) { | ||
789 | // Don't change selection if some element is already selected. | ||
790 | // For example - don't destroy fake selection. | ||
791 | if ( !selection.getSelectedElement() ) | ||
792 | selection.selectElement( element ); | ||
793 | } else { | ||
794 | element = null; | ||
795 | } | ||
796 | |||
797 | var data = plugin.parseLinkAttributes( editor, element ); | ||
798 | |||
799 | // Record down the selected element in the dialog. | ||
800 | this._.selectedElement = element; | ||
801 | |||
802 | this.setupContent( data ); | ||
803 | }, | ||
804 | onOk: function() { | ||
805 | var data = {}; | ||
806 | |||
807 | // Collect data from fields. | ||
808 | this.commitContent( data ); | ||
809 | |||
810 | var selection = editor.getSelection(), | ||
811 | attributes = plugin.getLinkAttributes( editor, data ); | ||
812 | |||
813 | if ( !this._.selectedElement ) { | ||
814 | var range = selection.getRanges()[ 0 ]; | ||
815 | |||
816 | // Use link URL as text with a collapsed cursor. | ||
817 | if ( range.collapsed ) { | ||
818 | // Short mailto link text view (#5736). | ||
819 | var text = new CKEDITOR.dom.text( data.type == 'email' ? | ||
820 | data.email.address : attributes.set[ 'data-cke-saved-href' ], editor.document ); | ||
821 | range.insertNode( text ); | ||
822 | range.selectNodeContents( text ); | ||
823 | } | ||
824 | |||
825 | // Apply style. | ||
826 | var style = new CKEDITOR.style( { | ||
827 | element: 'a', | ||
828 | attributes: attributes.set | ||
829 | } ); | ||
830 | |||
831 | style.type = CKEDITOR.STYLE_INLINE; // need to override... dunno why. | ||
832 | style.applyToRange( range, editor ); | ||
833 | range.select(); | ||
834 | } else { | ||
835 | // We're only editing an existing link, so just overwrite the attributes. | ||
836 | var element = this._.selectedElement, | ||
837 | href = element.data( 'cke-saved-href' ), | ||
838 | textView = element.getHtml(); | ||
839 | |||
840 | element.setAttributes( attributes.set ); | ||
841 | element.removeAttributes( attributes.removed ); | ||
842 | |||
843 | // Update text view when user changes protocol (#4612). | ||
844 | if ( href == textView || data.type == 'email' && textView.indexOf( '@' ) != -1 ) { | ||
845 | // Short mailto link text view (#5736). | ||
846 | element.setHtml( data.type == 'email' ? | ||
847 | data.email.address : attributes.set[ 'data-cke-saved-href' ] ); | ||
848 | |||
849 | // We changed the content, so need to select it again. | ||
850 | selection.selectElement( element ); | ||
851 | } | ||
852 | |||
853 | delete this._.selectedElement; | ||
854 | } | ||
855 | }, | ||
856 | onLoad: function() { | ||
857 | if ( !editor.config.linkShowAdvancedTab ) | ||
858 | this.hidePage( 'advanced' ); //Hide Advanded tab. | ||
859 | |||
860 | if ( !editor.config.linkShowTargetTab ) | ||
861 | this.hidePage( 'target' ); //Hide Target tab. | ||
862 | }, | ||
863 | // Inital focus on 'url' field if link is of type URL. | ||
864 | onFocus: function() { | ||
865 | var linkType = this.getContentElement( 'info', 'linkType' ), | ||
866 | urlField; | ||
867 | |||
868 | if ( linkType && linkType.getValue() == 'url' ) { | ||
869 | urlField = this.getContentElement( 'info', 'url' ); | ||
870 | urlField.select(); | ||
871 | } | ||
872 | } | ||
873 | }; | ||
874 | } ); | ||
875 | } )(); | ||
876 | // jscs:disable maximumLineLength | ||
877 | /** | ||
878 | * The e-mail address anti-spam protection option. The protection will be | ||
879 | * applied when creating or modifying e-mail links through the editor interface. | ||
880 | * | ||
881 | * Two methods of protection can be chosen: | ||
882 | * | ||
883 | * 1. The e-mail parts (name, domain, and any other query string) are | ||
884 | * assembled into a function call pattern. Such function must be | ||
885 | * provided by the developer in the pages that will use the contents. | ||
886 | * 2. Only the e-mail address is obfuscated into a special string that | ||
887 | * has no meaning for humans or spam bots, but which is properly | ||
888 | * rendered and accepted by the browser. | ||
889 | * | ||
890 | * Both approaches require JavaScript to be enabled. | ||
891 | * | ||
892 | * // href="mailto:tester@ckeditor.com?subject=subject&body=body" | ||
893 | * config.emailProtection = ''; | ||
894 | * | ||
895 | * // href="<a href=\"javascript:void(location.href=\'mailto:\'+String.fromCharCode(116,101,115,116,101,114,64,99,107,101,100,105,116,111,114,46,99,111,109)+\'?subject=subject&body=body\')\">e-mail</a>" | ||
896 | * config.emailProtection = 'encode'; | ||
897 | * | ||
898 | * // href="javascript:mt('tester','ckeditor.com','subject','body')" | ||
899 | * config.emailProtection = 'mt(NAME,DOMAIN,SUBJECT,BODY)'; | ||
900 | * | ||
901 | * @since 3.1 | ||
902 | * @cfg {String} [emailProtection='' (empty string = disabled)] | ||
903 | * @member CKEDITOR.config | ||
904 | */ | ||
diff --git a/sources/plugins/link/icons/anchor-rtl.png b/sources/plugins/link/icons/anchor-rtl.png new file mode 100644 index 0000000..87d717d --- /dev/null +++ b/sources/plugins/link/icons/anchor-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/link/icons/anchor.png b/sources/plugins/link/icons/anchor.png new file mode 100644 index 0000000..0ca085f --- /dev/null +++ b/sources/plugins/link/icons/anchor.png | |||
Binary files differ | |||
diff --git a/sources/plugins/link/icons/hidpi/anchor-rtl.png b/sources/plugins/link/icons/hidpi/anchor-rtl.png new file mode 100644 index 0000000..cd6d4ea --- /dev/null +++ b/sources/plugins/link/icons/hidpi/anchor-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/link/icons/hidpi/anchor.png b/sources/plugins/link/icons/hidpi/anchor.png new file mode 100644 index 0000000..c5869db --- /dev/null +++ b/sources/plugins/link/icons/hidpi/anchor.png | |||
Binary files differ | |||
diff --git a/sources/plugins/link/icons/hidpi/link.png b/sources/plugins/link/icons/hidpi/link.png new file mode 100644 index 0000000..bb8a069 --- /dev/null +++ b/sources/plugins/link/icons/hidpi/link.png | |||
Binary files differ | |||
diff --git a/sources/plugins/link/icons/hidpi/unlink.png b/sources/plugins/link/icons/hidpi/unlink.png new file mode 100644 index 0000000..5af59c2 --- /dev/null +++ b/sources/plugins/link/icons/hidpi/unlink.png | |||
Binary files differ | |||
diff --git a/sources/plugins/link/icons/link.png b/sources/plugins/link/icons/link.png new file mode 100644 index 0000000..95092d0 --- /dev/null +++ b/sources/plugins/link/icons/link.png | |||
Binary files differ | |||
diff --git a/sources/plugins/link/icons/unlink.png b/sources/plugins/link/icons/unlink.png new file mode 100644 index 0000000..33a1599 --- /dev/null +++ b/sources/plugins/link/icons/unlink.png | |||
Binary files differ | |||
diff --git a/sources/plugins/link/images/anchor.png b/sources/plugins/link/images/anchor.png new file mode 100644 index 0000000..6d861a0 --- /dev/null +++ b/sources/plugins/link/images/anchor.png | |||
Binary files differ | |||
diff --git a/sources/plugins/link/images/hidpi/anchor.png b/sources/plugins/link/images/hidpi/anchor.png new file mode 100644 index 0000000..f504843 --- /dev/null +++ b/sources/plugins/link/images/hidpi/anchor.png | |||
Binary files differ | |||
diff --git a/sources/plugins/link/lang/af.js b/sources/plugins/link/lang/af.js new file mode 100644 index 0000000..10991c2 --- /dev/null +++ b/sources/plugins/link/lang/af.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'af', { | ||
6 | acccessKey: 'Toegangsleutel', | ||
7 | advanced: 'Gevorderd', | ||
8 | advisoryContentType: 'Aanbevole inhoudstipe', | ||
9 | advisoryTitle: 'Aanbevole titel', | ||
10 | anchor: { | ||
11 | toolbar: 'Anker byvoeg/verander', | ||
12 | menu: 'Anker-eienskappe', | ||
13 | title: 'Anker-eienskappe', | ||
14 | name: 'Ankernaam', | ||
15 | errorName: 'Voltooi die ankernaam asseblief', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'Op element Id', | ||
19 | anchorName: 'Op ankernaam', | ||
20 | charset: 'Karakterstel van geskakelde bron', | ||
21 | cssClasses: 'CSS klasse', | ||
22 | emailAddress: 'E-posadres', | ||
23 | emailBody: 'Berig-inhoud', | ||
24 | emailSubject: 'Berig-onderwerp', | ||
25 | id: 'Id', | ||
26 | info: 'Skakel informasie', | ||
27 | langCode: 'Taalkode', | ||
28 | langDir: 'Skryfrigting', | ||
29 | langDirLTR: 'Links na regs (LTR)', | ||
30 | langDirRTL: 'Regs na links (RTL)', | ||
31 | menu: 'Wysig skakel', | ||
32 | name: 'Naam', | ||
33 | noAnchors: '(Geen ankers beskikbaar in dokument)', | ||
34 | noEmail: 'Gee die e-posadres', | ||
35 | noUrl: 'Gee die skakel se URL', | ||
36 | other: '<ander>', | ||
37 | popupDependent: 'Afhanklik (Netscape)', | ||
38 | popupFeatures: 'Eienskappe van opspringvenster', | ||
39 | popupFullScreen: 'Volskerm (IE)', | ||
40 | popupLeft: 'Posisie links', | ||
41 | popupLocationBar: 'Adresbalk', | ||
42 | popupMenuBar: 'Spyskaartbalk', | ||
43 | popupResizable: 'Herskaalbaar', | ||
44 | popupScrollBars: 'Skuifbalke', | ||
45 | popupStatusBar: 'Statusbalk', | ||
46 | popupToolbar: 'Werkbalk', | ||
47 | popupTop: 'Posisie bo', | ||
48 | rel: 'Relationship', // MISSING | ||
49 | selectAnchor: 'Kies \'n anker', | ||
50 | styles: 'Styl', | ||
51 | tabIndex: 'Tab indeks', | ||
52 | target: 'Doel', | ||
53 | targetFrame: '<raam>', | ||
54 | targetFrameName: 'Naam van doelraam', | ||
55 | targetPopup: '<opspringvenster>', | ||
56 | targetPopupName: 'Naam van opspringvenster', | ||
57 | title: 'Skakel', | ||
58 | toAnchor: 'Anker in bladsy', | ||
59 | toEmail: 'E-pos', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Skakel invoeg/wysig', | ||
62 | type: 'Skakelsoort', | ||
63 | unlink: 'Verwyder skakel', | ||
64 | upload: 'Oplaai' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/ar.js b/sources/plugins/link/lang/ar.js new file mode 100644 index 0000000..533d527 --- /dev/null +++ b/sources/plugins/link/lang/ar.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'ar', { | ||
6 | acccessKey: 'مفاتيح الإختصار', | ||
7 | advanced: 'متقدم', | ||
8 | advisoryContentType: 'نوع التقرير', | ||
9 | advisoryTitle: 'عنوان التقرير', | ||
10 | anchor: { | ||
11 | toolbar: 'إشارة مرجعية', | ||
12 | menu: 'تحرير الإشارة المرجعية', | ||
13 | title: 'خصائص الإشارة المرجعية', | ||
14 | name: 'اسم الإشارة المرجعية', | ||
15 | errorName: 'الرجاء كتابة اسم الإشارة المرجعية', | ||
16 | remove: 'إزالة الإشارة المرجعية' | ||
17 | }, | ||
18 | anchorId: 'حسب رقم العنصر', | ||
19 | anchorName: 'حسب إسم الإشارة المرجعية', | ||
20 | charset: 'ترميز المادة المطلوبة', | ||
21 | cssClasses: 'فئات التنسيق', | ||
22 | emailAddress: 'البريد الإلكتروني', | ||
23 | emailBody: 'محتوى الرسالة', | ||
24 | emailSubject: 'موضوع الرسالة', | ||
25 | id: 'هوية', | ||
26 | info: 'معلومات الرابط', | ||
27 | langCode: 'رمز اللغة', | ||
28 | langDir: 'إتجاه نص اللغة', | ||
29 | langDirLTR: 'اليسار لليمين (LTR)', | ||
30 | langDirRTL: 'اليمين لليسار (RTL)', | ||
31 | menu: 'تحرير الرابط', | ||
32 | name: 'إسم', | ||
33 | noAnchors: '(لا توجد علامات مرجعية في هذا المستند)', | ||
34 | noEmail: 'الرجاء كتابة الريد الإلكتروني', | ||
35 | noUrl: 'الرجاء كتابة رابط الموقع', | ||
36 | other: '<أخرى>', | ||
37 | popupDependent: 'تابع (Netscape)', | ||
38 | popupFeatures: 'خصائص النافذة المنبثقة', | ||
39 | popupFullScreen: 'ملئ الشاشة (IE)', | ||
40 | popupLeft: 'التمركز لليسار', | ||
41 | popupLocationBar: 'شريط العنوان', | ||
42 | popupMenuBar: 'القوائم الرئيسية', | ||
43 | popupResizable: 'قابلة التشكيل', | ||
44 | popupScrollBars: 'أشرطة التمرير', | ||
45 | popupStatusBar: 'شريط الحالة', | ||
46 | popupToolbar: 'شريط الأدوات', | ||
47 | popupTop: 'التمركز للأعلى', | ||
48 | rel: 'العلاقة', | ||
49 | selectAnchor: 'اختر علامة مرجعية', | ||
50 | styles: 'نمط', | ||
51 | tabIndex: 'الترتيب', | ||
52 | target: 'هدف الرابط', | ||
53 | targetFrame: '<إطار>', | ||
54 | targetFrameName: 'اسم الإطار المستهدف', | ||
55 | targetPopup: '<نافذة منبثقة>', | ||
56 | targetPopupName: 'اسم النافذة المنبثقة', | ||
57 | title: 'رابط', | ||
58 | toAnchor: 'مكان في هذا المستند', | ||
59 | toEmail: 'بريد إلكتروني', | ||
60 | toUrl: 'الرابط', | ||
61 | toolbar: 'رابط', | ||
62 | type: 'نوع الربط', | ||
63 | unlink: 'إزالة رابط', | ||
64 | upload: 'رفع' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/bg.js b/sources/plugins/link/lang/bg.js new file mode 100644 index 0000000..a8e99a7 --- /dev/null +++ b/sources/plugins/link/lang/bg.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'bg', { | ||
6 | acccessKey: 'Ключ за достъп', | ||
7 | advanced: 'Разширено', | ||
8 | advisoryContentType: 'Препоръчителен тип на съдържанието', | ||
9 | advisoryTitle: 'Препоръчително заглавие', | ||
10 | anchor: { | ||
11 | toolbar: 'Котва', | ||
12 | menu: 'Промяна на котва', | ||
13 | title: 'Настройки на котва', | ||
14 | name: 'Име на котва', | ||
15 | errorName: 'Моля въведете име на котвата', | ||
16 | remove: 'Премахване на котва' | ||
17 | }, | ||
18 | anchorId: 'По ID на елемент', | ||
19 | anchorName: 'По име на котва', | ||
20 | charset: 'Тип на свързания ресурс', | ||
21 | cssClasses: 'Класове за CSS', | ||
22 | emailAddress: 'E-mail aдрес', | ||
23 | emailBody: 'Съдържание', | ||
24 | emailSubject: 'Тема', | ||
25 | id: 'ID', | ||
26 | info: 'Инфо за връзката', | ||
27 | langCode: 'Код за езика', | ||
28 | langDir: 'Посока на езика', | ||
29 | langDirLTR: 'Ляво на Дясно (ЛнД)', | ||
30 | langDirRTL: 'Дясно на Ляво (ДнЛ)', | ||
31 | menu: 'Промяна на връзка', | ||
32 | name: 'Име', | ||
33 | noAnchors: '(Няма котви в текущия документ)', | ||
34 | noEmail: 'Моля въведете e-mail aдрес', | ||
35 | noUrl: 'Моля въведете URL адреса', | ||
36 | other: '<друго>', | ||
37 | popupDependent: 'Зависимост (Netscape)', | ||
38 | popupFeatures: 'Функции на изкачащ прозорец', | ||
39 | popupFullScreen: 'Цял екран (IE)', | ||
40 | popupLeft: 'Лява позиция', | ||
41 | popupLocationBar: 'Лента с локацията', | ||
42 | popupMenuBar: 'Лента за меню', | ||
43 | popupResizable: 'Оразмеряем', | ||
44 | popupScrollBars: 'Скролери', | ||
45 | popupStatusBar: 'Статусна лента', | ||
46 | popupToolbar: 'Лента с инструменти', | ||
47 | popupTop: 'Горна позиция', | ||
48 | rel: 'Връзка', | ||
49 | selectAnchor: 'Изберете котва', | ||
50 | styles: 'Стил', | ||
51 | tabIndex: 'Ред на достъп', | ||
52 | target: 'Цел', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Име на целевият прозорец', | ||
55 | targetPopup: '<изкачащ прозорец>', | ||
56 | targetPopupName: 'Име на изкачащ прозорец', | ||
57 | title: 'Връзка', | ||
58 | toAnchor: 'Връзка към котва в текста', | ||
59 | toEmail: 'E-mail', | ||
60 | toUrl: 'Уеб адрес', | ||
61 | toolbar: 'Връзка', | ||
62 | type: 'Тип на връзката', | ||
63 | unlink: 'Премахни връзката', | ||
64 | upload: 'Качване' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/bn.js b/sources/plugins/link/lang/bn.js new file mode 100644 index 0000000..bd9d05e --- /dev/null +++ b/sources/plugins/link/lang/bn.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'bn', { | ||
6 | acccessKey: 'এক্সেস কী', | ||
7 | advanced: 'এডভান্সড', | ||
8 | advisoryContentType: 'পরামর্শ কন্টেন্টের প্রকার', | ||
9 | advisoryTitle: 'পরামর্শ শীর্ষক', | ||
10 | anchor: { | ||
11 | toolbar: 'নোঙ্গর', | ||
12 | menu: 'নোঙর প্রোপার্টি', | ||
13 | title: 'নোঙর প্রোপার্টি', | ||
14 | name: 'নোঙরের নাম', | ||
15 | errorName: 'নোঙরের নাম টাইপ করুন', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'নোঙরের আইডি দিয়ে', | ||
19 | anchorName: 'নোঙরের নাম দিয়ে', | ||
20 | charset: 'লিংক রিসোর্স ক্যারেক্টর সেট', | ||
21 | cssClasses: 'স্টাইল-শীট ক্লাস', | ||
22 | emailAddress: 'ইমেইল ঠিকানা', | ||
23 | emailBody: 'মেসেজের দেহ', | ||
24 | emailSubject: 'মেসেজের বিষয়', | ||
25 | id: 'আইডি', | ||
26 | info: 'লিংক তথ্য', | ||
27 | langCode: 'ভাষা লেখার দিক', | ||
28 | langDir: 'ভাষা লেখার দিক', | ||
29 | langDirLTR: 'বাম থেকে ডান (LTR)', | ||
30 | langDirRTL: 'ডান থেকে বাম (RTL)', | ||
31 | menu: 'লিংক সম্পাদন', | ||
32 | name: 'নাম', | ||
33 | noAnchors: '(No anchors available in the document)', // MISSING | ||
34 | noEmail: 'অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন', | ||
35 | noUrl: 'অনুগ্রহ করে URL লিংক টাইপ করুন', | ||
36 | other: '<other>', // MISSING | ||
37 | popupDependent: 'ডিপেন্ডেন্ট (Netscape)', | ||
38 | popupFeatures: 'পপআপ উইন্ডো ফীচার সমূহ', | ||
39 | popupFullScreen: 'পূর্ণ পর্দা জুড়ে (IE)', | ||
40 | popupLeft: 'বামের পজিশন', | ||
41 | popupLocationBar: 'লোকেশন বার', | ||
42 | popupMenuBar: 'মেন্যু বার', | ||
43 | popupResizable: 'Resizable', // MISSING | ||
44 | popupScrollBars: 'স্ক্রল বার', | ||
45 | popupStatusBar: 'স্ট্যাটাস বার', | ||
46 | popupToolbar: 'টুল বার', | ||
47 | popupTop: 'ডানের পজিশন', | ||
48 | rel: 'Relationship', // MISSING | ||
49 | selectAnchor: 'নোঙর বাছাই', | ||
50 | styles: 'স্টাইল', | ||
51 | tabIndex: 'ট্যাব ইন্ডেক্স', | ||
52 | target: 'টার্গেট', | ||
53 | targetFrame: '<ফ্রেম>', | ||
54 | targetFrameName: 'টার্গেট ফ্রেমের নাম', | ||
55 | targetPopup: '<পপআপ উইন্ডো>', | ||
56 | targetPopupName: 'পপআপ উইন্ডোর নাম', | ||
57 | title: 'লিংক', | ||
58 | toAnchor: 'এই পেজে নোঙর কর', | ||
59 | toEmail: 'ইমেইল', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'লিংক যুক্ত কর', | ||
62 | type: 'লিংক প্রকার', | ||
63 | unlink: 'লিংক সরাও', | ||
64 | upload: 'আপলোড' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/bs.js b/sources/plugins/link/lang/bs.js new file mode 100644 index 0000000..39a1a84 --- /dev/null +++ b/sources/plugins/link/lang/bs.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'bs', { | ||
6 | acccessKey: 'Pristupna tipka', | ||
7 | advanced: 'Naprednije', | ||
8 | advisoryContentType: 'Advisory vrsta sadržaja', | ||
9 | advisoryTitle: 'Advisory title', | ||
10 | anchor: { | ||
11 | toolbar: 'Anchor', | ||
12 | menu: 'Edit Anchor', | ||
13 | title: 'Anchor Properties', | ||
14 | name: 'Anchor Name', | ||
15 | errorName: 'Please type the anchor name', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'Po Id-u elementa', | ||
19 | anchorName: 'Po nazivu sidra', | ||
20 | charset: 'Linked Resource Charset', | ||
21 | cssClasses: 'Klase CSS stilova', | ||
22 | emailAddress: 'E-Mail Adresa', | ||
23 | emailBody: 'Poruka', | ||
24 | emailSubject: 'Subjekt poruke', | ||
25 | id: 'Id', | ||
26 | info: 'Link info', | ||
27 | langCode: 'Smjer pisanja', | ||
28 | langDir: 'Smjer pisanja', | ||
29 | langDirLTR: 'S lijeva na desno (LTR)', | ||
30 | langDirRTL: 'S desna na lijevo (RTL)', | ||
31 | menu: 'Izmjeni link', | ||
32 | name: 'Naziv', | ||
33 | noAnchors: '(Nema dostupnih sidra na stranici)', | ||
34 | noEmail: 'Molimo ukucajte e-mail adresu', | ||
35 | noUrl: 'Molimo ukucajte URL link', | ||
36 | other: '<other>', // MISSING | ||
37 | popupDependent: 'Ovisno (Netscape)', | ||
38 | popupFeatures: 'Moguænosti popup prozora', | ||
39 | popupFullScreen: 'Cijeli ekran (IE)', | ||
40 | popupLeft: 'Lijeva pozicija', | ||
41 | popupLocationBar: 'Traka za lokaciju', | ||
42 | popupMenuBar: 'Izborna traka', | ||
43 | popupResizable: 'Resizable', // MISSING | ||
44 | popupScrollBars: 'Scroll traka', | ||
45 | popupStatusBar: 'Statusna traka', | ||
46 | popupToolbar: 'Traka sa alatima', | ||
47 | popupTop: 'Gornja pozicija', | ||
48 | rel: 'Relationship', // MISSING | ||
49 | selectAnchor: 'Izaberi sidro', | ||
50 | styles: 'Stil', | ||
51 | tabIndex: 'Tab indeks', | ||
52 | target: 'Prozor', | ||
53 | targetFrame: '<frejm>', | ||
54 | targetFrameName: 'Target Frame Name', // MISSING | ||
55 | targetPopup: '<popup prozor>', | ||
56 | targetPopupName: 'Naziv popup prozora', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Sidro na ovoj stranici', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Ubaci/Izmjeni link', | ||
62 | type: 'Tip linka', | ||
63 | unlink: 'Izbriši link', | ||
64 | upload: 'Šalji' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/ca.js b/sources/plugins/link/lang/ca.js new file mode 100644 index 0000000..8b80e61 --- /dev/null +++ b/sources/plugins/link/lang/ca.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'ca', { | ||
6 | acccessKey: 'Clau d\'accés', | ||
7 | advanced: 'Avançat', | ||
8 | advisoryContentType: 'Tipus de contingut consultiu', | ||
9 | advisoryTitle: 'Títol consultiu', | ||
10 | anchor: { | ||
11 | toolbar: 'Insereix/Edita àncora', | ||
12 | menu: 'Propietats de l\'àncora', | ||
13 | title: 'Propietats de l\'àncora', | ||
14 | name: 'Nom de l\'àncora', | ||
15 | errorName: 'Si us plau, escriviu el nom de l\'ancora', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'Per Id d\'element', | ||
19 | anchorName: 'Per nom d\'àncora', | ||
20 | charset: 'Conjunt de caràcters font enllaçat', | ||
21 | cssClasses: 'Classes del full d\'estil', | ||
22 | emailAddress: 'Adreça de correu electrònic', | ||
23 | emailBody: 'Cos del missatge', | ||
24 | emailSubject: 'Assumpte del missatge', | ||
25 | id: 'Id', | ||
26 | info: 'Informació de l\'enllaç', | ||
27 | langCode: 'Direcció de l\'idioma', | ||
28 | langDir: 'Direcció de l\'idioma', | ||
29 | langDirLTR: 'D\'esquerra a dreta (LTR)', | ||
30 | langDirRTL: 'De dreta a esquerra (RTL)', | ||
31 | menu: 'Edita l\'enllaç', | ||
32 | name: 'Nom', | ||
33 | noAnchors: '(No hi ha àncores disponibles en aquest document)', | ||
34 | noEmail: 'Si us plau, escrigui l\'adreça correu electrònic', | ||
35 | noUrl: 'Si us plau, escrigui l\'enllaç URL', | ||
36 | other: '<altre>', | ||
37 | popupDependent: 'Depenent (Netscape)', | ||
38 | popupFeatures: 'Característiques finestra popup', | ||
39 | popupFullScreen: 'Pantalla completa (IE)', | ||
40 | popupLeft: 'Posició esquerra', | ||
41 | popupLocationBar: 'Barra d\'adreça', | ||
42 | popupMenuBar: 'Barra de menú', | ||
43 | popupResizable: 'Redimensionable', | ||
44 | popupScrollBars: 'Barres d\'scroll', | ||
45 | popupStatusBar: 'Barra d\'estat', | ||
46 | popupToolbar: 'Barra d\'eines', | ||
47 | popupTop: 'Posició dalt', | ||
48 | rel: 'Relació', | ||
49 | selectAnchor: 'Selecciona una àncora', | ||
50 | styles: 'Estil', | ||
51 | tabIndex: 'Index de Tab', | ||
52 | target: 'Destí', | ||
53 | targetFrame: '<marc>', | ||
54 | targetFrameName: 'Nom del marc de destí', | ||
55 | targetPopup: '<finestra emergent>', | ||
56 | targetPopupName: 'Nom finestra popup', | ||
57 | title: 'Enllaç', | ||
58 | toAnchor: 'Àncora en aquesta pàgina', | ||
59 | toEmail: 'Correu electrònic', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Insereix/Edita enllaç', | ||
62 | type: 'Tipus d\'enllaç', | ||
63 | unlink: 'Elimina l\'enllaç', | ||
64 | upload: 'Puja' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/cs.js b/sources/plugins/link/lang/cs.js new file mode 100644 index 0000000..45106c0 --- /dev/null +++ b/sources/plugins/link/lang/cs.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'cs', { | ||
6 | acccessKey: 'Přístupový klíč', | ||
7 | advanced: 'Rozšířené', | ||
8 | advisoryContentType: 'Pomocný typ obsahu', | ||
9 | advisoryTitle: 'Pomocný titulek', | ||
10 | anchor: { | ||
11 | toolbar: 'Záložka', | ||
12 | menu: 'Vlastnosti záložky', | ||
13 | title: 'Vlastnosti záložky', | ||
14 | name: 'Název záložky', | ||
15 | errorName: 'Zadejte prosím název záložky', | ||
16 | remove: 'Odstranit záložku' | ||
17 | }, | ||
18 | anchorId: 'Podle Id objektu', | ||
19 | anchorName: 'Podle jména kotvy', | ||
20 | charset: 'Přiřazená znaková sada', | ||
21 | cssClasses: 'Třída stylu', | ||
22 | emailAddress: 'E-mailová adresa', | ||
23 | emailBody: 'Tělo zprávy', | ||
24 | emailSubject: 'Předmět zprávy', | ||
25 | id: 'Id', | ||
26 | info: 'Informace o odkazu', | ||
27 | langCode: 'Kód jazyka', | ||
28 | langDir: 'Směr jazyka', | ||
29 | langDirLTR: 'Zleva doprava (LTR)', | ||
30 | langDirRTL: 'Zprava doleva (RTL)', | ||
31 | menu: 'Změnit odkaz', | ||
32 | name: 'Jméno', | ||
33 | noAnchors: '(Ve stránce není definována žádná kotva!)', | ||
34 | noEmail: 'Zadejte prosím e-mailovou adresu', | ||
35 | noUrl: 'Zadejte prosím URL odkazu', | ||
36 | other: '<jiný>', | ||
37 | popupDependent: 'Závislost (Netscape)', | ||
38 | popupFeatures: 'Vlastnosti vyskakovacího okna', | ||
39 | popupFullScreen: 'Celá obrazovka (IE)', | ||
40 | popupLeft: 'Levý okraj', | ||
41 | popupLocationBar: 'Panel umístění', | ||
42 | popupMenuBar: 'Panel nabídky', | ||
43 | popupResizable: 'Umožňující měnit velikost', | ||
44 | popupScrollBars: 'Posuvníky', | ||
45 | popupStatusBar: 'Stavový řádek', | ||
46 | popupToolbar: 'Panel nástrojů', | ||
47 | popupTop: 'Horní okraj', | ||
48 | rel: 'Vztah', | ||
49 | selectAnchor: 'Vybrat kotvu', | ||
50 | styles: 'Styl', | ||
51 | tabIndex: 'Pořadí prvku', | ||
52 | target: 'Cíl', | ||
53 | targetFrame: '<rámec>', | ||
54 | targetFrameName: 'Název cílového rámu', | ||
55 | targetPopup: '<vyskakovací okno>', | ||
56 | targetPopupName: 'Název vyskakovacího okna', | ||
57 | title: 'Odkaz', | ||
58 | toAnchor: 'Kotva v této stránce', | ||
59 | toEmail: 'E-mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Odkaz', | ||
62 | type: 'Typ odkazu', | ||
63 | unlink: 'Odstranit odkaz', | ||
64 | upload: 'Odeslat' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/cy.js b/sources/plugins/link/lang/cy.js new file mode 100644 index 0000000..358ec60 --- /dev/null +++ b/sources/plugins/link/lang/cy.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'cy', { | ||
6 | acccessKey: 'Allwedd Mynediad', | ||
7 | advanced: 'Uwch', | ||
8 | advisoryContentType: 'Math y Cynnwys Cynghorol', | ||
9 | advisoryTitle: 'Teitl Cynghorol', | ||
10 | anchor: { | ||
11 | toolbar: 'Angor', | ||
12 | menu: 'Golygu\'r Angor', | ||
13 | title: 'Priodweddau\'r Angor', | ||
14 | name: 'Enw\'r Angor', | ||
15 | errorName: 'Teipiwch enw\'r angor', | ||
16 | remove: 'Tynnwch yr Angor' | ||
17 | }, | ||
18 | anchorId: 'Gan Id yr Elfen', | ||
19 | anchorName: 'Gan Enw\'r Angor', | ||
20 | charset: 'Set Nodau\'r Adnodd Cysylltiedig', | ||
21 | cssClasses: 'Dosbarthiadau Dalen Arddull', | ||
22 | emailAddress: 'Cyfeiriad E-Bost', | ||
23 | emailBody: 'Corff y Neges', | ||
24 | emailSubject: 'Testun y Neges', | ||
25 | id: 'Id', | ||
26 | info: 'Gwyb y Ddolen', | ||
27 | langCode: 'Cod Iaith', | ||
28 | langDir: 'Cyfeiriad Iaith', | ||
29 | langDirLTR: 'Chwith i\'r Dde (LTR)', | ||
30 | langDirRTL: 'Dde i\'r Chwith (RTL)', | ||
31 | menu: 'Golygu Dolen', | ||
32 | name: 'Enw', | ||
33 | noAnchors: '(Dim angorau ar gael yn y ddogfen)', | ||
34 | noEmail: 'Teipiwch gyfeiriad yr e-bost', | ||
35 | noUrl: 'Teipiwch URL y ddolen', | ||
36 | other: '<eraill>', | ||
37 | popupDependent: 'Dibynnol (Netscape)', | ||
38 | popupFeatures: 'Nodweddion Ffenestr Bop', | ||
39 | popupFullScreen: 'Sgrin Llawn (IE)', | ||
40 | popupLeft: 'Safle Chwith', | ||
41 | popupLocationBar: 'Bar Safle', | ||
42 | popupMenuBar: 'Dewislen', | ||
43 | popupResizable: 'Ailfeintiol', | ||
44 | popupScrollBars: 'Barrau Sgrolio', | ||
45 | popupStatusBar: 'Bar Statws', | ||
46 | popupToolbar: 'Bar Offer', | ||
47 | popupTop: 'Safle Top', | ||
48 | rel: 'Perthynas', | ||
49 | selectAnchor: 'Dewiswch Angor', | ||
50 | styles: 'Arddull', | ||
51 | tabIndex: 'Indecs Tab', | ||
52 | target: 'Targed', | ||
53 | targetFrame: '<ffrâm>', | ||
54 | targetFrameName: 'Enw Ffrâm y Targed', | ||
55 | targetPopup: '<ffenestr bop>', | ||
56 | targetPopupName: 'Enw Ffenestr Bop', | ||
57 | title: 'Dolen', | ||
58 | toAnchor: 'Dolen at angor yn y testun', | ||
59 | toEmail: 'E-bost', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Dolen', | ||
62 | type: 'Math y Ddolen', | ||
63 | unlink: 'Datgysylltu', | ||
64 | upload: 'Lanlwytho' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/da.js b/sources/plugins/link/lang/da.js new file mode 100644 index 0000000..7a278c4 --- /dev/null +++ b/sources/plugins/link/lang/da.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'da', { | ||
6 | acccessKey: 'Genvejstast', | ||
7 | advanced: 'Avanceret', | ||
8 | advisoryContentType: 'Indholdstype', | ||
9 | advisoryTitle: 'Titel', | ||
10 | anchor: { | ||
11 | toolbar: 'Indsæt/redigér bogmærke', | ||
12 | menu: 'Egenskaber for bogmærke', | ||
13 | title: 'Egenskaber for bogmærke', | ||
14 | name: 'Bogmærkenavn', | ||
15 | errorName: 'Indtast bogmærkenavn', | ||
16 | remove: 'Fjern bogmærke' | ||
17 | }, | ||
18 | anchorId: 'Efter element-Id', | ||
19 | anchorName: 'Efter ankernavn', | ||
20 | charset: 'Tegnsæt', | ||
21 | cssClasses: 'Typografiark', | ||
22 | emailAddress: 'E-mailadresse', | ||
23 | emailBody: 'Besked', | ||
24 | emailSubject: 'Emne', | ||
25 | id: 'Id', | ||
26 | info: 'Generelt', | ||
27 | langCode: 'Tekstretning', | ||
28 | langDir: 'Tekstretning', | ||
29 | langDirLTR: 'Fra venstre mod højre (LTR)', | ||
30 | langDirRTL: 'Fra højre mod venstre (RTL)', | ||
31 | menu: 'Redigér hyperlink', | ||
32 | name: 'Navn', | ||
33 | noAnchors: '(Ingen bogmærker i dokumentet)', | ||
34 | noEmail: 'Indtast e-mailadresse!', | ||
35 | noUrl: 'Indtast hyperlink-URL!', | ||
36 | other: '<anden>', | ||
37 | popupDependent: 'Koblet/dependent (Netscape)', | ||
38 | popupFeatures: 'Egenskaber for popup', | ||
39 | popupFullScreen: 'Fuld skærm (IE)', | ||
40 | popupLeft: 'Position fra venstre', | ||
41 | popupLocationBar: 'Adresselinje', | ||
42 | popupMenuBar: 'Menulinje', | ||
43 | popupResizable: 'Justérbar', | ||
44 | popupScrollBars: 'Scrollbar', | ||
45 | popupStatusBar: 'Statuslinje', | ||
46 | popupToolbar: 'Værktøjslinje', | ||
47 | popupTop: 'Position fra toppen', | ||
48 | rel: 'Relation', | ||
49 | selectAnchor: 'Vælg et anker', | ||
50 | styles: 'Typografi', | ||
51 | tabIndex: 'Tabulatorindeks', | ||
52 | target: 'Mål', | ||
53 | targetFrame: '<ramme>', | ||
54 | targetFrameName: 'Destinationsvinduets navn', | ||
55 | targetPopup: '<popup vindue>', | ||
56 | targetPopupName: 'Popupvinduets navn', | ||
57 | title: 'Egenskaber for hyperlink', | ||
58 | toAnchor: 'Bogmærke på denne side', | ||
59 | toEmail: 'E-mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Indsæt/redigér hyperlink', | ||
62 | type: 'Type', | ||
63 | unlink: 'Fjern hyperlink', | ||
64 | upload: 'Upload' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/de-ch.js b/sources/plugins/link/lang/de-ch.js new file mode 100644 index 0000000..d386d2a --- /dev/null +++ b/sources/plugins/link/lang/de-ch.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'de-ch', { | ||
6 | acccessKey: 'Zugriffstaste', | ||
7 | advanced: 'Erweitert', | ||
8 | advisoryContentType: 'Inhaltstyp', | ||
9 | advisoryTitle: 'Titel Beschreibung', | ||
10 | anchor: { | ||
11 | toolbar: 'Anker', | ||
12 | menu: 'Anker bearbeiten', | ||
13 | title: 'Ankereigenschaften', | ||
14 | name: 'Ankername', | ||
15 | errorName: 'Bitte geben Sie den Namen des Ankers ein', | ||
16 | remove: 'Anker entfernen' | ||
17 | }, | ||
18 | anchorId: 'Nach Elementkennung', | ||
19 | anchorName: 'Nach Ankername', | ||
20 | charset: 'Verknüpfter Ressourcenzeichensatz', | ||
21 | cssClasses: 'Formatvorlagenklasse', | ||
22 | emailAddress: 'E-Mail-Adresse', | ||
23 | emailBody: 'Nachrichtentext', | ||
24 | emailSubject: 'Betreffzeile', | ||
25 | id: 'Kennung', | ||
26 | info: 'Linkinfo', | ||
27 | langCode: 'Sprachcode', | ||
28 | langDir: 'Schreibrichtung', | ||
29 | langDirLTR: 'Links nach Rechts (LTR)', | ||
30 | langDirRTL: 'Rechts nach Links (RTL)', | ||
31 | menu: 'Link bearbeiten', | ||
32 | name: 'Name', | ||
33 | noAnchors: '(Keine Anker im Dokument vorhanden)', | ||
34 | noEmail: 'Bitte geben Sie E-Mail-Adresse an', | ||
35 | noUrl: 'Bitte geben Sie die Link-URL an', | ||
36 | other: '<andere>', | ||
37 | popupDependent: 'Abhängig (Netscape)', | ||
38 | popupFeatures: 'Pop-up Fenstereigenschaften', | ||
39 | popupFullScreen: 'Vollbild (IE)', | ||
40 | popupLeft: 'Linke Position', | ||
41 | popupLocationBar: 'Adressleiste', | ||
42 | popupMenuBar: 'Menüleiste', | ||
43 | popupResizable: 'Grösse änderbar', | ||
44 | popupScrollBars: 'Rollbalken', | ||
45 | popupStatusBar: 'Statusleiste', | ||
46 | popupToolbar: 'Werkzeugleiste', | ||
47 | popupTop: 'Obere Position', | ||
48 | rel: 'Beziehung', | ||
49 | selectAnchor: 'Anker auswählen', | ||
50 | styles: 'Style', | ||
51 | tabIndex: 'Tab-Index', | ||
52 | target: 'Zielseite', | ||
53 | targetFrame: '<Frame>', | ||
54 | targetFrameName: 'Ziel-Fenster-Name', | ||
55 | targetPopup: '<Pop-up Fenster>', | ||
56 | targetPopupName: 'Pop-up Fenster-Name', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Anker in dieser Seite', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Link einfügen/editieren', | ||
62 | type: 'Link-Typ', | ||
63 | unlink: 'Link entfernen', | ||
64 | upload: 'Hochladen' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/de.js b/sources/plugins/link/lang/de.js new file mode 100644 index 0000000..c8da86f --- /dev/null +++ b/sources/plugins/link/lang/de.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'de', { | ||
6 | acccessKey: 'Zugriffstaste', | ||
7 | advanced: 'Erweitert', | ||
8 | advisoryContentType: 'Inhaltstyp', | ||
9 | advisoryTitle: 'Titel Beschreibung', | ||
10 | anchor: { | ||
11 | toolbar: 'Anker', | ||
12 | menu: 'Anker bearbeiten', | ||
13 | title: 'Ankereigenschaften', | ||
14 | name: 'Ankername', | ||
15 | errorName: 'Bitte geben Sie den Namen des Ankers ein', | ||
16 | remove: 'Anker entfernen' | ||
17 | }, | ||
18 | anchorId: 'Nach Elementkennung', | ||
19 | anchorName: 'Nach Ankername', | ||
20 | charset: 'Verknüpfter Ressourcenzeichensatz', | ||
21 | cssClasses: 'Formatvorlagenklasse', | ||
22 | emailAddress: 'E-Mail-Adresse', | ||
23 | emailBody: 'Nachrichtentext', | ||
24 | emailSubject: 'Betreffzeile', | ||
25 | id: 'Kennung', | ||
26 | info: 'Linkinfo', | ||
27 | langCode: 'Sprachcode', | ||
28 | langDir: 'Schreibrichtung', | ||
29 | langDirLTR: 'Links nach Rechts (LTR)', | ||
30 | langDirRTL: 'Rechts nach Links (RTL)', | ||
31 | menu: 'Link bearbeiten', | ||
32 | name: 'Name', | ||
33 | noAnchors: '(Keine Anker im Dokument vorhanden)', | ||
34 | noEmail: 'Bitte geben Sie E-Mail-Adresse an', | ||
35 | noUrl: 'Bitte geben Sie die Link-URL an', | ||
36 | other: '<andere>', | ||
37 | popupDependent: 'Abhängig (Netscape)', | ||
38 | popupFeatures: 'Pop-up Fenstereigenschaften', | ||
39 | popupFullScreen: 'Vollbild (IE)', | ||
40 | popupLeft: 'Linke Position', | ||
41 | popupLocationBar: 'Adressleiste', | ||
42 | popupMenuBar: 'Menüleiste', | ||
43 | popupResizable: 'Größe änderbar', | ||
44 | popupScrollBars: 'Rollbalken', | ||
45 | popupStatusBar: 'Statusleiste', | ||
46 | popupToolbar: 'Werkzeugleiste', | ||
47 | popupTop: 'Obere Position', | ||
48 | rel: 'Beziehung', | ||
49 | selectAnchor: 'Anker auswählen', | ||
50 | styles: 'Style', | ||
51 | tabIndex: 'Tab-Index', | ||
52 | target: 'Zielseite', | ||
53 | targetFrame: '<Frame>', | ||
54 | targetFrameName: 'Ziel-Fenster-Name', | ||
55 | targetPopup: '<Pop-up Fenster>', | ||
56 | targetPopupName: 'Pop-up Fenster-Name', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Anker in dieser Seite', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Link einfügen/editieren', | ||
62 | type: 'Link-Typ', | ||
63 | unlink: 'Link entfernen', | ||
64 | upload: 'Hochladen' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/el.js b/sources/plugins/link/lang/el.js new file mode 100644 index 0000000..53019a5 --- /dev/null +++ b/sources/plugins/link/lang/el.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'el', { | ||
6 | acccessKey: 'Συντόμευση', | ||
7 | advanced: 'Για Προχωρημένους', | ||
8 | advisoryContentType: 'Ενδεικτικός Τύπος Περιεχομένου', | ||
9 | advisoryTitle: 'Ενδεικτικός Τίτλος', | ||
10 | anchor: { | ||
11 | toolbar: 'Εισαγωγή/επεξεργασία Άγκυρας', | ||
12 | menu: 'Ιδιότητες άγκυρας', | ||
13 | title: 'Ιδιότητες άγκυρας', | ||
14 | name: 'Όνομα άγκυρας', | ||
15 | errorName: 'Παρακαλούμε εισάγετε όνομα άγκυρας', | ||
16 | remove: 'Αφαίρεση Άγκυρας' | ||
17 | }, | ||
18 | anchorId: 'Βάσει του Element Id', | ||
19 | anchorName: 'Βάσει του Ονόματος Άγκυρας', | ||
20 | charset: 'Κωδικοποίηση Χαρακτήρων Προσαρτημένης Πηγής', | ||
21 | cssClasses: 'Κλάσεις Φύλλων Στυλ', | ||
22 | emailAddress: 'Διεύθυνση E-mail', | ||
23 | emailBody: 'Κείμενο Μηνύματος', | ||
24 | emailSubject: 'Θέμα Μηνύματος', | ||
25 | id: 'Id', | ||
26 | info: 'Πληροφορίες Συνδέσμου', | ||
27 | langCode: 'Κατεύθυνση Κειμένου', | ||
28 | langDir: 'Κατεύθυνση Κειμένου', | ||
29 | langDirLTR: 'Αριστερά προς Δεξιά (LTR)', | ||
30 | langDirRTL: 'Δεξιά προς Αριστερά (RTL)', | ||
31 | menu: 'Επεξεργασία Συνδέσμου', | ||
32 | name: 'Όνομα', | ||
33 | noAnchors: '(Δεν υπάρχουν άγκυρες στο κείμενο)', | ||
34 | noEmail: 'Εισάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου', | ||
35 | noUrl: 'Εισάγετε την τοποθεσία (URL) του συνδέσμου', | ||
36 | other: '<άλλο>', | ||
37 | popupDependent: 'Εξαρτημένο (Netscape)', | ||
38 | popupFeatures: 'Επιλογές Αναδυόμενου Παραθύρου', | ||
39 | popupFullScreen: 'Πλήρης Οθόνη (IE)', | ||
40 | popupLeft: 'Θέση Αριστερά', | ||
41 | popupLocationBar: 'Γραμμή Τοποθεσίας', | ||
42 | popupMenuBar: 'Γραμμή Επιλογών', | ||
43 | popupResizable: 'Προσαρμοζόμενο Μέγεθος', | ||
44 | popupScrollBars: 'Μπάρες Κύλισης', | ||
45 | popupStatusBar: 'Γραμμή Κατάστασης', | ||
46 | popupToolbar: 'Εργαλειοθήκη', | ||
47 | popupTop: 'Θέση Πάνω', | ||
48 | rel: 'Σχέση', | ||
49 | selectAnchor: 'Επιλέξτε μια Άγκυρα', | ||
50 | styles: 'Μορφή', | ||
51 | tabIndex: 'Σειρά Μεταπήδησης', | ||
52 | target: 'Παράθυρο Προορισμού', | ||
53 | targetFrame: '<πλαίσιο>', | ||
54 | targetFrameName: 'Όνομα Πλαισίου Προορισμού', | ||
55 | targetPopup: '<αναδυόμενο παράθυρο>', | ||
56 | targetPopupName: 'Όνομα Αναδυόμενου Παραθύρου', | ||
57 | title: 'Σύνδεσμος', | ||
58 | toAnchor: 'Άγκυρα σε αυτήν τη σελίδα', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Σύνδεσμος', | ||
62 | type: 'Τύπος Συνδέσμου', | ||
63 | unlink: 'Αφαίρεση Συνδέσμου', | ||
64 | upload: 'Αποστολή' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/en-au.js b/sources/plugins/link/lang/en-au.js new file mode 100644 index 0000000..5e18970 --- /dev/null +++ b/sources/plugins/link/lang/en-au.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'en-au', { | ||
6 | acccessKey: 'Access Key', | ||
7 | advanced: 'Advanced', | ||
8 | advisoryContentType: 'Advisory Content Type', | ||
9 | advisoryTitle: 'Advisory Title', | ||
10 | anchor: { | ||
11 | toolbar: 'Anchor', | ||
12 | menu: 'Edit Anchor', | ||
13 | title: 'Anchor Properties', | ||
14 | name: 'Anchor Name', | ||
15 | errorName: 'Please type the anchor name', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'By Element Id', | ||
19 | anchorName: 'By Anchor Name', | ||
20 | charset: 'Linked Resource Charset', | ||
21 | cssClasses: 'Stylesheet Classes', | ||
22 | emailAddress: 'E-Mail Address', | ||
23 | emailBody: 'Message Body', | ||
24 | emailSubject: 'Message Subject', | ||
25 | id: 'Id', | ||
26 | info: 'Link Info', | ||
27 | langCode: 'Language Code', | ||
28 | langDir: 'Language Direction', | ||
29 | langDirLTR: 'Left to Right (LTR)', | ||
30 | langDirRTL: 'Right to Left (RTL)', | ||
31 | menu: 'Edit Link', | ||
32 | name: 'Name', | ||
33 | noAnchors: '(No anchors available in the document)', | ||
34 | noEmail: 'Please type the e-mail address', | ||
35 | noUrl: 'Please type the link URL', | ||
36 | other: '<other>', | ||
37 | popupDependent: 'Dependent (Netscape)', | ||
38 | popupFeatures: 'Popup Window Features', | ||
39 | popupFullScreen: 'Full Screen (IE)', | ||
40 | popupLeft: 'Left Position', | ||
41 | popupLocationBar: 'Location Bar', | ||
42 | popupMenuBar: 'Menu Bar', | ||
43 | popupResizable: 'Resizable', | ||
44 | popupScrollBars: 'Scroll Bars', | ||
45 | popupStatusBar: 'Status Bar', | ||
46 | popupToolbar: 'Toolbar', | ||
47 | popupTop: 'Top Position', | ||
48 | rel: 'Relationship', // MISSING | ||
49 | selectAnchor: 'Select an Anchor', | ||
50 | styles: 'Style', | ||
51 | tabIndex: 'Tab Index', | ||
52 | target: 'Target', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Target Frame Name', | ||
55 | targetPopup: '<popup window>', | ||
56 | targetPopupName: 'Popup Window Name', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Link to anchor in the text', | ||
59 | toEmail: 'E-mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Link', | ||
62 | type: 'Link Type', | ||
63 | unlink: 'Unlink', | ||
64 | upload: 'Upload' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/en-ca.js b/sources/plugins/link/lang/en-ca.js new file mode 100644 index 0000000..fb4b6c7 --- /dev/null +++ b/sources/plugins/link/lang/en-ca.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'en-ca', { | ||
6 | acccessKey: 'Access Key', | ||
7 | advanced: 'Advanced', | ||
8 | advisoryContentType: 'Advisory Content Type', | ||
9 | advisoryTitle: 'Advisory Title', | ||
10 | anchor: { | ||
11 | toolbar: 'Anchor', | ||
12 | menu: 'Edit Anchor', | ||
13 | title: 'Anchor Properties', | ||
14 | name: 'Anchor Name', | ||
15 | errorName: 'Please type the anchor name', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'By Element Id', | ||
19 | anchorName: 'By Anchor Name', | ||
20 | charset: 'Linked Resource Charset', | ||
21 | cssClasses: 'Stylesheet Classes', | ||
22 | emailAddress: 'E-Mail Address', | ||
23 | emailBody: 'Message Body', | ||
24 | emailSubject: 'Message Subject', | ||
25 | id: 'Id', | ||
26 | info: 'Link Info', | ||
27 | langCode: 'Language Code', | ||
28 | langDir: 'Language Direction', | ||
29 | langDirLTR: 'Left to Right (LTR)', | ||
30 | langDirRTL: 'Right to Left (RTL)', | ||
31 | menu: 'Edit Link', | ||
32 | name: 'Name', | ||
33 | noAnchors: '(No anchors available in the document)', | ||
34 | noEmail: 'Please type the e-mail address', | ||
35 | noUrl: 'Please type the link URL', | ||
36 | other: '<other>', | ||
37 | popupDependent: 'Dependent (Netscape)', | ||
38 | popupFeatures: 'Popup Window Features', | ||
39 | popupFullScreen: 'Full Screen (IE)', | ||
40 | popupLeft: 'Left Position', | ||
41 | popupLocationBar: 'Location Bar', | ||
42 | popupMenuBar: 'Menu Bar', | ||
43 | popupResizable: 'Resizable', | ||
44 | popupScrollBars: 'Scroll Bars', | ||
45 | popupStatusBar: 'Status Bar', | ||
46 | popupToolbar: 'Toolbar', | ||
47 | popupTop: 'Top Position', | ||
48 | rel: 'Relationship', // MISSING | ||
49 | selectAnchor: 'Select an Anchor', | ||
50 | styles: 'Style', | ||
51 | tabIndex: 'Tab Index', | ||
52 | target: 'Target', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Target Frame Name', | ||
55 | targetPopup: '<popup window>', | ||
56 | targetPopupName: 'Popup Window Name', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Link to anchor in the text', | ||
59 | toEmail: 'E-mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Link', | ||
62 | type: 'Link Type', | ||
63 | unlink: 'Unlink', | ||
64 | upload: 'Upload' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/en-gb.js b/sources/plugins/link/lang/en-gb.js new file mode 100644 index 0000000..a3af24c --- /dev/null +++ b/sources/plugins/link/lang/en-gb.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'en-gb', { | ||
6 | acccessKey: 'Access Key', | ||
7 | advanced: 'Advanced', | ||
8 | advisoryContentType: 'Advisory Content Type', | ||
9 | advisoryTitle: 'Advisory Title', | ||
10 | anchor: { | ||
11 | toolbar: 'Anchor', | ||
12 | menu: 'Edit Anchor', | ||
13 | title: 'Anchor Properties', | ||
14 | name: 'Anchor Name', | ||
15 | errorName: 'Please type the anchor name', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'By Element Id', | ||
19 | anchorName: 'By Anchor Name', | ||
20 | charset: 'Linked Resource Charset', | ||
21 | cssClasses: 'Stylesheet Classes', | ||
22 | emailAddress: 'E-Mail Address', | ||
23 | emailBody: 'Message Body', | ||
24 | emailSubject: 'Message Subject', | ||
25 | id: 'Id', | ||
26 | info: 'Link Info', | ||
27 | langCode: 'Language Code', | ||
28 | langDir: 'Language Direction', | ||
29 | langDirLTR: 'Left to Right (LTR)', | ||
30 | langDirRTL: 'Right to Left (RTL)', | ||
31 | menu: 'Edit Link', | ||
32 | name: 'Name', | ||
33 | noAnchors: '(No anchors available in the document)', | ||
34 | noEmail: 'Please type the e-mail address', | ||
35 | noUrl: 'Please type the link URL', | ||
36 | other: '<other>', | ||
37 | popupDependent: 'Dependent (Netscape)', | ||
38 | popupFeatures: 'Popup Window Features', | ||
39 | popupFullScreen: 'Full Screen (IE)', | ||
40 | popupLeft: 'Left Position', | ||
41 | popupLocationBar: 'Location Bar', | ||
42 | popupMenuBar: 'Menu Bar', | ||
43 | popupResizable: 'Resizable', | ||
44 | popupScrollBars: 'Scroll Bars', | ||
45 | popupStatusBar: 'Status Bar', | ||
46 | popupToolbar: 'Toolbar', | ||
47 | popupTop: 'Top Position', | ||
48 | rel: 'Relationship', | ||
49 | selectAnchor: 'Select an Anchor', | ||
50 | styles: 'Style', | ||
51 | tabIndex: 'Tab Index', | ||
52 | target: 'Target', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Target Frame Name', | ||
55 | targetPopup: '<popup window>', | ||
56 | targetPopupName: 'Popup Window Name', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Link to anchor in the text', | ||
59 | toEmail: 'E-mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Link', | ||
62 | type: 'Link Type', | ||
63 | unlink: 'Unlink', | ||
64 | upload: 'Upload' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/en.js b/sources/plugins/link/lang/en.js new file mode 100644 index 0000000..1054741 --- /dev/null +++ b/sources/plugins/link/lang/en.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'en', { | ||
6 | acccessKey: 'Access Key', | ||
7 | advanced: 'Advanced', | ||
8 | advisoryContentType: 'Advisory Content Type', | ||
9 | advisoryTitle: 'Advisory Title', | ||
10 | anchor: { | ||
11 | toolbar: 'Anchor', | ||
12 | menu: 'Edit Anchor', | ||
13 | title: 'Anchor Properties', | ||
14 | name: 'Anchor Name', | ||
15 | errorName: 'Please type the anchor name', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'By Element Id', | ||
19 | anchorName: 'By Anchor Name', | ||
20 | charset: 'Linked Resource Charset', | ||
21 | cssClasses: 'Stylesheet Classes', | ||
22 | emailAddress: 'E-Mail Address', | ||
23 | emailBody: 'Message Body', | ||
24 | emailSubject: 'Message Subject', | ||
25 | id: 'Id', | ||
26 | info: 'Link Info', | ||
27 | langCode: 'Language Code', | ||
28 | langDir: 'Language Direction', | ||
29 | langDirLTR: 'Left to Right (LTR)', | ||
30 | langDirRTL: 'Right to Left (RTL)', | ||
31 | menu: 'Edit Link', | ||
32 | name: 'Name', | ||
33 | noAnchors: '(No anchors available in the document)', | ||
34 | noEmail: 'Please type the e-mail address', | ||
35 | noUrl: 'Please type the link URL', | ||
36 | other: '<other>', | ||
37 | popupDependent: 'Dependent (Netscape)', | ||
38 | popupFeatures: 'Popup Window Features', | ||
39 | popupFullScreen: 'Full Screen (IE)', | ||
40 | popupLeft: 'Left Position', | ||
41 | popupLocationBar: 'Location Bar', | ||
42 | popupMenuBar: 'Menu Bar', | ||
43 | popupResizable: 'Resizable', | ||
44 | popupScrollBars: 'Scroll Bars', | ||
45 | popupStatusBar: 'Status Bar', | ||
46 | popupToolbar: 'Toolbar', | ||
47 | popupTop: 'Top Position', | ||
48 | rel: 'Relationship', | ||
49 | selectAnchor: 'Select an Anchor', | ||
50 | styles: 'Style', | ||
51 | tabIndex: 'Tab Index', | ||
52 | target: 'Target', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Target Frame Name', | ||
55 | targetPopup: '<popup window>', | ||
56 | targetPopupName: 'Popup Window Name', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Link to anchor in the text', | ||
59 | toEmail: 'E-mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Link', | ||
62 | type: 'Link Type', | ||
63 | unlink: 'Unlink', | ||
64 | upload: 'Upload' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/eo.js b/sources/plugins/link/lang/eo.js new file mode 100644 index 0000000..e0bc952 --- /dev/null +++ b/sources/plugins/link/lang/eo.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'eo', { | ||
6 | acccessKey: 'Fulmoklavo', | ||
7 | advanced: 'Speciala', | ||
8 | advisoryContentType: 'Enhavotipo', | ||
9 | advisoryTitle: 'Priskriba Titolo', | ||
10 | anchor: { | ||
11 | toolbar: 'Ankro', | ||
12 | menu: 'Enmeti/Ŝanĝi Ankron', | ||
13 | title: 'Ankraj Atributoj', | ||
14 | name: 'Ankra Nomo', | ||
15 | errorName: 'Bv entajpi la ankran nomon', | ||
16 | remove: 'Forigi Ankron' | ||
17 | }, | ||
18 | anchorId: 'Per Elementidentigilo', | ||
19 | anchorName: 'Per Ankronomo', | ||
20 | charset: 'Signaro de la Ligita Rimedo', | ||
21 | cssClasses: 'Klasoj de Stilfolioj', | ||
22 | emailAddress: 'Retpoŝto', | ||
23 | emailBody: 'Mesaĝa korpo', | ||
24 | emailSubject: 'Mesaĝa Temo', | ||
25 | id: 'Id', | ||
26 | info: 'Informoj pri la Ligilo', | ||
27 | langCode: 'Lingva Kodo', | ||
28 | langDir: 'Skribdirekto', | ||
29 | langDirLTR: 'De maldekstro dekstren (LTR)', | ||
30 | langDirRTL: 'De dekstro maldekstren (RTL)', | ||
31 | menu: 'Ŝanĝi Ligilon', | ||
32 | name: 'Nomo', | ||
33 | noAnchors: '<Ne disponeblas ankroj en la dokumento>', | ||
34 | noEmail: 'Bonvolu entajpi la retpoŝtadreson', | ||
35 | noUrl: 'Bonvolu entajpi la URL-on', | ||
36 | other: '<alia>', | ||
37 | popupDependent: 'Dependa (Netscape)', | ||
38 | popupFeatures: 'Atributoj de la Ŝprucfenestro', | ||
39 | popupFullScreen: 'Tutekrane (IE)', | ||
40 | popupLeft: 'Maldekstra Pozicio', | ||
41 | popupLocationBar: 'Adresobreto', | ||
42 | popupMenuBar: 'Menubreto', | ||
43 | popupResizable: 'Dimensiŝanĝebla', | ||
44 | popupScrollBars: 'Rulumskaloj', | ||
45 | popupStatusBar: 'Statobreto', | ||
46 | popupToolbar: 'Ilobreto', | ||
47 | popupTop: 'Supra Pozicio', | ||
48 | rel: 'Rilato', | ||
49 | selectAnchor: 'Elekti Ankron', | ||
50 | styles: 'Stilo', | ||
51 | tabIndex: 'Taba Indekso', | ||
52 | target: 'Celo', | ||
53 | targetFrame: '<kadro>', | ||
54 | targetFrameName: 'Nomo de CelKadro', | ||
55 | targetPopup: '<ŝprucfenestro>', | ||
56 | targetPopupName: 'Nomo de Ŝprucfenestro', | ||
57 | title: 'Ligilo', | ||
58 | toAnchor: 'Ankri en tiu ĉi paĝo', | ||
59 | toEmail: 'Retpoŝto', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Enmeti/Ŝanĝi Ligilon', | ||
62 | type: 'Tipo de Ligilo', | ||
63 | unlink: 'Forigi Ligilon', | ||
64 | upload: 'Alŝuti' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/es.js b/sources/plugins/link/lang/es.js new file mode 100644 index 0000000..d17edbc --- /dev/null +++ b/sources/plugins/link/lang/es.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'es', { | ||
6 | acccessKey: 'Tecla de Acceso', | ||
7 | advanced: 'Avanzado', | ||
8 | advisoryContentType: 'Tipo de Contenido', | ||
9 | advisoryTitle: 'Título', | ||
10 | anchor: { | ||
11 | toolbar: 'Referencia', | ||
12 | menu: 'Propiedades de Referencia', | ||
13 | title: 'Propiedades de Referencia', | ||
14 | name: 'Nombre de la Referencia', | ||
15 | errorName: 'Por favor, complete el nombre de la Referencia', | ||
16 | remove: 'Quitar Referencia' | ||
17 | }, | ||
18 | anchorId: 'Por ID de elemento', | ||
19 | anchorName: 'Por Nombre de Referencia', | ||
20 | charset: 'Fuente de caracteres vinculado', | ||
21 | cssClasses: 'Clases de hojas de estilo', | ||
22 | emailAddress: 'Dirección de E-Mail', | ||
23 | emailBody: 'Cuerpo del Mensaje', | ||
24 | emailSubject: 'Título del Mensaje', | ||
25 | id: 'Id', | ||
26 | info: 'Información de Vínculo', | ||
27 | langCode: 'Código idioma', | ||
28 | langDir: 'Orientación', | ||
29 | langDirLTR: 'Izquierda a Derecha (LTR)', | ||
30 | langDirRTL: 'Derecha a Izquierda (RTL)', | ||
31 | menu: 'Editar Vínculo', | ||
32 | name: 'Nombre', | ||
33 | noAnchors: '(No hay referencias disponibles en el documento)', | ||
34 | noEmail: 'Por favor escriba la dirección de e-mail', | ||
35 | noUrl: 'Por favor escriba el vínculo URL', | ||
36 | other: '<otro>', | ||
37 | popupDependent: 'Dependiente (Netscape)', | ||
38 | popupFeatures: 'Características de Ventana Emergente', | ||
39 | popupFullScreen: 'Pantalla Completa (IE)', | ||
40 | popupLeft: 'Posición Izquierda', | ||
41 | popupLocationBar: 'Barra de ubicación', | ||
42 | popupMenuBar: 'Barra de Menú', | ||
43 | popupResizable: 'Redimensionable', | ||
44 | popupScrollBars: 'Barras de desplazamiento', | ||
45 | popupStatusBar: 'Barra de Estado', | ||
46 | popupToolbar: 'Barra de Herramientas', | ||
47 | popupTop: 'Posición Derecha', | ||
48 | rel: 'Relación', | ||
49 | selectAnchor: 'Seleccionar una referencia', | ||
50 | styles: 'Estilo', | ||
51 | tabIndex: 'Indice de tabulación', | ||
52 | target: 'Destino', | ||
53 | targetFrame: '<marco>', | ||
54 | targetFrameName: 'Nombre del Marco Destino', | ||
55 | targetPopup: '<ventana emergente>', | ||
56 | targetPopupName: 'Nombre de Ventana Emergente', | ||
57 | title: 'Vínculo', | ||
58 | toAnchor: 'Referencia en esta página', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Insertar/Editar Vínculo', | ||
62 | type: 'Tipo de vínculo', | ||
63 | unlink: 'Eliminar Vínculo', | ||
64 | upload: 'Cargar' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/et.js b/sources/plugins/link/lang/et.js new file mode 100644 index 0000000..09db6ca --- /dev/null +++ b/sources/plugins/link/lang/et.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'et', { | ||
6 | acccessKey: 'Juurdepääsu võti', | ||
7 | advanced: 'Täpsemalt', | ||
8 | advisoryContentType: 'Juhendava sisu tüüp', | ||
9 | advisoryTitle: 'Juhendav tiitel', | ||
10 | anchor: { | ||
11 | toolbar: 'Ankru sisestamine/muutmine', | ||
12 | menu: 'Ankru omadused', | ||
13 | title: 'Ankru omadused', | ||
14 | name: 'Ankru nimi', | ||
15 | errorName: 'Palun sisesta ankru nimi', | ||
16 | remove: 'Eemalda ankur' | ||
17 | }, | ||
18 | anchorId: 'Elemendi id järgi', | ||
19 | anchorName: 'Ankru nime järgi', | ||
20 | charset: 'Lingitud ressursi märgistik', | ||
21 | cssClasses: 'Stiilistiku klassid', | ||
22 | emailAddress: 'E-posti aadress', | ||
23 | emailBody: 'Sõnumi tekst', | ||
24 | emailSubject: 'Sõnumi teema', | ||
25 | id: 'ID', | ||
26 | info: 'Lingi info', | ||
27 | langCode: 'Keele suund', | ||
28 | langDir: 'Keele suund', | ||
29 | langDirLTR: 'Vasakult paremale (LTR)', | ||
30 | langDirRTL: 'Paremalt vasakule (RTL)', | ||
31 | menu: 'Muuda linki', | ||
32 | name: 'Nimi', | ||
33 | noAnchors: '(Selles dokumendis pole ankruid)', | ||
34 | noEmail: 'Palun kirjuta e-posti aadress', | ||
35 | noUrl: 'Palun kirjuta lingi URL', | ||
36 | other: '<muu>', | ||
37 | popupDependent: 'Sõltuv (Netscape)', | ||
38 | popupFeatures: 'Hüpikakna omadused', | ||
39 | popupFullScreen: 'Täisekraan (IE)', | ||
40 | popupLeft: 'Vasak asukoht', | ||
41 | popupLocationBar: 'Aadressiriba', | ||
42 | popupMenuBar: 'Menüüriba', | ||
43 | popupResizable: 'Suurust saab muuta', | ||
44 | popupScrollBars: 'Kerimisribad', | ||
45 | popupStatusBar: 'Olekuriba', | ||
46 | popupToolbar: 'Tööriistariba', | ||
47 | popupTop: 'Ülemine asukoht', | ||
48 | rel: 'Suhe', | ||
49 | selectAnchor: 'Vali ankur', | ||
50 | styles: 'Laad', | ||
51 | tabIndex: 'Tab indeks', | ||
52 | target: 'Sihtkoht', | ||
53 | targetFrame: '<raam>', | ||
54 | targetFrameName: 'Sihtmärk raami nimi', | ||
55 | targetPopup: '<hüpikaken>', | ||
56 | targetPopupName: 'Hüpikakna nimi', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Ankur sellel lehel', | ||
59 | toEmail: 'E-post', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Lingi lisamine/muutmine', | ||
62 | type: 'Lingi liik', | ||
63 | unlink: 'Lingi eemaldamine', | ||
64 | upload: 'Lae üles' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/eu.js b/sources/plugins/link/lang/eu.js new file mode 100644 index 0000000..f3415ab --- /dev/null +++ b/sources/plugins/link/lang/eu.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'eu', { | ||
6 | acccessKey: 'Sarbide-tekla', | ||
7 | advanced: 'Aurreratua', | ||
8 | advisoryContentType: 'Aholkatutako eduki-mota', | ||
9 | advisoryTitle: 'Aholkatutako izenburua', | ||
10 | anchor: { | ||
11 | toolbar: 'Aingura', | ||
12 | menu: 'Editatu aingura', | ||
13 | title: 'Ainguraren propietateak', | ||
14 | name: 'Ainguraren izena', | ||
15 | errorName: 'Idatzi ainguraren izena', | ||
16 | remove: 'Kendu aingura' | ||
17 | }, | ||
18 | anchorId: 'Elementuaren Id-aren arabera', | ||
19 | anchorName: 'Aingura-izenaren arabera', | ||
20 | charset: 'Estekatutako baliabide karaktere-jokoa', | ||
21 | cssClasses: 'Estilo-orriko klaseak', | ||
22 | emailAddress: 'E-posta helbidea', | ||
23 | emailBody: 'Mezuaren gorputza', | ||
24 | emailSubject: 'Mezuaren gaia', | ||
25 | id: 'Id', | ||
26 | info: 'Estekaren informazioa', | ||
27 | langCode: 'Hizkuntzaren kodea', | ||
28 | langDir: 'Hizkuntzaren norabidea', | ||
29 | langDirLTR: 'Ezkerretik eskuinera (LTR)', | ||
30 | langDirRTL: 'Eskuinetik ezkerrera (RTL)', | ||
31 | menu: 'Editatu esteka', | ||
32 | name: 'Izena', | ||
33 | noAnchors: '(Ez dago aingurarik erabilgarri dokumentuan)', | ||
34 | noEmail: 'Mesedez idatzi e-posta helbidea', | ||
35 | noUrl: 'Mesedez idatzi estekaren URLa', | ||
36 | other: '<bestelakoa>', | ||
37 | popupDependent: 'Menpekoa (Netscape)', | ||
38 | popupFeatures: 'Laster-leihoaren ezaugarriak', | ||
39 | popupFullScreen: 'Pantaila osoa (IE)', | ||
40 | popupLeft: 'Ezkerreko posizioa', | ||
41 | popupLocationBar: 'Kokaleku-barra', | ||
42 | popupMenuBar: 'Menu-barra', | ||
43 | popupResizable: 'Tamaina aldakorra', | ||
44 | popupScrollBars: 'Korritze-barrak', | ||
45 | popupStatusBar: 'Egoera-barra', | ||
46 | popupToolbar: 'Tresna-barra', | ||
47 | popupTop: 'Goiko posizioa', | ||
48 | rel: 'Erlazioa', | ||
49 | selectAnchor: 'Hautatu aingura', | ||
50 | styles: 'Estiloa', | ||
51 | tabIndex: 'Tabulazio indizea', | ||
52 | target: 'Helburua', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Helburuko markoaren izena', | ||
55 | targetPopup: '<laster-leihoa>', | ||
56 | targetPopupName: 'Laster-leihoaren izena', | ||
57 | title: 'Esteka', | ||
58 | toAnchor: 'Estekatu testuko aingurara', | ||
59 | toEmail: 'E-posta', | ||
60 | toUrl: 'URLa', | ||
61 | toolbar: 'Esteka', | ||
62 | type: 'Esteka-mota', | ||
63 | unlink: 'Kendu esteka', | ||
64 | upload: 'Kargatu' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/fa.js b/sources/plugins/link/lang/fa.js new file mode 100644 index 0000000..fa6dd5a --- /dev/null +++ b/sources/plugins/link/lang/fa.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'fa', { | ||
6 | acccessKey: 'کلید دستیابی', | ||
7 | advanced: 'پیشرفته', | ||
8 | advisoryContentType: 'نوع محتوای کمکی', | ||
9 | advisoryTitle: 'عنوان کمکی', | ||
10 | anchor: { | ||
11 | toolbar: 'گنجاندن/ویرایش لنگر', | ||
12 | menu: 'ویژگیهای لنگر', | ||
13 | title: 'ویژگیهای لنگر', | ||
14 | name: 'نام لنگر', | ||
15 | errorName: 'لطفا نام لنگر را بنویسید', | ||
16 | remove: 'حذف لنگر' | ||
17 | }, | ||
18 | anchorId: 'با شناسهٴ المان', | ||
19 | anchorName: 'با نام لنگر', | ||
20 | charset: 'نویسهگان منبع پیوند شده', | ||
21 | cssClasses: 'کلاسهای شیوهنامه(Stylesheet)', | ||
22 | emailAddress: 'نشانی پست الکترونیکی', | ||
23 | emailBody: 'متن پیام', | ||
24 | emailSubject: 'موضوع پیام', | ||
25 | id: 'شناسه', | ||
26 | info: 'اطلاعات پیوند', | ||
27 | langCode: 'جهتنمای زبان', | ||
28 | langDir: 'جهتنمای زبان', | ||
29 | langDirLTR: 'چپ به راست (LTR)', | ||
30 | langDirRTL: 'راست به چپ (RTL)', | ||
31 | menu: 'ویرایش پیوند', | ||
32 | name: 'نام', | ||
33 | noAnchors: '(در این سند لنگری دردسترس نیست)', | ||
34 | noEmail: 'لطفا نشانی پست الکترونیکی را بنویسید', | ||
35 | noUrl: 'لطفا URL پیوند را بنویسید', | ||
36 | other: '<سایر>', | ||
37 | popupDependent: 'وابسته (Netscape)', | ||
38 | popupFeatures: 'ویژگیهای پنجرهٴ پاپاپ', | ||
39 | popupFullScreen: 'تمام صفحه (IE)', | ||
40 | popupLeft: 'موقعیت چپ', | ||
41 | popupLocationBar: 'نوار موقعیت', | ||
42 | popupMenuBar: 'نوار منو', | ||
43 | popupResizable: 'قابل تغییر اندازه', | ||
44 | popupScrollBars: 'میلههای پیمایش', | ||
45 | popupStatusBar: 'نوار وضعیت', | ||
46 | popupToolbar: 'نوار ابزار', | ||
47 | popupTop: 'موقعیت بالا', | ||
48 | rel: 'وابستگی', | ||
49 | selectAnchor: 'یک لنگر برگزینید', | ||
50 | styles: 'شیوه (style)', | ||
51 | tabIndex: 'نمایهٴ دسترسی با برگه', | ||
52 | target: 'مقصد', | ||
53 | targetFrame: '<فریم>', | ||
54 | targetFrameName: 'نام فریم مقصد', | ||
55 | targetPopup: '<پنجرهٴ پاپاپ>', | ||
56 | targetPopupName: 'نام پنجرهٴ پاپاپ', | ||
57 | title: 'پیوند', | ||
58 | toAnchor: 'لنگر در همین صفحه', | ||
59 | toEmail: 'پست الکترونیکی', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'گنجاندن/ویرایش پیوند', | ||
62 | type: 'نوع پیوند', | ||
63 | unlink: 'برداشتن پیوند', | ||
64 | upload: 'انتقال به سرور' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/fi.js b/sources/plugins/link/lang/fi.js new file mode 100644 index 0000000..eedf64f --- /dev/null +++ b/sources/plugins/link/lang/fi.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'fi', { | ||
6 | acccessKey: 'Pikanäppäin', | ||
7 | advanced: 'Lisäominaisuudet', | ||
8 | advisoryContentType: 'Avustava sisällön tyyppi', | ||
9 | advisoryTitle: 'Avustava otsikko', | ||
10 | anchor: { | ||
11 | toolbar: 'Lisää ankkuri/muokkaa ankkuria', | ||
12 | menu: 'Ankkurin ominaisuudet', | ||
13 | title: 'Ankkurin ominaisuudet', | ||
14 | name: 'Nimi', | ||
15 | errorName: 'Ankkurille on kirjoitettava nimi', | ||
16 | remove: 'Poista ankkuri' | ||
17 | }, | ||
18 | anchorId: 'Ankkurin ID:n mukaan', | ||
19 | anchorName: 'Ankkurin nimen mukaan', | ||
20 | charset: 'Linkitetty kirjaimisto', | ||
21 | cssClasses: 'Tyyliluokat', | ||
22 | emailAddress: 'Sähköpostiosoite', | ||
23 | emailBody: 'Viesti', | ||
24 | emailSubject: 'Aihe', | ||
25 | id: 'Tunniste', | ||
26 | info: 'Linkin tiedot', | ||
27 | langCode: 'Kielen suunta', | ||
28 | langDir: 'Kielen suunta', | ||
29 | langDirLTR: 'Vasemmalta oikealle (LTR)', | ||
30 | langDirRTL: 'Oikealta vasemmalle (RTL)', | ||
31 | menu: 'Muokkaa linkkiä', | ||
32 | name: 'Nimi', | ||
33 | noAnchors: '(Ei ankkureita tässä dokumentissa)', | ||
34 | noEmail: 'Kirjoita sähköpostiosoite', | ||
35 | noUrl: 'Linkille on kirjoitettava URL', | ||
36 | other: '<muu>', | ||
37 | popupDependent: 'Riippuva (Netscape)', | ||
38 | popupFeatures: 'Popup ikkunan ominaisuudet', | ||
39 | popupFullScreen: 'Täysi ikkuna (IE)', | ||
40 | popupLeft: 'Vasemmalta (px)', | ||
41 | popupLocationBar: 'Osoiterivi', | ||
42 | popupMenuBar: 'Valikkorivi', | ||
43 | popupResizable: 'Venytettävä', | ||
44 | popupScrollBars: 'Vierityspalkit', | ||
45 | popupStatusBar: 'Tilarivi', | ||
46 | popupToolbar: 'Vakiopainikkeet', | ||
47 | popupTop: 'Ylhäältä (px)', | ||
48 | rel: 'Suhde', | ||
49 | selectAnchor: 'Valitse ankkuri', | ||
50 | styles: 'Tyyli', | ||
51 | tabIndex: 'Tabulaattori indeksi', | ||
52 | target: 'Kohde', | ||
53 | targetFrame: '<kehys>', | ||
54 | targetFrameName: 'Kohdekehyksen nimi', | ||
55 | targetPopup: '<popup ikkuna>', | ||
56 | targetPopupName: 'Popup ikkunan nimi', | ||
57 | title: 'Linkki', | ||
58 | toAnchor: 'Ankkuri tässä sivussa', | ||
59 | toEmail: 'Sähköposti', | ||
60 | toUrl: 'Osoite', | ||
61 | toolbar: 'Lisää linkki/muokkaa linkkiä', | ||
62 | type: 'Linkkityyppi', | ||
63 | unlink: 'Poista linkki', | ||
64 | upload: 'Lisää tiedosto' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/fo.js b/sources/plugins/link/lang/fo.js new file mode 100644 index 0000000..d46eed4 --- /dev/null +++ b/sources/plugins/link/lang/fo.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'fo', { | ||
6 | acccessKey: 'Snarvegisknöttur', | ||
7 | advanced: 'Fjølbroytt', | ||
8 | advisoryContentType: 'Vegleiðandi innihaldsslag', | ||
9 | advisoryTitle: 'Vegleiðandi heiti', | ||
10 | anchor: { | ||
11 | toolbar: 'Ger/broyt marknastein', | ||
12 | menu: 'Eginleikar fyri marknastein', | ||
13 | title: 'Eginleikar fyri marknastein', | ||
14 | name: 'Heiti marknasteinsins', | ||
15 | errorName: 'Vinarliga rita marknasteinsins heiti', | ||
16 | remove: 'Strika marknastein' | ||
17 | }, | ||
18 | anchorId: 'Eftir element Id', | ||
19 | anchorName: 'Eftir navni á marknasteini', | ||
20 | charset: 'Atknýtt teknsett', | ||
21 | cssClasses: 'Typografi klassar', | ||
22 | emailAddress: 'Teldupost-adressa', | ||
23 | emailBody: 'Breyðtekstur', | ||
24 | emailSubject: 'Evni', | ||
25 | id: 'Id', | ||
26 | info: 'Tilknýtis upplýsingar', | ||
27 | langCode: 'Tekstkós', | ||
28 | langDir: 'Tekstkós', | ||
29 | langDirLTR: 'Frá vinstru til høgru (LTR)', | ||
30 | langDirRTL: 'Frá høgru til vinstru (RTL)', | ||
31 | menu: 'Broyt tilknýti', | ||
32 | name: 'Navn', | ||
33 | noAnchors: '(Eingir marknasteinar eru í hesum dokumentið)', | ||
34 | noEmail: 'Vinarliga skriva teldupost-adressu', | ||
35 | noUrl: 'Vinarliga skriva tilknýti (URL)', | ||
36 | other: '<annað>', | ||
37 | popupDependent: 'Bundið (Netscape)', | ||
38 | popupFeatures: 'Popup vindeygans víðkaðu eginleikar', | ||
39 | popupFullScreen: 'Fullur skermur (IE)', | ||
40 | popupLeft: 'Frástøða frá vinstru', | ||
41 | popupLocationBar: 'Adressulinja', | ||
42 | popupMenuBar: 'Skrábjálki', | ||
43 | popupResizable: 'Stødd kann broytast', | ||
44 | popupScrollBars: 'Rullibjálki', | ||
45 | popupStatusBar: 'Støðufrágreiðingarbjálki', | ||
46 | popupToolbar: 'Amboðsbjálki', | ||
47 | popupTop: 'Frástøða frá íerva', | ||
48 | rel: 'Relatión', | ||
49 | selectAnchor: 'Vel ein marknastein', | ||
50 | styles: 'Typografi', | ||
51 | tabIndex: 'Tabulator indeks', | ||
52 | target: 'Target', | ||
53 | targetFrame: '<ramma>', | ||
54 | targetFrameName: 'Vís navn vindeygans', | ||
55 | targetPopup: '<popup vindeyga>', | ||
56 | targetPopupName: 'Popup vindeygans navn', | ||
57 | title: 'Tilknýti', | ||
58 | toAnchor: 'Tilknýti til marknastein í tekstinum', | ||
59 | toEmail: 'Teldupostur', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Ger/broyt tilknýti', | ||
62 | type: 'Tilknýtisslag', | ||
63 | unlink: 'Strika tilknýti', | ||
64 | upload: 'Send til ambætaran' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/fr-ca.js b/sources/plugins/link/lang/fr-ca.js new file mode 100644 index 0000000..816ad2b --- /dev/null +++ b/sources/plugins/link/lang/fr-ca.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'fr-ca', { | ||
6 | acccessKey: 'Touche d\'accessibilité', | ||
7 | advanced: 'Avancé', | ||
8 | advisoryContentType: 'Type de contenu', | ||
9 | advisoryTitle: 'Description', | ||
10 | anchor: { | ||
11 | toolbar: 'Ancre', | ||
12 | menu: 'Modifier l\'ancre', | ||
13 | title: 'Propriétés de l\'ancre', | ||
14 | name: 'Nom de l\'ancre', | ||
15 | errorName: 'Veuillez saisir le nom de l\'ancre', | ||
16 | remove: 'Supprimer l\'ancre' | ||
17 | }, | ||
18 | anchorId: 'Par ID', | ||
19 | anchorName: 'Par nom', | ||
20 | charset: 'Encodage de la cible', | ||
21 | cssClasses: 'Classes CSS', | ||
22 | emailAddress: 'Courriel', | ||
23 | emailBody: 'Corps du message', | ||
24 | emailSubject: 'Objet du message', | ||
25 | id: 'ID', | ||
26 | info: 'Informations sur le lien', | ||
27 | langCode: 'Code de langue', | ||
28 | langDir: 'Sens d\'écriture', | ||
29 | langDirLTR: 'De gauche à droite (LTR)', | ||
30 | langDirRTL: 'De droite à gauche (RTL)', | ||
31 | menu: 'Modifier le lien', | ||
32 | name: 'Nom', | ||
33 | noAnchors: '(Pas d\'ancre disponible dans le document)', | ||
34 | noEmail: 'Veuillez saisir le courriel', | ||
35 | noUrl: 'Veuillez saisir l\'URL', | ||
36 | other: '<autre>', | ||
37 | popupDependent: 'Dépendante (Netscape)', | ||
38 | popupFeatures: 'Caractéristiques de la fenêtre popup', | ||
39 | popupFullScreen: 'Plein écran (IE)', | ||
40 | popupLeft: 'Position de la gauche', | ||
41 | popupLocationBar: 'Barre d\'adresse', | ||
42 | popupMenuBar: 'Barre de menu', | ||
43 | popupResizable: 'Redimensionnable', | ||
44 | popupScrollBars: 'Barres de défilement', | ||
45 | popupStatusBar: 'Barre d\'état', | ||
46 | popupToolbar: 'Barre d\'outils', | ||
47 | popupTop: 'Position à partir du haut', | ||
48 | rel: 'Relation', | ||
49 | selectAnchor: 'Sélectionner une ancre', | ||
50 | styles: 'Style', | ||
51 | tabIndex: 'Ordre de tabulation', | ||
52 | target: 'Destination', | ||
53 | targetFrame: '<Cadre>', | ||
54 | targetFrameName: 'Nom du cadre de destination', | ||
55 | targetPopup: '<fenêtre popup>', | ||
56 | targetPopupName: 'Nom de la fenêtre popup', | ||
57 | title: 'Lien', | ||
58 | toAnchor: 'Ancre dans cette page', | ||
59 | toEmail: 'Courriel', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Lien', | ||
62 | type: 'Type de lien', | ||
63 | unlink: 'Supprimer le lien', | ||
64 | upload: 'Téléverser' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/fr.js b/sources/plugins/link/lang/fr.js new file mode 100644 index 0000000..fe8755d --- /dev/null +++ b/sources/plugins/link/lang/fr.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'fr', { | ||
6 | acccessKey: 'Touche d\'accessibilité', | ||
7 | advanced: 'Avancé', | ||
8 | advisoryContentType: 'Type de contenu (ex: text/html)', | ||
9 | advisoryTitle: 'Description (title)', | ||
10 | anchor: { | ||
11 | toolbar: 'Ancre', | ||
12 | menu: 'Editer l\'ancre', | ||
13 | title: 'Propriétés de l\'ancre', | ||
14 | name: 'Nom de l\'ancre', | ||
15 | errorName: 'Veuillez entrer le nom de l\'ancre.', | ||
16 | remove: 'Supprimer l\'ancre' | ||
17 | }, | ||
18 | anchorId: 'Par ID d\'élément', | ||
19 | anchorName: 'Par nom d\'ancre', | ||
20 | charset: 'Charset de la cible', | ||
21 | cssClasses: 'Classe CSS', | ||
22 | emailAddress: 'Adresse E-Mail', | ||
23 | emailBody: 'Corps du message', | ||
24 | emailSubject: 'Sujet du message', | ||
25 | id: 'Id', | ||
26 | info: 'Infos sur le lien', | ||
27 | langCode: 'Code de langue', | ||
28 | langDir: 'Sens d\'écriture', | ||
29 | langDirLTR: 'Gauche à droite', | ||
30 | langDirRTL: 'Droite à gauche', | ||
31 | menu: 'Editer le lien', | ||
32 | name: 'Nom', | ||
33 | noAnchors: '(Aucune ancre disponible dans ce document)', | ||
34 | noEmail: 'Veuillez entrer l\'adresse e-mail', | ||
35 | noUrl: 'Veuillez entrer l\'adresse du lien', | ||
36 | other: '<autre>', | ||
37 | popupDependent: 'Dépendante (Netscape)', | ||
38 | popupFeatures: 'Options de la fenêtre popup', | ||
39 | popupFullScreen: 'Plein écran (IE)', | ||
40 | popupLeft: 'Position gauche', | ||
41 | popupLocationBar: 'Barre d\'adresse', | ||
42 | popupMenuBar: 'Barre de menu', | ||
43 | popupResizable: 'Redimensionnable', | ||
44 | popupScrollBars: 'Barres de défilement', | ||
45 | popupStatusBar: 'Barre de status', | ||
46 | popupToolbar: 'Barre d\'outils', | ||
47 | popupTop: 'Position haute', | ||
48 | rel: 'Relation', | ||
49 | selectAnchor: 'Sélectionner l\'ancre', | ||
50 | styles: 'Style', | ||
51 | tabIndex: 'Index de tabulation', | ||
52 | target: 'Cible', | ||
53 | targetFrame: '<cadre>', | ||
54 | targetFrameName: 'Nom du Cadre destination', | ||
55 | targetPopup: '<fenêtre popup>', | ||
56 | targetPopupName: 'Nom de la fenêtre popup', | ||
57 | title: 'Lien', | ||
58 | toAnchor: 'Ancre', | ||
59 | toEmail: 'E-mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Lien', | ||
62 | type: 'Type de lien', | ||
63 | unlink: 'Supprimer le lien', | ||
64 | upload: 'Envoyer' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/gl.js b/sources/plugins/link/lang/gl.js new file mode 100644 index 0000000..bf55977 --- /dev/null +++ b/sources/plugins/link/lang/gl.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'gl', { | ||
6 | acccessKey: 'Chave de acceso', | ||
7 | advanced: 'Avanzado', | ||
8 | advisoryContentType: 'Tipo de contido informativo', | ||
9 | advisoryTitle: 'Título', | ||
10 | anchor: { | ||
11 | toolbar: 'Ancoraxe', | ||
12 | menu: 'Editar a ancoraxe', | ||
13 | title: 'Propiedades da ancoraxe', | ||
14 | name: 'Nome da ancoraxe', | ||
15 | errorName: 'Escriba o nome da ancoraxe', | ||
16 | remove: 'Retirar a ancoraxe' | ||
17 | }, | ||
18 | anchorId: 'Polo ID do elemento', | ||
19 | anchorName: 'Polo nome da ancoraxe', | ||
20 | charset: 'Codificación do recurso ligado', | ||
21 | cssClasses: 'Clases da folla de estilos', | ||
22 | emailAddress: 'Enderezo de correo', | ||
23 | emailBody: 'Corpo da mensaxe', | ||
24 | emailSubject: 'Asunto da mensaxe', | ||
25 | id: 'ID', | ||
26 | info: 'Información da ligazón', | ||
27 | langCode: 'Código do idioma', | ||
28 | langDir: 'Dirección de escritura do idioma', | ||
29 | langDirLTR: 'Esquerda a dereita (LTR)', | ||
30 | langDirRTL: 'Dereita a esquerda (RTL)', | ||
31 | menu: 'Editar a ligazón', | ||
32 | name: 'Nome', | ||
33 | noAnchors: '(Non hai ancoraxes dispoñíbeis no documento)', | ||
34 | noEmail: 'Escriba o enderezo de correo', | ||
35 | noUrl: 'Escriba a ligazón URL', | ||
36 | other: '<outro>', | ||
37 | popupDependent: 'Dependente (Netscape)', | ||
38 | popupFeatures: 'Características da xanela emerxente', | ||
39 | popupFullScreen: 'Pantalla completa (IE)', | ||
40 | popupLeft: 'Posición esquerda', | ||
41 | popupLocationBar: 'Barra de localización', | ||
42 | popupMenuBar: 'Barra do menú', | ||
43 | popupResizable: 'Redimensionábel', | ||
44 | popupScrollBars: 'Barras de desprazamento', | ||
45 | popupStatusBar: 'Barra de estado', | ||
46 | popupToolbar: 'Barra de ferramentas', | ||
47 | popupTop: 'Posición superior', | ||
48 | rel: 'Relación', | ||
49 | selectAnchor: 'Seleccionar unha ancoraxe', | ||
50 | styles: 'Estilo', | ||
51 | tabIndex: 'Índice de tabulación', | ||
52 | target: 'Destino', | ||
53 | targetFrame: '<marco>', | ||
54 | targetFrameName: 'Nome do marco de destino', | ||
55 | targetPopup: '<xanela emerxente>', | ||
56 | targetPopupName: 'Nome da xanela emerxente', | ||
57 | title: 'Ligazón', | ||
58 | toAnchor: 'Ligar coa ancoraxe no testo', | ||
59 | toEmail: 'Correo', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Ligazón', | ||
62 | type: 'Tipo de ligazón', | ||
63 | unlink: 'Eliminar a ligazón', | ||
64 | upload: 'Enviar' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/gu.js b/sources/plugins/link/lang/gu.js new file mode 100644 index 0000000..c054450 --- /dev/null +++ b/sources/plugins/link/lang/gu.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'gu', { | ||
6 | acccessKey: 'ઍક્સેસ કી', | ||
7 | advanced: 'અડ્વાન્સડ', | ||
8 | advisoryContentType: 'મુખ્ય કન્ટેન્ટ પ્રકાર', | ||
9 | advisoryTitle: 'મુખ્ય મથાળું', | ||
10 | anchor: { | ||
11 | toolbar: 'ઍંકર ઇન્સર્ટ/દાખલ કરવી', | ||
12 | menu: 'ઍંકરના ગુણ', | ||
13 | title: 'ઍંકરના ગુણ', | ||
14 | name: 'ઍંકરનું નામ', | ||
15 | errorName: 'ઍંકરનું નામ ટાઈપ કરો', | ||
16 | remove: 'સ્થિર નકરવું' | ||
17 | }, | ||
18 | anchorId: 'ઍંકર એલિમન્ટ Id થી પસંદ કરો', | ||
19 | anchorName: 'ઍંકર નામથી પસંદ કરો', | ||
20 | charset: 'લિંક રિસૉર્સ કૅરિક્ટર સેટ', | ||
21 | cssClasses: 'સ્ટાઇલ-શીટ ક્લાસ', | ||
22 | emailAddress: 'ઈ-મેલ સરનામું', | ||
23 | emailBody: 'સંદેશ', | ||
24 | emailSubject: 'ઈ-મેલ વિષય', | ||
25 | id: 'Id', | ||
26 | info: 'લિંક ઇન્ફૉ ટૅબ', | ||
27 | langCode: 'ભાષા લેખવાની પદ્ધતિ', | ||
28 | langDir: 'ભાષા લેખવાની પદ્ધતિ', | ||
29 | langDirLTR: 'ડાબે થી જમણે (LTR)', | ||
30 | langDirRTL: 'જમણે થી ડાબે (RTL)', | ||
31 | menu: ' લિંક એડિટ/માં ફેરફાર કરવો', | ||
32 | name: 'નામ', | ||
33 | noAnchors: '(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)', | ||
34 | noEmail: 'ઈ-મેલ સરનામું ટાઇપ કરો', | ||
35 | noUrl: 'લિંક URL ટાઇપ કરો', | ||
36 | other: '<other> <અન્ય>', | ||
37 | popupDependent: 'ડિપેન્ડન્ટ (Netscape)', | ||
38 | popupFeatures: 'પૉપ-અપ વિન્ડો ફીચરસૅ', | ||
39 | popupFullScreen: 'ફુલ સ્ક્રીન (IE)', | ||
40 | popupLeft: 'ડાબી બાજુ', | ||
41 | popupLocationBar: 'લોકેશન બાર', | ||
42 | popupMenuBar: 'મેન્યૂ બાર', | ||
43 | popupResizable: 'રીસાઈઝએબલ', | ||
44 | popupScrollBars: 'સ્ક્રોલ બાર', | ||
45 | popupStatusBar: 'સ્ટૅટસ બાર', | ||
46 | popupToolbar: 'ટૂલ બાર', | ||
47 | popupTop: 'જમણી બાજુ', | ||
48 | rel: 'સંબંધની સ્થિતિ', | ||
49 | selectAnchor: 'ઍંકર પસંદ કરો', | ||
50 | styles: 'સ્ટાઇલ', | ||
51 | tabIndex: 'ટૅબ ઇન્ડેક્સ', | ||
52 | target: 'ટાર્ગેટ/લક્ષ્ય', | ||
53 | targetFrame: '<ફ્રેમ>', | ||
54 | targetFrameName: 'ટાર્ગેટ ફ્રેમ નું નામ', | ||
55 | targetPopup: '<પૉપ-અપ વિન્ડો>', | ||
56 | targetPopupName: 'પૉપ-અપ વિન્ડો નું નામ', | ||
57 | title: 'લિંક', | ||
58 | toAnchor: 'આ પેજનો ઍંકર', | ||
59 | toEmail: 'ઈ-મેલ', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'લિંક ઇન્સર્ટ/દાખલ કરવી', | ||
62 | type: 'લિંક પ્રકાર', | ||
63 | unlink: 'લિંક કાઢવી', | ||
64 | upload: 'અપલોડ' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/he.js b/sources/plugins/link/lang/he.js new file mode 100644 index 0000000..d6b67e1 --- /dev/null +++ b/sources/plugins/link/lang/he.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'he', { | ||
6 | acccessKey: 'מקש גישה', | ||
7 | advanced: 'אפשרויות מתקדמות', | ||
8 | advisoryContentType: 'Content Type מוצע', | ||
9 | advisoryTitle: 'כותרת מוצעת', | ||
10 | anchor: { | ||
11 | toolbar: 'הוספת/עריכת נקודת עיגון', | ||
12 | menu: 'מאפייני נקודת עיגון', | ||
13 | title: 'מאפייני נקודת עיגון', | ||
14 | name: 'שם לנקודת עיגון', | ||
15 | errorName: 'יש להקליד שם לנקודת עיגון', | ||
16 | remove: 'מחיקת נקודת עיגון' | ||
17 | }, | ||
18 | anchorId: 'עפ"י זיהוי (ID) האלמנט', | ||
19 | anchorName: 'עפ"י שם העוגן', | ||
20 | charset: 'קידוד המשאב המקושר', | ||
21 | cssClasses: 'גיליונות עיצוב קבוצות', | ||
22 | emailAddress: 'כתובת הדוא"ל', | ||
23 | emailBody: 'גוף ההודעה', | ||
24 | emailSubject: 'נושא ההודעה', | ||
25 | id: 'זיהוי (ID)', | ||
26 | info: 'מידע על הקישור', | ||
27 | langCode: 'קוד שפה', | ||
28 | langDir: 'כיוון שפה', | ||
29 | langDirLTR: 'שמאל לימין (LTR)', | ||
30 | langDirRTL: 'ימין לשמאל (RTL)', | ||
31 | menu: 'מאפייני קישור', | ||
32 | name: 'שם', | ||
33 | noAnchors: '(אין עוגנים זמינים בדף)', | ||
34 | noEmail: 'יש להקליד את כתובת הדוא"ל', | ||
35 | noUrl: 'יש להקליד את כתובת הקישור (URL)', | ||
36 | other: '<אחר>', | ||
37 | popupDependent: 'תלוי (Netscape)', | ||
38 | popupFeatures: 'תכונות החלון הקופץ', | ||
39 | popupFullScreen: 'מסך מלא (IE)', | ||
40 | popupLeft: 'מיקום צד שמאל', | ||
41 | popupLocationBar: 'סרגל כתובת', | ||
42 | popupMenuBar: 'סרגל תפריט', | ||
43 | popupResizable: 'שינוי גודל', | ||
44 | popupScrollBars: 'ניתן לגלילה', | ||
45 | popupStatusBar: 'סרגל חיווי', | ||
46 | popupToolbar: 'סרגל הכלים', | ||
47 | popupTop: 'מיקום צד עליון', | ||
48 | rel: 'קשר גומלין', | ||
49 | selectAnchor: 'בחירת עוגן', | ||
50 | styles: 'סגנון', | ||
51 | tabIndex: 'מספר טאב', | ||
52 | target: 'מטרה', | ||
53 | targetFrame: '<מסגרת>', | ||
54 | targetFrameName: 'שם מסגרת היעד', | ||
55 | targetPopup: '<חלון קופץ>', | ||
56 | targetPopupName: 'שם החלון הקופץ', | ||
57 | title: 'קישור', | ||
58 | toAnchor: 'עוגן בעמוד זה', | ||
59 | toEmail: 'דוא"ל', | ||
60 | toUrl: 'כתובת (URL)', | ||
61 | toolbar: 'הוספת/עריכת קישור', | ||
62 | type: 'סוג קישור', | ||
63 | unlink: 'הסרת הקישור', | ||
64 | upload: 'העלאה' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/hi.js b/sources/plugins/link/lang/hi.js new file mode 100644 index 0000000..7c8939b --- /dev/null +++ b/sources/plugins/link/lang/hi.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'hi', { | ||
6 | acccessKey: 'ऍक्सॅस की', | ||
7 | advanced: 'ऍड्वान्स्ड', | ||
8 | advisoryContentType: 'परामर्श कन्टॅन्ट प्रकार', | ||
9 | advisoryTitle: 'परामर्श शीर्शक', | ||
10 | anchor: { | ||
11 | toolbar: 'ऐंकर इन्सर्ट/संपादन', | ||
12 | menu: 'ऐंकर प्रॉपर्टीज़', | ||
13 | title: 'ऐंकर प्रॉपर्टीज़', | ||
14 | name: 'ऐंकर का नाम', | ||
15 | errorName: 'ऐंकर का नाम टाइप करें', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'ऍलीमॅन्ट Id से', | ||
19 | anchorName: 'ऐंकर नाम से', | ||
20 | charset: 'लिंक रिसोर्स करॅक्टर सॅट', | ||
21 | cssClasses: 'स्टाइल-शीट क्लास', | ||
22 | emailAddress: 'ई-मेल पता', | ||
23 | emailBody: 'संदेश', | ||
24 | emailSubject: 'संदेश विषय', | ||
25 | id: 'Id', | ||
26 | info: 'लिंक ', | ||
27 | langCode: 'भाषा लिखने की दिशा', | ||
28 | langDir: 'भाषा लिखने की दिशा', | ||
29 | langDirLTR: 'बायें से दायें (LTR)', | ||
30 | langDirRTL: 'दायें से बायें (RTL)', | ||
31 | menu: 'लिंक संपादन', | ||
32 | name: 'नाम', | ||
33 | noAnchors: '(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)', | ||
34 | noEmail: 'ई-मेल पता टाइप करें', | ||
35 | noUrl: 'लिंक URL टाइप करें', | ||
36 | other: '<अन्य>', | ||
37 | popupDependent: 'डिपेन्डॅन्ट (Netscape)', | ||
38 | popupFeatures: 'पॉप-अप विन्डो फ़ीचर्स', | ||
39 | popupFullScreen: 'फ़ुल स्क्रीन (IE)', | ||
40 | popupLeft: 'बायीं तरफ', | ||
41 | popupLocationBar: 'लोकेशन बार', | ||
42 | popupMenuBar: 'मॅन्यू बार', | ||
43 | popupResizable: 'आकार बदलने लायक', | ||
44 | popupScrollBars: 'स्क्रॉल बार', | ||
45 | popupStatusBar: 'स्टेटस बार', | ||
46 | popupToolbar: 'टूल बार', | ||
47 | popupTop: 'दायीं तरफ', | ||
48 | rel: 'संबंध', | ||
49 | selectAnchor: 'ऐंकर चुनें', | ||
50 | styles: 'स्टाइल', | ||
51 | tabIndex: 'टैब इन्डॅक्स', | ||
52 | target: 'टार्गेट', | ||
53 | targetFrame: '<फ़्रेम>', | ||
54 | targetFrameName: 'टार्गेट फ़्रेम का नाम', | ||
55 | targetPopup: '<पॉप-अप विन्डो>', | ||
56 | targetPopupName: 'पॉप-अप विन्डो का नाम', | ||
57 | title: 'लिंक', | ||
58 | toAnchor: 'इस पेज का ऐंकर', | ||
59 | toEmail: 'ई-मेल', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'लिंक इन्सर्ट/संपादन', | ||
62 | type: 'लिंक प्रकार', | ||
63 | unlink: 'लिंक हटायें', | ||
64 | upload: 'अपलोड' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/hr.js b/sources/plugins/link/lang/hr.js new file mode 100644 index 0000000..1d9f224 --- /dev/null +++ b/sources/plugins/link/lang/hr.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'hr', { | ||
6 | acccessKey: 'Pristupna tipka', | ||
7 | advanced: 'Napredno', | ||
8 | advisoryContentType: 'Advisory vrsta sadržaja', | ||
9 | advisoryTitle: 'Advisory naslov', | ||
10 | anchor: { | ||
11 | toolbar: 'Ubaci/promijeni sidro', | ||
12 | menu: 'Svojstva sidra', | ||
13 | title: 'Svojstva sidra', | ||
14 | name: 'Ime sidra', | ||
15 | errorName: 'Molimo unesite ime sidra', | ||
16 | remove: 'Ukloni sidro' | ||
17 | }, | ||
18 | anchorId: 'Po Id elementa', | ||
19 | anchorName: 'Po nazivu sidra', | ||
20 | charset: 'Kodna stranica povezanih resursa', | ||
21 | cssClasses: 'Stylesheet klase', | ||
22 | emailAddress: 'E-Mail adresa', | ||
23 | emailBody: 'Sadržaj poruke', | ||
24 | emailSubject: 'Naslov', | ||
25 | id: 'Id', | ||
26 | info: 'Link Info', | ||
27 | langCode: 'Smjer jezika', | ||
28 | langDir: 'Smjer jezika', | ||
29 | langDirLTR: 'S lijeva na desno (LTR)', | ||
30 | langDirRTL: 'S desna na lijevo (RTL)', | ||
31 | menu: 'Promijeni link', | ||
32 | name: 'Naziv', | ||
33 | noAnchors: '(Nema dostupnih sidra)', | ||
34 | noEmail: 'Molimo upišite e-mail adresu', | ||
35 | noUrl: 'Molimo upišite URL link', | ||
36 | other: '<drugi>', | ||
37 | popupDependent: 'Ovisno (Netscape)', | ||
38 | popupFeatures: 'Mogućnosti popup prozora', | ||
39 | popupFullScreen: 'Cijeli ekran (IE)', | ||
40 | popupLeft: 'Lijeva pozicija', | ||
41 | popupLocationBar: 'Traka za lokaciju', | ||
42 | popupMenuBar: 'Izborna traka', | ||
43 | popupResizable: 'Promjenjiva veličina', | ||
44 | popupScrollBars: 'Scroll traka', | ||
45 | popupStatusBar: 'Statusna traka', | ||
46 | popupToolbar: 'Traka s alatima', | ||
47 | popupTop: 'Gornja pozicija', | ||
48 | rel: 'Veza', | ||
49 | selectAnchor: 'Odaberi sidro', | ||
50 | styles: 'Stil', | ||
51 | tabIndex: 'Tab Indeks', | ||
52 | target: 'Meta', | ||
53 | targetFrame: '<okvir>', | ||
54 | targetFrameName: 'Ime ciljnog okvira', | ||
55 | targetPopup: '<popup prozor>', | ||
56 | targetPopupName: 'Naziv popup prozora', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Sidro na ovoj stranici', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Ubaci/promijeni link', | ||
62 | type: 'Link vrsta', | ||
63 | unlink: 'Ukloni link', | ||
64 | upload: 'Pošalji' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/hu.js b/sources/plugins/link/lang/hu.js new file mode 100644 index 0000000..dd7c7ac --- /dev/null +++ b/sources/plugins/link/lang/hu.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'hu', { | ||
6 | acccessKey: 'Billentyűkombináció', | ||
7 | advanced: 'További opciók', | ||
8 | advisoryContentType: 'Súgó tartalomtípusa', | ||
9 | advisoryTitle: 'Súgócimke', | ||
10 | anchor: { | ||
11 | toolbar: 'Horgony beillesztése/szerkesztése', | ||
12 | menu: 'Horgony tulajdonságai', | ||
13 | title: 'Horgony tulajdonságai', | ||
14 | name: 'Horgony neve', | ||
15 | errorName: 'Kérem adja meg a horgony nevét', | ||
16 | remove: 'Horgony eltávolítása' | ||
17 | }, | ||
18 | anchorId: 'Azonosító szerint', | ||
19 | anchorName: 'Horgony név szerint', | ||
20 | charset: 'Hivatkozott tartalom kódlapja', | ||
21 | cssClasses: 'Stíluskészlet', | ||
22 | emailAddress: 'E-Mail cím', | ||
23 | emailBody: 'Üzenet', | ||
24 | emailSubject: 'Üzenet tárgya', | ||
25 | id: 'Id', | ||
26 | info: 'Alaptulajdonságok', | ||
27 | langCode: 'Írás iránya', | ||
28 | langDir: 'Írás iránya', | ||
29 | langDirLTR: 'Balról jobbra', | ||
30 | langDirRTL: 'Jobbról balra', | ||
31 | menu: 'Hivatkozás módosítása', | ||
32 | name: 'Név', | ||
33 | noAnchors: '(Nincs horgony a dokumentumban)', | ||
34 | noEmail: 'Adja meg az E-Mail címet', | ||
35 | noUrl: 'Adja meg a hivatkozás webcímét', | ||
36 | other: '<más>', | ||
37 | popupDependent: 'Szülőhöz kapcsolt (csak Netscape)', | ||
38 | popupFeatures: 'Felugró ablak jellemzői', | ||
39 | popupFullScreen: 'Teljes képernyő (csak IE)', | ||
40 | popupLeft: 'Bal pozíció', | ||
41 | popupLocationBar: 'Címsor', | ||
42 | popupMenuBar: 'Menü sor', | ||
43 | popupResizable: 'Átméretezés', | ||
44 | popupScrollBars: 'Gördítősáv', | ||
45 | popupStatusBar: 'Állapotsor', | ||
46 | popupToolbar: 'Eszköztár', | ||
47 | popupTop: 'Felső pozíció', | ||
48 | rel: 'Kapcsolat típusa', | ||
49 | selectAnchor: 'Horgony választása', | ||
50 | styles: 'Stílus', | ||
51 | tabIndex: 'Tabulátor index', | ||
52 | target: 'Tartalom megjelenítése', | ||
53 | targetFrame: '<keretben>', | ||
54 | targetFrameName: 'Keret neve', | ||
55 | targetPopup: '<felugró ablakban>', | ||
56 | targetPopupName: 'Felugró ablak neve', | ||
57 | title: 'Hivatkozás tulajdonságai', | ||
58 | toAnchor: 'Horgony az oldalon', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Hivatkozás beillesztése/módosítása', | ||
62 | type: 'Hivatkozás típusa', | ||
63 | unlink: 'Hivatkozás törlése', | ||
64 | upload: 'Feltöltés' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/id.js b/sources/plugins/link/lang/id.js new file mode 100644 index 0000000..ff8e559 --- /dev/null +++ b/sources/plugins/link/lang/id.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'id', { | ||
6 | acccessKey: 'Access Key', // MISSING | ||
7 | advanced: 'Advanced', // MISSING | ||
8 | advisoryContentType: 'Advisory Content Type', // MISSING | ||
9 | advisoryTitle: 'Penasehat Judul', | ||
10 | anchor: { | ||
11 | toolbar: 'Anchor', // MISSING | ||
12 | menu: 'Edit Anchor', // MISSING | ||
13 | title: 'Anchor Properties', // MISSING | ||
14 | name: 'Anchor Name', // MISSING | ||
15 | errorName: 'Please type the anchor name', // MISSING | ||
16 | remove: 'Remove Anchor' // MISSING | ||
17 | }, | ||
18 | anchorId: 'By Element Id', // MISSING | ||
19 | anchorName: 'By Anchor Name', // MISSING | ||
20 | charset: 'Linked Resource Charset', // MISSING | ||
21 | cssClasses: 'Kelas Stylesheet', | ||
22 | emailAddress: 'Alamat E-mail', | ||
23 | emailBody: 'Message Body', // MISSING | ||
24 | emailSubject: 'Judul Pesan', | ||
25 | id: 'Id', | ||
26 | info: 'Link Info', // MISSING | ||
27 | langCode: 'Kode Bahasa', | ||
28 | langDir: 'Arah Bahasa', | ||
29 | langDirLTR: 'Kiri ke Kanan (LTR)', | ||
30 | langDirRTL: 'Kanan ke Kiri (RTL)', | ||
31 | menu: 'Sunting Tautan', | ||
32 | name: 'Nama', | ||
33 | noAnchors: '(No anchors available in the document)', // MISSING | ||
34 | noEmail: 'Silahkan ketikkan alamat e-mail', | ||
35 | noUrl: 'Silahkan ketik URL tautan', | ||
36 | other: '<lainnya>', | ||
37 | popupDependent: 'Dependent (Netscape)', // MISSING | ||
38 | popupFeatures: 'Popup Window Features', // MISSING | ||
39 | popupFullScreen: 'Full Screen (IE)', // MISSING | ||
40 | popupLeft: 'Left Position', // MISSING | ||
41 | popupLocationBar: 'Location Bar', // MISSING | ||
42 | popupMenuBar: 'Menu Bar', // MISSING | ||
43 | popupResizable: 'Resizable', // MISSING | ||
44 | popupScrollBars: 'Scroll Bars', // MISSING | ||
45 | popupStatusBar: 'Status Bar', // MISSING | ||
46 | popupToolbar: 'Toolbar', // MISSING | ||
47 | popupTop: 'Top Position', // MISSING | ||
48 | rel: 'Hubungan', | ||
49 | selectAnchor: 'Select an Anchor', // MISSING | ||
50 | styles: 'Gaya', | ||
51 | tabIndex: 'Tab Index', // MISSING | ||
52 | target: 'Sasaran', | ||
53 | targetFrame: '<frame>', // MISSING | ||
54 | targetFrameName: 'Target Frame Name', // MISSING | ||
55 | targetPopup: '<popup window>', // MISSING | ||
56 | targetPopupName: 'Popup Window Name', // MISSING | ||
57 | title: 'Tautan', | ||
58 | toAnchor: 'Link to anchor in the text', // MISSING | ||
59 | toEmail: 'E-mail', // MISSING | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Tautan', | ||
62 | type: 'Link Type', // MISSING | ||
63 | unlink: 'Unlink', // MISSING | ||
64 | upload: 'Unggah' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/is.js b/sources/plugins/link/lang/is.js new file mode 100644 index 0000000..3abcded --- /dev/null +++ b/sources/plugins/link/lang/is.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'is', { | ||
6 | acccessKey: 'Skammvalshnappur', | ||
7 | advanced: 'Tæknilegt', | ||
8 | advisoryContentType: 'Tegund innihalds', | ||
9 | advisoryTitle: 'Titill', | ||
10 | anchor: { | ||
11 | toolbar: 'Stofna/breyta kaflamerki', | ||
12 | menu: 'Eigindi kaflamerkis', | ||
13 | title: 'Eigindi kaflamerkis', | ||
14 | name: 'Nafn bókamerkis', | ||
15 | errorName: 'Sláðu inn nafn bókamerkis!', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'Eftir auðkenni einingar', | ||
19 | anchorName: 'Eftir akkerisnafni', | ||
20 | charset: 'Táknróf', | ||
21 | cssClasses: 'Stílsniðsflokkur', | ||
22 | emailAddress: 'Netfang', | ||
23 | emailBody: 'Meginmál', | ||
24 | emailSubject: 'Efni', | ||
25 | id: 'Auðkenni', | ||
26 | info: 'Almennt', | ||
27 | langCode: 'Lesstefna', | ||
28 | langDir: 'Lesstefna', | ||
29 | langDirLTR: 'Frá vinstri til hægri (LTR)', | ||
30 | langDirRTL: 'Frá hægri til vinstri (RTL)', | ||
31 | menu: 'Breyta stiklu', | ||
32 | name: 'Nafn', | ||
33 | noAnchors: '<Engin bókamerki á skrá>', | ||
34 | noEmail: 'Sláðu inn netfang!', | ||
35 | noUrl: 'Sláðu inn veffang stiklunnar!', | ||
36 | other: '<annar>', | ||
37 | popupDependent: 'Háð venslum (Netscape)', | ||
38 | popupFeatures: 'Eigindi sprettiglugga', | ||
39 | popupFullScreen: 'Heilskjár (IE)', | ||
40 | popupLeft: 'Fjarlægð frá vinstri', | ||
41 | popupLocationBar: 'Fanglína', | ||
42 | popupMenuBar: 'Vallína', | ||
43 | popupResizable: 'Resizable', // MISSING | ||
44 | popupScrollBars: 'Skrunstikur', | ||
45 | popupStatusBar: 'Stöðustika', | ||
46 | popupToolbar: 'Verkfærastika', | ||
47 | popupTop: 'Fjarlægð frá efri brún', | ||
48 | rel: 'Relationship', // MISSING | ||
49 | selectAnchor: 'Veldu akkeri', | ||
50 | styles: 'Stíll', | ||
51 | tabIndex: 'Raðnúmer innsláttarreits', | ||
52 | target: 'Mark', | ||
53 | targetFrame: '<rammi>', | ||
54 | targetFrameName: 'Nafn markglugga', | ||
55 | targetPopup: '<sprettigluggi>', | ||
56 | targetPopupName: 'Nafn sprettiglugga', | ||
57 | title: 'Stikla', | ||
58 | toAnchor: 'Bókamerki á þessari síðu', | ||
59 | toEmail: 'Netfang', | ||
60 | toUrl: 'Vefslóð', | ||
61 | toolbar: 'Stofna/breyta stiklu', | ||
62 | type: 'Stikluflokkur', | ||
63 | unlink: 'Fjarlægja stiklu', | ||
64 | upload: 'Senda upp' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/it.js b/sources/plugins/link/lang/it.js new file mode 100644 index 0000000..8130e3b --- /dev/null +++ b/sources/plugins/link/lang/it.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'it', { | ||
6 | acccessKey: 'Scorciatoia da tastiera', | ||
7 | advanced: 'Avanzate', | ||
8 | advisoryContentType: 'Tipo della risorsa collegata', | ||
9 | advisoryTitle: 'Titolo', | ||
10 | anchor: { | ||
11 | toolbar: 'Inserisci/Modifica Ancora', | ||
12 | menu: 'Proprietà ancora', | ||
13 | title: 'Proprietà ancora', | ||
14 | name: 'Nome ancora', | ||
15 | errorName: 'Inserici il nome dell\'ancora', | ||
16 | remove: 'Rimuovi l\'ancora' | ||
17 | }, | ||
18 | anchorId: 'Per id elemento', | ||
19 | anchorName: 'Per Nome', | ||
20 | charset: 'Set di caretteri della risorsa collegata', | ||
21 | cssClasses: 'Nome classe CSS', | ||
22 | emailAddress: 'Indirizzo E-Mail', | ||
23 | emailBody: 'Corpo del messaggio', | ||
24 | emailSubject: 'Oggetto del messaggio', | ||
25 | id: 'Id', | ||
26 | info: 'Informazioni collegamento', | ||
27 | langCode: 'Direzione scrittura', | ||
28 | langDir: 'Direzione scrittura', | ||
29 | langDirLTR: 'Da Sinistra a Destra (LTR)', | ||
30 | langDirRTL: 'Da Destra a Sinistra (RTL)', | ||
31 | menu: 'Modifica collegamento', | ||
32 | name: 'Nome', | ||
33 | noAnchors: '(Nessuna ancora disponibile nel documento)', | ||
34 | noEmail: 'Devi inserire un\'indirizzo e-mail', | ||
35 | noUrl: 'Devi inserire l\'URL del collegamento', | ||
36 | other: '<altro>', | ||
37 | popupDependent: 'Dipendente (Netscape)', | ||
38 | popupFeatures: 'Caratteristiche finestra popup', | ||
39 | popupFullScreen: 'A tutto schermo (IE)', | ||
40 | popupLeft: 'Posizione da sinistra', | ||
41 | popupLocationBar: 'Barra degli indirizzi', | ||
42 | popupMenuBar: 'Barra del menu', | ||
43 | popupResizable: 'Ridimensionabile', | ||
44 | popupScrollBars: 'Barre di scorrimento', | ||
45 | popupStatusBar: 'Barra di stato', | ||
46 | popupToolbar: 'Barra degli strumenti', | ||
47 | popupTop: 'Posizione dall\'alto', | ||
48 | rel: 'Relazioni', | ||
49 | selectAnchor: 'Scegli Ancora', | ||
50 | styles: 'Stile', | ||
51 | tabIndex: 'Ordine di tabulazione', | ||
52 | target: 'Destinazione', | ||
53 | targetFrame: '<riquadro>', | ||
54 | targetFrameName: 'Nome del riquadro di destinazione', | ||
55 | targetPopup: '<finestra popup>', | ||
56 | targetPopupName: 'Nome finestra popup', | ||
57 | title: 'Collegamento', | ||
58 | toAnchor: 'Ancora nel testo', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Collegamento', | ||
62 | type: 'Tipo di Collegamento', | ||
63 | unlink: 'Elimina collegamento', | ||
64 | upload: 'Carica' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/ja.js b/sources/plugins/link/lang/ja.js new file mode 100644 index 0000000..dc0ca23 --- /dev/null +++ b/sources/plugins/link/lang/ja.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'ja', { | ||
6 | acccessKey: 'アクセスキー', | ||
7 | advanced: '高度な設定', | ||
8 | advisoryContentType: 'Content Type属性', | ||
9 | advisoryTitle: 'Title属性', | ||
10 | anchor: { | ||
11 | toolbar: 'アンカー挿入/編集', | ||
12 | menu: 'アンカーの編集', | ||
13 | title: 'アンカーのプロパティ', | ||
14 | name: 'アンカー名', | ||
15 | errorName: 'アンカー名を入力してください。', | ||
16 | remove: 'アンカーを削除' | ||
17 | }, | ||
18 | anchorId: 'エレメントID', | ||
19 | anchorName: 'アンカー名', | ||
20 | charset: 'リンク先のcharset', | ||
21 | cssClasses: 'スタイルシートクラス', | ||
22 | emailAddress: 'E-Mail アドレス', | ||
23 | emailBody: '本文', | ||
24 | emailSubject: '件名', | ||
25 | id: 'Id', | ||
26 | info: 'ハイパーリンク情報', | ||
27 | langCode: '言語コード', | ||
28 | langDir: '文字表記の方向', | ||
29 | langDirLTR: '左から右 (LTR)', | ||
30 | langDirRTL: '右から左 (RTL)', | ||
31 | menu: 'リンクを編集', | ||
32 | name: 'Name属性', | ||
33 | noAnchors: '(このドキュメント内にアンカーはありません)', | ||
34 | noEmail: 'メールアドレスを入力してください。', | ||
35 | noUrl: 'リンクURLを入力してください。', | ||
36 | other: '<その他の>', | ||
37 | popupDependent: '開いたウィンドウに連動して閉じる (Netscape)', | ||
38 | popupFeatures: 'ポップアップウィンドウ特徴', | ||
39 | popupFullScreen: '全画面モード(IE)', | ||
40 | popupLeft: '左端からの座標で指定', | ||
41 | popupLocationBar: 'ロケーションバー', | ||
42 | popupMenuBar: 'メニューバー', | ||
43 | popupResizable: 'サイズ可変', | ||
44 | popupScrollBars: 'スクロールバー', | ||
45 | popupStatusBar: 'ステータスバー', | ||
46 | popupToolbar: 'ツールバー', | ||
47 | popupTop: '上端からの座標で指定', | ||
48 | rel: '関連リンク', | ||
49 | selectAnchor: 'アンカーを選択', | ||
50 | styles: 'スタイルシート', | ||
51 | tabIndex: 'タブインデックス', | ||
52 | target: 'ターゲット', | ||
53 | targetFrame: '<フレーム>', | ||
54 | targetFrameName: 'ターゲットのフレーム名', | ||
55 | targetPopup: '<ポップアップウィンドウ>', | ||
56 | targetPopupName: 'ポップアップウィンドウ名', | ||
57 | title: 'ハイパーリンク', | ||
58 | toAnchor: 'ページ内のアンカー', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'リンク挿入/編集', | ||
62 | type: 'リンクタイプ', | ||
63 | unlink: 'リンクを削除', | ||
64 | upload: 'アップロード' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/ka.js b/sources/plugins/link/lang/ka.js new file mode 100644 index 0000000..c461a7f --- /dev/null +++ b/sources/plugins/link/lang/ka.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'ka', { | ||
6 | acccessKey: 'წვდომის ღილაკი', | ||
7 | advanced: 'დაწვრილებით', | ||
8 | advisoryContentType: 'შიგთავსის ტიპი', | ||
9 | advisoryTitle: 'სათაური', | ||
10 | anchor: { | ||
11 | toolbar: 'ღუზა', | ||
12 | menu: 'ღუზის რედაქტირება', | ||
13 | title: 'ღუზის პარამეტრები', | ||
14 | name: 'ღუზუს სახელი', | ||
15 | errorName: 'აკრიფეთ ღუზის სახელი', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'ელემენტის Id-თ', | ||
19 | anchorName: 'ღუზის სახელით', | ||
20 | charset: 'კოდირება', | ||
21 | cssClasses: 'CSS კლასი', | ||
22 | emailAddress: 'ელფოსტის მისამართები', | ||
23 | emailBody: 'წერილის ტექსტი', | ||
24 | emailSubject: 'წერილის სათაური', | ||
25 | id: 'Id', | ||
26 | info: 'ბმულის ინფორმაცია', | ||
27 | langCode: 'ენის კოდი', | ||
28 | langDir: 'ენის მიმართულება', | ||
29 | langDirLTR: 'მარცხნიდან მარჯვნივ (LTR)', | ||
30 | langDirRTL: 'მარჯვნიდან მარცხნივ (RTL)', | ||
31 | menu: 'ბმულის რედაქტირება', | ||
32 | name: 'სახელი', | ||
33 | noAnchors: '(ამ დოკუმენტში ღუზა არაა)', | ||
34 | noEmail: 'აკრიფეთ ელფოსტის მისამართი', | ||
35 | noUrl: 'აკრიფეთ ბმულის URL', | ||
36 | other: '<სხვა>', | ||
37 | popupDependent: 'დამოკიდებული (Netscape)', | ||
38 | popupFeatures: 'Popup ფანჯრის პარამეტრები', | ||
39 | popupFullScreen: 'მთელი ეკრანი (IE)', | ||
40 | popupLeft: 'მარცხენა პოზიცია', | ||
41 | popupLocationBar: 'ნავიგაციის ზოლი', | ||
42 | popupMenuBar: 'მენიუს ზოლი', | ||
43 | popupResizable: 'ცვალებადი ზომით', | ||
44 | popupScrollBars: 'გადახვევის ზოლები', | ||
45 | popupStatusBar: 'სტატუსის ზოლი', | ||
46 | popupToolbar: 'ხელსაწყოთა ზოლი', | ||
47 | popupTop: 'ზედა პოზიცია', | ||
48 | rel: 'კავშირი', | ||
49 | selectAnchor: 'აირჩიეთ ღუზა', | ||
50 | styles: 'CSS სტილი', | ||
51 | tabIndex: 'Tab-ის ინდექსი', | ||
52 | target: 'გახსნის ადგილი', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Frame-ის სახელი', | ||
55 | targetPopup: '<popup ფანჯარა>', | ||
56 | targetPopupName: 'Popup ფანჯრის სახელი', | ||
57 | title: 'ბმული', | ||
58 | toAnchor: 'ბმული ტექსტში ღუზაზე', | ||
59 | toEmail: 'ელფოსტა', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'ბმული', | ||
62 | type: 'ბმულის ტიპი', | ||
63 | unlink: 'ბმულის მოხსნა', | ||
64 | upload: 'აქაჩვა' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/km.js b/sources/plugins/link/lang/km.js new file mode 100644 index 0000000..d801953 --- /dev/null +++ b/sources/plugins/link/lang/km.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'km', { | ||
6 | acccessKey: 'សោរចូល', | ||
7 | advanced: 'កម្រិតខ្ពស់', | ||
8 | advisoryContentType: 'ប្រភេទអត្ថបទប្រឹក្សា', | ||
9 | advisoryTitle: 'ចំណងជើងប្រឹក្សា', | ||
10 | anchor: { | ||
11 | toolbar: 'យុថ្កា', | ||
12 | menu: 'កែយុថ្កា', | ||
13 | title: 'លក្ខណៈយុថ្កា', | ||
14 | name: 'ឈ្មោះយុថ្កា', | ||
15 | errorName: 'សូមបញ្ចូលឈ្មោះយុថ្កា', | ||
16 | remove: 'ដកយុថ្កាចេញ' | ||
17 | }, | ||
18 | anchorId: 'តាម ID ធាតុ', | ||
19 | anchorName: 'តាមឈ្មោះយុថ្កា', | ||
20 | charset: 'លេខកូតអក្សររបស់ឈ្នាប់', | ||
21 | cssClasses: 'Stylesheet Classes', | ||
22 | emailAddress: 'អាសយដ្ឋានអ៊ីមែល', | ||
23 | emailBody: 'តួអត្ថបទ', | ||
24 | emailSubject: 'ប្រធានបទសារ', | ||
25 | id: 'Id', | ||
26 | info: 'ព័ត៌មានពីតំណ', | ||
27 | langCode: 'កូដភាសា', | ||
28 | langDir: 'ទិសដៅភាសា', | ||
29 | langDirLTR: 'ពីឆ្វេងទៅស្តាំ(LTR)', | ||
30 | langDirRTL: 'ពីស្តាំទៅឆ្វេង(RTL)', | ||
31 | menu: 'កែតំណ', | ||
32 | name: 'ឈ្មោះ', | ||
33 | noAnchors: '(មិនមានយុថ្កានៅក្នុងឯកសារអត្ថថបទទេ)', | ||
34 | noEmail: 'សូមបញ្ចូលអាសយដ្ឋានអ៊ីមែល', | ||
35 | noUrl: 'សូមបញ្ចូលតំណ URL', | ||
36 | other: '<ផ្សេងទៀត>', | ||
37 | popupDependent: 'Dependent (Netscape)', | ||
38 | popupFeatures: 'មុខងារផុសផ្ទាំងវីនដូឡើង', | ||
39 | popupFullScreen: 'ពេញអេក្រង់ (IE)', | ||
40 | popupLeft: 'ទីតាំងខាងឆ្វេង', | ||
41 | popupLocationBar: 'របារទីតាំង', | ||
42 | popupMenuBar: 'របារម៉ឺនុយ', | ||
43 | popupResizable: 'អាចប្ដូរទំហំ', | ||
44 | popupScrollBars: 'របាររំកិល', | ||
45 | popupStatusBar: 'របារស្ថានភាព', | ||
46 | popupToolbar: 'របារឧបករណ៍', | ||
47 | popupTop: 'ទីតាំងកំពូល', | ||
48 | rel: 'សម្ពន្ធភាព', | ||
49 | selectAnchor: 'រើសយកយុថ្កាមួយ', | ||
50 | styles: 'ស្ទីល', | ||
51 | tabIndex: 'លេខ Tab', | ||
52 | target: 'គោលដៅ', | ||
53 | targetFrame: '<ស៊ុម>', | ||
54 | targetFrameName: 'ឈ្មោះស៊ុមជាគោលដៅ', | ||
55 | targetPopup: '<វីនដូផុសឡើង>', | ||
56 | targetPopupName: 'ឈ្មោះវីនដូតផុសឡើង', | ||
57 | title: 'តំណ', | ||
58 | toAnchor: 'តភ្ជាប់ទៅយុថ្កាក្នុងអត្ថបទ', | ||
59 | toEmail: 'អ៊ីមែល', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'តំណ', | ||
62 | type: 'ប្រភេទតំណ', | ||
63 | unlink: 'ផ្ដាច់តំណ', | ||
64 | upload: 'ផ្ទុកឡើង' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/ko.js b/sources/plugins/link/lang/ko.js new file mode 100644 index 0000000..2a83a41 --- /dev/null +++ b/sources/plugins/link/lang/ko.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'ko', { | ||
6 | acccessKey: '액세스 키', | ||
7 | advanced: '고급', | ||
8 | advisoryContentType: '보조 콘텐츠 유형', | ||
9 | advisoryTitle: '보조 제목', | ||
10 | anchor: { | ||
11 | toolbar: '책갈피', | ||
12 | menu: '책갈피 편집', | ||
13 | title: '책갈피 속성', | ||
14 | name: '책갈피 이름', | ||
15 | errorName: '책갈피 이름을 입력하십시오', | ||
16 | remove: '책갈피 제거' | ||
17 | }, | ||
18 | anchorId: '책갈피 ID', | ||
19 | anchorName: '책갈피 이름', | ||
20 | charset: '링크된 자료 문자열 인코딩', | ||
21 | cssClasses: '스타일시트 클래스', | ||
22 | emailAddress: '이메일 주소', | ||
23 | emailBody: '메시지 내용', | ||
24 | emailSubject: '메시지 제목', | ||
25 | id: 'ID', | ||
26 | info: '링크 정보', | ||
27 | langCode: '언어 코드', | ||
28 | langDir: '언어 방향', | ||
29 | langDirLTR: '왼쪽에서 오른쪽 (LTR)', | ||
30 | langDirRTL: '오른쪽에서 왼쪽 (RTL)', | ||
31 | menu: '링크 수정', | ||
32 | name: '이름', | ||
33 | noAnchors: '(문서에 책갈피가 없습니다.)', | ||
34 | noEmail: '이메일 주소를 입력하십시오', | ||
35 | noUrl: '링크 주소(URL)를 입력하십시오', | ||
36 | other: '<기타>', | ||
37 | popupDependent: 'Dependent (Netscape)', | ||
38 | popupFeatures: '팝업창 속성', | ||
39 | popupFullScreen: '전체화면 (IE)', | ||
40 | popupLeft: '왼쪽 위치', | ||
41 | popupLocationBar: '주소 표시줄', | ||
42 | popupMenuBar: '메뉴 바', | ||
43 | popupResizable: '크기 조절 가능', | ||
44 | popupScrollBars: '스크롤 바', | ||
45 | popupStatusBar: '상태 바', | ||
46 | popupToolbar: '툴바', | ||
47 | popupTop: '위쪽 위치', | ||
48 | rel: '관계', | ||
49 | selectAnchor: '책갈피 선택', | ||
50 | styles: '스타일', | ||
51 | tabIndex: '탭 순서', | ||
52 | target: '타겟', | ||
53 | targetFrame: '<프레임>', | ||
54 | targetFrameName: '타겟 프레임 이름', | ||
55 | targetPopup: '<팝업 창>', | ||
56 | targetPopupName: '팝업 창 이름', | ||
57 | title: '링크', | ||
58 | toAnchor: '책갈피', | ||
59 | toEmail: '이메일', | ||
60 | toUrl: '주소(URL)', | ||
61 | toolbar: '링크 삽입/변경', | ||
62 | type: '링크 종류', | ||
63 | unlink: '링크 지우기', | ||
64 | upload: '업로드' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/ku.js b/sources/plugins/link/lang/ku.js new file mode 100644 index 0000000..dbcad9f --- /dev/null +++ b/sources/plugins/link/lang/ku.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'ku', { | ||
6 | acccessKey: 'کلیلی دەستپێگەیشتن', | ||
7 | advanced: 'پێشکەوتوو', | ||
8 | advisoryContentType: 'جۆری ناوەڕۆکی ڕاویژکار', | ||
9 | advisoryTitle: 'ڕاوێژکاری سەردێڕ', | ||
10 | anchor: { | ||
11 | toolbar: 'دانان/چاکسازی لەنگەر', | ||
12 | menu: 'چاکسازی لەنگەر', | ||
13 | title: 'خاسیەتی لەنگەر', | ||
14 | name: 'ناوی لەنگەر', | ||
15 | errorName: 'تکایه ناوی لەنگەر بنووسه', | ||
16 | remove: 'لابردنی لەنگەر' | ||
17 | }, | ||
18 | anchorId: 'بەپێی ناسنامەی توخم', | ||
19 | anchorName: 'بەپێی ناوی لەنگەر', | ||
20 | charset: 'بەستەری سەرچاوەی نووسە', | ||
21 | cssClasses: 'شێوازی چینی پەڕه', | ||
22 | emailAddress: 'ناونیشانی ئیمەیل', | ||
23 | emailBody: 'ناوەڕۆکی نامە', | ||
24 | emailSubject: 'بابەتی نامە', | ||
25 | id: 'ناسنامە', | ||
26 | info: 'زانیاری بەستەر', | ||
27 | langCode: 'هێمای زمان', | ||
28 | langDir: 'ئاراستەی زمان', | ||
29 | langDirLTR: 'چەپ بۆ ڕاست (LTR)', | ||
30 | langDirRTL: 'ڕاست بۆ چەپ (RTL)', | ||
31 | menu: 'چاکسازی بەستەر', | ||
32 | name: 'ناو', | ||
33 | noAnchors: '(هیچ جۆرێکی لەنگەر ئامادە نیە لەم پەڕەیه)', | ||
34 | noEmail: 'تکایە ناونیشانی ئیمەیل بنووسە', | ||
35 | noUrl: 'تکایە ناونیشانی بەستەر بنووسە', | ||
36 | other: '<هیتر>', | ||
37 | popupDependent: 'پێوەبەستراو (Netscape)', | ||
38 | popupFeatures: 'خاسیەتی پەنجەرەی سەرهەڵدەر', | ||
39 | popupFullScreen: 'پڕ بەپڕی شاشە (IE)', | ||
40 | popupLeft: 'جێگای چەپ', | ||
41 | popupLocationBar: 'هێڵی ناونیشانی بەستەر', | ||
42 | popupMenuBar: 'هێڵی لیسته', | ||
43 | popupResizable: 'توانای گۆڕینی قەباره', | ||
44 | popupScrollBars: 'هێڵی هاتووچۆپێکردن', | ||
45 | popupStatusBar: 'هێڵی دۆخ', | ||
46 | popupToolbar: 'هێڵی تووڵامراز', | ||
47 | popupTop: 'جێگای سەرەوە', | ||
48 | rel: 'پەیوەندی', | ||
49 | selectAnchor: 'هەڵبژاردنی لەنگەرێك', | ||
50 | styles: 'شێواز', | ||
51 | tabIndex: 'بازدەری تابی ئیندێکس', | ||
52 | target: 'ئامانج', | ||
53 | targetFrame: '<چووارچێوە>', | ||
54 | targetFrameName: 'ناوی ئامانجی چووارچێوە', | ||
55 | targetPopup: '<پەنجەرەی سەرهەڵدەر>', | ||
56 | targetPopupName: 'ناوی پەنجەرەی سەرهەڵدەر', | ||
57 | title: 'بەستەر', | ||
58 | toAnchor: 'بەستەر بۆ لەنگەر له دەق', | ||
59 | toEmail: 'ئیمەیل', | ||
60 | toUrl: 'ناونیشانی بەستەر', | ||
61 | toolbar: 'دانان/ڕێکخستنی بەستەر', | ||
62 | type: 'جۆری بەستەر', | ||
63 | unlink: 'لابردنی بەستەر', | ||
64 | upload: 'بارکردن' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/lt.js b/sources/plugins/link/lang/lt.js new file mode 100644 index 0000000..db2ed72 --- /dev/null +++ b/sources/plugins/link/lang/lt.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'lt', { | ||
6 | acccessKey: 'Prieigos raktas', | ||
7 | advanced: 'Papildomas', | ||
8 | advisoryContentType: 'Konsultacinio turinio tipas', | ||
9 | advisoryTitle: 'Konsultacinė antraštė', | ||
10 | anchor: { | ||
11 | toolbar: 'Įterpti/modifikuoti žymę', | ||
12 | menu: 'Žymės savybės', | ||
13 | title: 'Žymės savybės', | ||
14 | name: 'Žymės vardas', | ||
15 | errorName: 'Prašome įvesti žymės vardą', | ||
16 | remove: 'Pašalinti žymę' | ||
17 | }, | ||
18 | anchorId: 'Pagal žymės Id', | ||
19 | anchorName: 'Pagal žymės vardą', | ||
20 | charset: 'Susietų išteklių simbolių lentelė', | ||
21 | cssClasses: 'Stilių lentelės klasės', | ||
22 | emailAddress: 'El.pašto adresas', | ||
23 | emailBody: 'Žinutės turinys', | ||
24 | emailSubject: 'Žinutės tema', | ||
25 | id: 'Id', | ||
26 | info: 'Nuorodos informacija', | ||
27 | langCode: 'Teksto kryptis', | ||
28 | langDir: 'Teksto kryptis', | ||
29 | langDirLTR: 'Iš kairės į dešinę (LTR)', | ||
30 | langDirRTL: 'Iš dešinės į kairę (RTL)', | ||
31 | menu: 'Taisyti nuorodą', | ||
32 | name: 'Vardas', | ||
33 | noAnchors: '(Šiame dokumente žymių nėra)', | ||
34 | noEmail: 'Prašome įvesti el.pašto adresą', | ||
35 | noUrl: 'Prašome įvesti nuorodos URL', | ||
36 | other: '<kitas>', | ||
37 | popupDependent: 'Priklausomas (Netscape)', | ||
38 | popupFeatures: 'Išskleidžiamo lango savybės', | ||
39 | popupFullScreen: 'Visas ekranas (IE)', | ||
40 | popupLeft: 'Kairė pozicija', | ||
41 | popupLocationBar: 'Adreso juosta', | ||
42 | popupMenuBar: 'Meniu juosta', | ||
43 | popupResizable: 'Kintamas dydis', | ||
44 | popupScrollBars: 'Slinkties juostos', | ||
45 | popupStatusBar: 'Būsenos juosta', | ||
46 | popupToolbar: 'Mygtukų juosta', | ||
47 | popupTop: 'Viršutinė pozicija', | ||
48 | rel: 'Sąsajos', | ||
49 | selectAnchor: 'Pasirinkite žymę', | ||
50 | styles: 'Stilius', | ||
51 | tabIndex: 'Tabuliavimo indeksas', | ||
52 | target: 'Paskirties vieta', | ||
53 | targetFrame: '<kadras>', | ||
54 | targetFrameName: 'Paskirties kadro vardas', | ||
55 | targetPopup: '<išskleidžiamas langas>', | ||
56 | targetPopupName: 'Paskirties lango vardas', | ||
57 | title: 'Nuoroda', | ||
58 | toAnchor: 'Žymė šiame puslapyje', | ||
59 | toEmail: 'El.paštas', | ||
60 | toUrl: 'Nuoroda', | ||
61 | toolbar: 'Įterpti/taisyti nuorodą', | ||
62 | type: 'Nuorodos tipas', | ||
63 | unlink: 'Panaikinti nuorodą', | ||
64 | upload: 'Siųsti' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/lv.js b/sources/plugins/link/lang/lv.js new file mode 100644 index 0000000..8e3c649 --- /dev/null +++ b/sources/plugins/link/lang/lv.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'lv', { | ||
6 | acccessKey: 'Pieejas taustiņš', | ||
7 | advanced: 'Izvērstais', | ||
8 | advisoryContentType: 'Konsultatīvs satura tips', | ||
9 | advisoryTitle: 'Konsultatīvs virsraksts', | ||
10 | anchor: { | ||
11 | toolbar: 'Ievietot/Labot iezīmi', | ||
12 | menu: 'Labot iezīmi', | ||
13 | title: 'Iezīmes uzstādījumi', | ||
14 | name: 'Iezīmes nosaukums', | ||
15 | errorName: 'Lūdzu norādiet iezīmes nosaukumu', | ||
16 | remove: 'Noņemt iezīmi' | ||
17 | }, | ||
18 | anchorId: 'Pēc elementa ID', | ||
19 | anchorName: 'Pēc iezīmes nosaukuma', | ||
20 | charset: 'Pievienotā resursa kodējums', | ||
21 | cssClasses: 'Stilu saraksta klases', | ||
22 | emailAddress: 'E-pasta adrese', | ||
23 | emailBody: 'Ziņas saturs', | ||
24 | emailSubject: 'Ziņas tēma', | ||
25 | id: 'ID', | ||
26 | info: 'Hipersaites informācija', | ||
27 | langCode: 'Valodas kods', | ||
28 | langDir: 'Valodas lasīšanas virziens', | ||
29 | langDirLTR: 'No kreisās uz labo (LTR)', | ||
30 | langDirRTL: 'No labās uz kreiso (RTL)', | ||
31 | menu: 'Labot hipersaiti', | ||
32 | name: 'Nosaukums', | ||
33 | noAnchors: '(Šajā dokumentā nav iezīmju)', | ||
34 | noEmail: 'Lūdzu norādi e-pasta adresi', | ||
35 | noUrl: 'Lūdzu norādi hipersaiti', | ||
36 | other: '<cits>', | ||
37 | popupDependent: 'Atkarīgs (Netscape)', | ||
38 | popupFeatures: 'Uznirstošā loga nosaukums īpašības', | ||
39 | popupFullScreen: 'Pilnā ekrānā (IE)', | ||
40 | popupLeft: 'Kreisā koordināte', | ||
41 | popupLocationBar: 'Atrašanās vietas josla', | ||
42 | popupMenuBar: 'Izvēlnes josla', | ||
43 | popupResizable: 'Mērogojams', | ||
44 | popupScrollBars: 'Ritjoslas', | ||
45 | popupStatusBar: 'Statusa josla', | ||
46 | popupToolbar: 'Rīku josla', | ||
47 | popupTop: 'Augšējā koordināte', | ||
48 | rel: 'Relācija', | ||
49 | selectAnchor: 'Izvēlēties iezīmi', | ||
50 | styles: 'Stils', | ||
51 | tabIndex: 'Ciļņu indekss', | ||
52 | target: 'Mērķis', | ||
53 | targetFrame: '<ietvars>', | ||
54 | targetFrameName: 'Mērķa ietvara nosaukums', | ||
55 | targetPopup: '<uznirstošā logā>', | ||
56 | targetPopupName: 'Uznirstošā loga nosaukums', | ||
57 | title: 'Hipersaite', | ||
58 | toAnchor: 'Iezīme šajā lapā', | ||
59 | toEmail: 'E-pasts', | ||
60 | toUrl: 'Adrese', | ||
61 | toolbar: 'Ievietot/Labot hipersaiti', | ||
62 | type: 'Hipersaites tips', | ||
63 | unlink: 'Noņemt hipersaiti', | ||
64 | upload: 'Augšupielādēt' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/mk.js b/sources/plugins/link/lang/mk.js new file mode 100644 index 0000000..502f29c --- /dev/null +++ b/sources/plugins/link/lang/mk.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'mk', { | ||
6 | acccessKey: 'Access Key', // MISSING | ||
7 | advanced: 'Advanced', // MISSING | ||
8 | advisoryContentType: 'Advisory Content Type', // MISSING | ||
9 | advisoryTitle: 'Advisory Title', // MISSING | ||
10 | anchor: { | ||
11 | toolbar: 'Anchor', | ||
12 | menu: 'Edit Anchor', | ||
13 | title: 'Anchor Properties', | ||
14 | name: 'Anchor Name', | ||
15 | errorName: 'Please type the anchor name', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'By Element Id', // MISSING | ||
19 | anchorName: 'By Anchor Name', // MISSING | ||
20 | charset: 'Linked Resource Charset', // MISSING | ||
21 | cssClasses: 'Stylesheet Classes', // MISSING | ||
22 | emailAddress: 'E-Mail Address', // MISSING | ||
23 | emailBody: 'Message Body', // MISSING | ||
24 | emailSubject: 'Message Subject', // MISSING | ||
25 | id: 'Id', | ||
26 | info: 'Link Info', // MISSING | ||
27 | langCode: 'Код на јазик', | ||
28 | langDir: 'Насока на јазик', | ||
29 | langDirLTR: 'Лево кон десно', | ||
30 | langDirRTL: 'Десно кон лево', | ||
31 | menu: 'Edit Link', // MISSING | ||
32 | name: 'Name', | ||
33 | noAnchors: '(No anchors available in the document)', // MISSING | ||
34 | noEmail: 'Please type the e-mail address', // MISSING | ||
35 | noUrl: 'Please type the link URL', // MISSING | ||
36 | other: '<other>', // MISSING | ||
37 | popupDependent: 'Dependent (Netscape)', // MISSING | ||
38 | popupFeatures: 'Popup Window Features', // MISSING | ||
39 | popupFullScreen: 'Full Screen (IE)', // MISSING | ||
40 | popupLeft: 'Left Position', // MISSING | ||
41 | popupLocationBar: 'Location Bar', // MISSING | ||
42 | popupMenuBar: 'Menu Bar', // MISSING | ||
43 | popupResizable: 'Resizable', // MISSING | ||
44 | popupScrollBars: 'Scroll Bars', // MISSING | ||
45 | popupStatusBar: 'Status Bar', // MISSING | ||
46 | popupToolbar: 'Toolbar', // MISSING | ||
47 | popupTop: 'Top Position', // MISSING | ||
48 | rel: 'Relationship', // MISSING | ||
49 | selectAnchor: 'Select an Anchor', // MISSING | ||
50 | styles: 'Стил', | ||
51 | tabIndex: 'Tab Index', // MISSING | ||
52 | target: 'Target', // MISSING | ||
53 | targetFrame: '<frame>', // MISSING | ||
54 | targetFrameName: 'Target Frame Name', // MISSING | ||
55 | targetPopup: '<popup window>', // MISSING | ||
56 | targetPopupName: 'Popup Window Name', // MISSING | ||
57 | title: 'Врска', | ||
58 | toAnchor: 'Link to anchor in the text', // MISSING | ||
59 | toEmail: 'E-mail', // MISSING | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Врска', | ||
62 | type: 'Link Type', // MISSING | ||
63 | unlink: 'Unlink', // MISSING | ||
64 | upload: 'Прикачи' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/mn.js b/sources/plugins/link/lang/mn.js new file mode 100644 index 0000000..8935a8f --- /dev/null +++ b/sources/plugins/link/lang/mn.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'mn', { | ||
6 | acccessKey: 'Холбох түлхүүр', | ||
7 | advanced: 'Нэмэлт', | ||
8 | advisoryContentType: 'Зөвлөлдөх төрлийн агуулга', | ||
9 | advisoryTitle: 'Зөвлөлдөх гарчиг', | ||
10 | anchor: { | ||
11 | toolbar: 'Зангуу', | ||
12 | menu: 'Зангууг болосруулах', | ||
13 | title: 'Зангуугийн шинж чанар', | ||
14 | name: 'Зангуугийн нэр', | ||
15 | errorName: 'Зангуугийн нэрийг оруулна уу', | ||
16 | remove: 'Зангууг устгах' | ||
17 | }, | ||
18 | anchorId: 'Элемэнтйн Id нэрээр', | ||
19 | anchorName: 'Зангуугийн нэрээр', | ||
20 | charset: 'Тэмдэгт оноох нөөцөд холбогдсон', | ||
21 | cssClasses: 'Stylesheet классууд', | ||
22 | emailAddress: 'Э-шуудангийн хаяг', | ||
23 | emailBody: 'Зурвасны их бие', | ||
24 | emailSubject: 'Зурвасны гарчиг', | ||
25 | id: 'Id', | ||
26 | info: 'Холбоосын тухай мэдээлэл', | ||
27 | langCode: 'Хэлний код', | ||
28 | langDir: 'Хэлний чиглэл', | ||
29 | langDirLTR: 'Зүүнээс баруун (LTR)', | ||
30 | langDirRTL: 'Баруунаас зүүн (RTL)', | ||
31 | menu: 'Холбоос засварлах', | ||
32 | name: 'Нэр', | ||
33 | noAnchors: '(Баримт бичиг зангуугүй байна)', | ||
34 | noEmail: 'Э-шуудангий хаягаа шивнэ үү', | ||
35 | noUrl: 'Холбоосны URL хаягийг шивнэ үү', | ||
36 | other: '<other>', // MISSING | ||
37 | popupDependent: 'Хамаатай (Netscape)', | ||
38 | popupFeatures: 'Popup цонхны онцлог', | ||
39 | popupFullScreen: 'Цонх дүүргэх (Internet Explorer)', | ||
40 | popupLeft: 'Зүүн байрлал', | ||
41 | popupLocationBar: 'Location хэсэг', | ||
42 | popupMenuBar: 'Цэсний самбар', | ||
43 | popupResizable: 'Resizable', // MISSING | ||
44 | popupScrollBars: 'Скрол хэсэгүүд', | ||
45 | popupStatusBar: 'Статус хэсэг', | ||
46 | popupToolbar: 'Багажны самбар', | ||
47 | popupTop: 'Дээд байрлал', | ||
48 | rel: 'Relationship', // MISSING | ||
49 | selectAnchor: 'Нэг зангууг сонгоно уу', | ||
50 | styles: 'Загвар', | ||
51 | tabIndex: 'Tab индекс', | ||
52 | target: 'Байрлал', | ||
53 | targetFrame: '<Агуулах хүрээ>', | ||
54 | targetFrameName: 'Очих фремын нэр', | ||
55 | targetPopup: '<popup цонх>', | ||
56 | targetPopupName: 'Popup цонхны нэр', | ||
57 | title: 'Холбоос', | ||
58 | toAnchor: 'Энэ бичвэр дэх зангуу руу очих холбоос', | ||
59 | toEmail: 'Э-захиа', | ||
60 | toUrl: 'цахим хуудасны хаяг (URL)', | ||
61 | toolbar: 'Холбоос', | ||
62 | type: 'Линкийн төрөл', | ||
63 | unlink: 'Холбоос авч хаях', | ||
64 | upload: 'Хуулах' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/ms.js b/sources/plugins/link/lang/ms.js new file mode 100644 index 0000000..b244ba6 --- /dev/null +++ b/sources/plugins/link/lang/ms.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'ms', { | ||
6 | acccessKey: 'Kunci Akses', | ||
7 | advanced: 'Advanced', | ||
8 | advisoryContentType: 'Jenis Kandungan Makluman', | ||
9 | advisoryTitle: 'Tajuk Makluman', | ||
10 | anchor: { | ||
11 | toolbar: 'Masukkan/Sunting Pautan', | ||
12 | menu: 'Ciri-ciri Pautan', | ||
13 | title: 'Ciri-ciri Pautan', | ||
14 | name: 'Nama Pautan', | ||
15 | errorName: 'Sila taip nama pautan', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'dengan menggunakan ID elemen', | ||
19 | anchorName: 'dengan menggunakan nama pautan', | ||
20 | charset: 'Linked Resource Charset', | ||
21 | cssClasses: 'Kelas-kelas Stylesheet', | ||
22 | emailAddress: 'Alamat E-Mail', | ||
23 | emailBody: 'Isi Kandungan Mesej', | ||
24 | emailSubject: 'Subjek Mesej', | ||
25 | id: 'Id', | ||
26 | info: 'Butiran Sambungan', | ||
27 | langCode: 'Arah Tulisan', | ||
28 | langDir: 'Arah Tulisan', | ||
29 | langDirLTR: 'Kiri ke Kanan (LTR)', | ||
30 | langDirRTL: 'Kanan ke Kiri (RTL)', | ||
31 | menu: 'Sunting Sambungan', | ||
32 | name: 'Nama', | ||
33 | noAnchors: '(Tiada pautan terdapat dalam dokumen ini)', | ||
34 | noEmail: 'Sila taip alamat e-mail', | ||
35 | noUrl: 'Sila taip sambungan URL', | ||
36 | other: '<lain>', | ||
37 | popupDependent: 'Bergantungan (Netscape)', | ||
38 | popupFeatures: 'Ciri Tetingkap Popup', | ||
39 | popupFullScreen: 'Skrin Penuh (IE)', | ||
40 | popupLeft: 'Posisi Kiri', | ||
41 | popupLocationBar: 'Bar Lokasi', | ||
42 | popupMenuBar: 'Bar Menu', | ||
43 | popupResizable: 'Resizable', // MISSING | ||
44 | popupScrollBars: 'Bar-bar skrol', | ||
45 | popupStatusBar: 'Bar Status', | ||
46 | popupToolbar: 'Toolbar', | ||
47 | popupTop: 'Posisi Atas', | ||
48 | rel: 'Relationship', // MISSING | ||
49 | selectAnchor: 'Sila pilih pautan', | ||
50 | styles: 'Stail', | ||
51 | tabIndex: 'Indeks Tab ', | ||
52 | target: 'Sasaran', | ||
53 | targetFrame: '<bingkai>', | ||
54 | targetFrameName: 'Nama Bingkai Sasaran', | ||
55 | targetPopup: '<tetingkap popup>', | ||
56 | targetPopupName: 'Nama Tetingkap Popup', | ||
57 | title: 'Sambungan', | ||
58 | toAnchor: 'Pautan dalam muka surat ini', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Masukkan/Sunting Sambungan', | ||
62 | type: 'Jenis Sambungan', | ||
63 | unlink: 'Buang Sambungan', | ||
64 | upload: 'Muat Naik' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/nb.js b/sources/plugins/link/lang/nb.js new file mode 100644 index 0000000..d9cedf7 --- /dev/null +++ b/sources/plugins/link/lang/nb.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'nb', { | ||
6 | acccessKey: 'Aksessknapp', | ||
7 | advanced: 'Avansert', | ||
8 | advisoryContentType: 'Type', | ||
9 | advisoryTitle: 'Tittel', | ||
10 | anchor: { | ||
11 | toolbar: 'Sett inn/Rediger anker', | ||
12 | menu: 'Egenskaper for anker', | ||
13 | title: 'Egenskaper for anker', | ||
14 | name: 'Ankernavn', | ||
15 | errorName: 'Vennligst skriv inn ankernavnet', | ||
16 | remove: 'Fjern anker' | ||
17 | }, | ||
18 | anchorId: 'Element etter ID', | ||
19 | anchorName: 'Anker etter navn', | ||
20 | charset: 'Lenket tegnsett', | ||
21 | cssClasses: 'Stilarkklasser', | ||
22 | emailAddress: 'E-postadresse', | ||
23 | emailBody: 'Melding', | ||
24 | emailSubject: 'Meldingsemne', | ||
25 | id: 'Id', | ||
26 | info: 'Lenkeinfo', | ||
27 | langCode: 'Språkkode', | ||
28 | langDir: 'Språkretning', | ||
29 | langDirLTR: 'Venstre til høyre (VTH)', | ||
30 | langDirRTL: 'Høyre til venstre (HTV)', | ||
31 | menu: 'Rediger lenke', | ||
32 | name: 'Navn', | ||
33 | noAnchors: '(Ingen anker i dokumentet)', | ||
34 | noEmail: 'Vennligst skriv inn e-postadressen', | ||
35 | noUrl: 'Vennligst skriv inn lenkens URL', | ||
36 | other: '<annen>', | ||
37 | popupDependent: 'Avhenging (Netscape)', | ||
38 | popupFeatures: 'Egenskaper for popup-vindu', | ||
39 | popupFullScreen: 'Fullskjerm (IE)', | ||
40 | popupLeft: 'Venstre posisjon', | ||
41 | popupLocationBar: 'Adresselinje', | ||
42 | popupMenuBar: 'Menylinje', | ||
43 | popupResizable: 'Skalerbar', | ||
44 | popupScrollBars: 'Scrollbar', | ||
45 | popupStatusBar: 'Statuslinje', | ||
46 | popupToolbar: 'Verktøylinje', | ||
47 | popupTop: 'Topp-posisjon', | ||
48 | rel: 'Relasjon (rel)', | ||
49 | selectAnchor: 'Velg et anker', | ||
50 | styles: 'Stil', | ||
51 | tabIndex: 'Tabindeks', | ||
52 | target: 'Mål', | ||
53 | targetFrame: '<ramme>', | ||
54 | targetFrameName: 'Målramme', | ||
55 | targetPopup: '<popup-vindu>', | ||
56 | targetPopupName: 'Navn på popup-vindu', | ||
57 | title: 'Lenke', | ||
58 | toAnchor: 'Lenke til anker i teksten', | ||
59 | toEmail: 'E-post', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Sett inn/Rediger lenke', | ||
62 | type: 'Lenketype', | ||
63 | unlink: 'Fjern lenke', | ||
64 | upload: 'Last opp' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/nl.js b/sources/plugins/link/lang/nl.js new file mode 100644 index 0000000..1c6036b --- /dev/null +++ b/sources/plugins/link/lang/nl.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'nl', { | ||
6 | acccessKey: 'Toegangstoets', | ||
7 | advanced: 'Geavanceerd', | ||
8 | advisoryContentType: 'Aanbevolen content-type', | ||
9 | advisoryTitle: 'Adviserende titel', | ||
10 | anchor: { | ||
11 | toolbar: 'Interne link', | ||
12 | menu: 'Eigenschappen interne link', | ||
13 | title: 'Eigenschappen interne link', | ||
14 | name: 'Naam interne link', | ||
15 | errorName: 'Geef de naam van de interne link op', | ||
16 | remove: 'Interne link verwijderen' | ||
17 | }, | ||
18 | anchorId: 'Op kenmerk interne link', | ||
19 | anchorName: 'Op naam interne link', | ||
20 | charset: 'Karakterset van gelinkte bron', | ||
21 | cssClasses: 'Stylesheet-klassen', | ||
22 | emailAddress: 'E-mailadres', | ||
23 | emailBody: 'Inhoud bericht', | ||
24 | emailSubject: 'Onderwerp bericht', | ||
25 | id: 'Id', | ||
26 | info: 'Linkomschrijving', | ||
27 | langCode: 'Taalcode', | ||
28 | langDir: 'Schrijfrichting', | ||
29 | langDirLTR: 'Links naar rechts (LTR)', | ||
30 | langDirRTL: 'Rechts naar links (RTL)', | ||
31 | menu: 'Link wijzigen', | ||
32 | name: 'Naam', | ||
33 | noAnchors: '(Geen interne links in document gevonden)', | ||
34 | noEmail: 'Geef een e-mailadres', | ||
35 | noUrl: 'Geef de link van de URL', | ||
36 | other: '<ander>', | ||
37 | popupDependent: 'Afhankelijk (Netscape)', | ||
38 | popupFeatures: 'Instellingen popupvenster', | ||
39 | popupFullScreen: 'Volledig scherm (IE)', | ||
40 | popupLeft: 'Positie links', | ||
41 | popupLocationBar: 'Locatiemenu', | ||
42 | popupMenuBar: 'Menubalk', | ||
43 | popupResizable: 'Herschaalbaar', | ||
44 | popupScrollBars: 'Schuifbalken', | ||
45 | popupStatusBar: 'Statusbalk', | ||
46 | popupToolbar: 'Werkbalk', | ||
47 | popupTop: 'Positie boven', | ||
48 | rel: 'Relatie', | ||
49 | selectAnchor: 'Kies een interne link', | ||
50 | styles: 'Stijl', | ||
51 | tabIndex: 'Tabvolgorde', | ||
52 | target: 'Doelvenster', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Naam doelframe', | ||
55 | targetPopup: '<popupvenster>', | ||
56 | targetPopupName: 'Naam popupvenster', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Interne link in pagina', | ||
59 | toEmail: 'E-mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Link invoegen/wijzigen', | ||
62 | type: 'Linktype', | ||
63 | unlink: 'Link verwijderen', | ||
64 | upload: 'Upload' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/no.js b/sources/plugins/link/lang/no.js new file mode 100644 index 0000000..0a4ef05 --- /dev/null +++ b/sources/plugins/link/lang/no.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'no', { | ||
6 | acccessKey: 'Aksessknapp', | ||
7 | advanced: 'Avansert', | ||
8 | advisoryContentType: 'Type', | ||
9 | advisoryTitle: 'Tittel', | ||
10 | anchor: { | ||
11 | toolbar: 'Sett inn/Rediger anker', | ||
12 | menu: 'Egenskaper for anker', | ||
13 | title: 'Egenskaper for anker', | ||
14 | name: 'Ankernavn', | ||
15 | errorName: 'Vennligst skriv inn ankernavnet', | ||
16 | remove: 'Fjern anker' | ||
17 | }, | ||
18 | anchorId: 'Element etter ID', | ||
19 | anchorName: 'Anker etter navn', | ||
20 | charset: 'Lenket tegnsett', | ||
21 | cssClasses: 'Stilarkklasser', | ||
22 | emailAddress: 'E-postadresse', | ||
23 | emailBody: 'Melding', | ||
24 | emailSubject: 'Meldingsemne', | ||
25 | id: 'Id', | ||
26 | info: 'Lenkeinfo', | ||
27 | langCode: 'Språkkode', | ||
28 | langDir: 'Språkretning', | ||
29 | langDirLTR: 'Venstre til høyre (VTH)', | ||
30 | langDirRTL: 'Høyre til venstre (HTV)', | ||
31 | menu: 'Rediger lenke', | ||
32 | name: 'Navn', | ||
33 | noAnchors: '(Ingen anker i dokumentet)', | ||
34 | noEmail: 'Vennligst skriv inn e-postadressen', | ||
35 | noUrl: 'Vennligst skriv inn lenkens URL', | ||
36 | other: '<annen>', | ||
37 | popupDependent: 'Avhenging (Netscape)', | ||
38 | popupFeatures: 'Egenskaper for popup-vindu', | ||
39 | popupFullScreen: 'Fullskjerm (IE)', | ||
40 | popupLeft: 'Venstre posisjon', | ||
41 | popupLocationBar: 'Adresselinje', | ||
42 | popupMenuBar: 'Menylinje', | ||
43 | popupResizable: 'Skalerbar', | ||
44 | popupScrollBars: 'Scrollbar', | ||
45 | popupStatusBar: 'Statuslinje', | ||
46 | popupToolbar: 'Verktøylinje', | ||
47 | popupTop: 'Topp-posisjon', | ||
48 | rel: 'Relasjon (rel)', | ||
49 | selectAnchor: 'Velg et anker', | ||
50 | styles: 'Stil', | ||
51 | tabIndex: 'Tabindeks', | ||
52 | target: 'Mål', | ||
53 | targetFrame: '<ramme>', | ||
54 | targetFrameName: 'Målramme', | ||
55 | targetPopup: '<popup-vindu>', | ||
56 | targetPopupName: 'Navn på popup-vindu', | ||
57 | title: 'Lenke', | ||
58 | toAnchor: 'Lenke til anker i teksten', | ||
59 | toEmail: 'E-post', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Sett inn/Rediger lenke', | ||
62 | type: 'Lenketype', | ||
63 | unlink: 'Fjern lenke', | ||
64 | upload: 'Last opp' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/pl.js b/sources/plugins/link/lang/pl.js new file mode 100644 index 0000000..f37f856 --- /dev/null +++ b/sources/plugins/link/lang/pl.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'pl', { | ||
6 | acccessKey: 'Klawisz dostępu', | ||
7 | advanced: 'Zaawansowane', | ||
8 | advisoryContentType: 'Typ MIME obiektu docelowego', | ||
9 | advisoryTitle: 'Opis obiektu docelowego', | ||
10 | anchor: { | ||
11 | toolbar: 'Wstaw/edytuj kotwicę', | ||
12 | menu: 'Właściwości kotwicy', | ||
13 | title: 'Właściwości kotwicy', | ||
14 | name: 'Nazwa kotwicy', | ||
15 | errorName: 'Wpisz nazwę kotwicy', | ||
16 | remove: 'Usuń kotwicę' | ||
17 | }, | ||
18 | anchorId: 'Wg identyfikatora', | ||
19 | anchorName: 'Wg nazwy', | ||
20 | charset: 'Kodowanie znaków obiektu docelowego', | ||
21 | cssClasses: 'Nazwa klasy CSS', | ||
22 | emailAddress: 'Adres e-mail', | ||
23 | emailBody: 'Treść', | ||
24 | emailSubject: 'Temat', | ||
25 | id: 'Id', | ||
26 | info: 'Informacje ', | ||
27 | langCode: 'Kod języka', | ||
28 | langDir: 'Kierunek tekstu', | ||
29 | langDirLTR: 'Od lewej do prawej (LTR)', | ||
30 | langDirRTL: 'Od prawej do lewej (RTL)', | ||
31 | menu: 'Edytuj odnośnik', | ||
32 | name: 'Nazwa', | ||
33 | noAnchors: '(W dokumencie nie zdefiniowano żadnych kotwic)', | ||
34 | noEmail: 'Podaj adres e-mail', | ||
35 | noUrl: 'Podaj adres URL', | ||
36 | other: '<inny>', | ||
37 | popupDependent: 'Okno zależne (Netscape)', | ||
38 | popupFeatures: 'Właściwości wyskakującego okna', | ||
39 | popupFullScreen: 'Pełny ekran (IE)', | ||
40 | popupLeft: 'Pozycja w poziomie', | ||
41 | popupLocationBar: 'Pasek adresu', | ||
42 | popupMenuBar: 'Pasek menu', | ||
43 | popupResizable: 'Skalowalny', | ||
44 | popupScrollBars: 'Paski przewijania', | ||
45 | popupStatusBar: 'Pasek statusu', | ||
46 | popupToolbar: 'Pasek narzędzi', | ||
47 | popupTop: 'Pozycja w pionie', | ||
48 | rel: 'Relacja', | ||
49 | selectAnchor: 'Wybierz kotwicę', | ||
50 | styles: 'Styl', | ||
51 | tabIndex: 'Indeks kolejności', | ||
52 | target: 'Obiekt docelowy', | ||
53 | targetFrame: '<ramka>', | ||
54 | targetFrameName: 'Nazwa ramki docelowej', | ||
55 | targetPopup: '<wyskakujące okno>', | ||
56 | targetPopupName: 'Nazwa wyskakującego okna', | ||
57 | title: 'Odnośnik', | ||
58 | toAnchor: 'Odnośnik wewnątrz strony (kotwica)', | ||
59 | toEmail: 'Adres e-mail', | ||
60 | toUrl: 'Adres URL', | ||
61 | toolbar: 'Wstaw/edytuj odnośnik', | ||
62 | type: 'Typ odnośnika', | ||
63 | unlink: 'Usuń odnośnik', | ||
64 | upload: 'Wyślij' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/pt-br.js b/sources/plugins/link/lang/pt-br.js new file mode 100644 index 0000000..04136f7 --- /dev/null +++ b/sources/plugins/link/lang/pt-br.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'pt-br', { | ||
6 | acccessKey: 'Chave de Acesso', | ||
7 | advanced: 'Avançado', | ||
8 | advisoryContentType: 'Tipo de Conteúdo', | ||
9 | advisoryTitle: 'Título', | ||
10 | anchor: { | ||
11 | toolbar: 'Inserir/Editar Âncora', | ||
12 | menu: 'Formatar Âncora', | ||
13 | title: 'Formatar Âncora', | ||
14 | name: 'Nome da Âncora', | ||
15 | errorName: 'Por favor, digite o nome da âncora', | ||
16 | remove: 'Remover Âncora' | ||
17 | }, | ||
18 | anchorId: 'Id da âncora', | ||
19 | anchorName: 'Nome da âncora', | ||
20 | charset: 'Charset do Link', | ||
21 | cssClasses: 'Classe de CSS', | ||
22 | emailAddress: 'Endereço E-Mail', | ||
23 | emailBody: 'Corpo da Mensagem', | ||
24 | emailSubject: 'Assunto da Mensagem', | ||
25 | id: 'Id', | ||
26 | info: 'Informações', | ||
27 | langCode: 'Direção do idioma', | ||
28 | langDir: 'Direção do idioma', | ||
29 | langDirLTR: 'Esquerda para Direita (LTR)', | ||
30 | langDirRTL: 'Direita para Esquerda (RTL)', | ||
31 | menu: 'Editar Link', | ||
32 | name: 'Nome', | ||
33 | noAnchors: '(Não há âncoras no documento)', | ||
34 | noEmail: 'Por favor, digite o endereço de e-mail', | ||
35 | noUrl: 'Por favor, digite o endereço do Link', | ||
36 | other: '<outro>', | ||
37 | popupDependent: 'Dependente (Netscape)', | ||
38 | popupFeatures: 'Propriedades da Janela Pop-up', | ||
39 | popupFullScreen: 'Modo Tela Cheia (IE)', | ||
40 | popupLeft: 'Esquerda', | ||
41 | popupLocationBar: 'Barra de Endereços', | ||
42 | popupMenuBar: 'Barra de Menus', | ||
43 | popupResizable: 'Redimensionável', | ||
44 | popupScrollBars: 'Barras de Rolagem', | ||
45 | popupStatusBar: 'Barra de Status', | ||
46 | popupToolbar: 'Barra de Ferramentas', | ||
47 | popupTop: 'Topo', | ||
48 | rel: 'Tipo de Relação', | ||
49 | selectAnchor: 'Selecione uma âncora', | ||
50 | styles: 'Estilos', | ||
51 | tabIndex: 'Índice de Tabulação', | ||
52 | target: 'Destino', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Nome do Frame de Destino', | ||
55 | targetPopup: '<janela popup>', | ||
56 | targetPopupName: 'Nome da Janela Pop-up', | ||
57 | title: 'Editar Link', | ||
58 | toAnchor: 'Âncora nesta página', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Inserir/Editar Link', | ||
62 | type: 'Tipo de hiperlink', | ||
63 | unlink: 'Remover Link', | ||
64 | upload: 'Enviar ao Servidor' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/pt.js b/sources/plugins/link/lang/pt.js new file mode 100644 index 0000000..cd31734 --- /dev/null +++ b/sources/plugins/link/lang/pt.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'pt', { | ||
6 | acccessKey: 'Chave de Acesso', | ||
7 | advanced: 'Avançado', | ||
8 | advisoryContentType: 'Tipo de Conteúdo', | ||
9 | advisoryTitle: 'Título', | ||
10 | anchor: { | ||
11 | toolbar: ' Inserir/Editar Âncora', | ||
12 | menu: 'Propriedades da Âncora', | ||
13 | title: 'Propriedades da Âncora', | ||
14 | name: 'Nome da Âncora', | ||
15 | errorName: 'Por favor, introduza o nome da âncora', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'Por ID de elemento', | ||
19 | anchorName: 'Por Nome de Referência', | ||
20 | charset: 'Fonte de caracteres vinculado', | ||
21 | cssClasses: 'Classes de Estilo de Folhas Classes', | ||
22 | emailAddress: 'Endereço de E-Mail', | ||
23 | emailBody: 'Corpo da Mensagem', | ||
24 | emailSubject: 'Título de Mensagem', | ||
25 | id: 'ID', | ||
26 | info: 'Informação de Hiperligação', | ||
27 | langCode: 'Orientação de idioma', | ||
28 | langDir: 'Orientação de idioma', | ||
29 | langDirLTR: 'Esquerda à Direita (LTR)', | ||
30 | langDirRTL: 'Direita a Esquerda (RTL)', | ||
31 | menu: 'Editar Hiperligação', | ||
32 | name: 'Nome', | ||
33 | noAnchors: '(Não há referências disponíveis no documento)', | ||
34 | noEmail: 'Por favor introduza o endereço de e-mail', | ||
35 | noUrl: 'Por favor introduza a hiperligação URL', | ||
36 | other: '<outro>', | ||
37 | popupDependent: 'Dependente (Netscape)', | ||
38 | popupFeatures: 'Características de Janela de Popup', | ||
39 | popupFullScreen: 'Janela Completa (IE)', | ||
40 | popupLeft: 'Posição Esquerda', | ||
41 | popupLocationBar: 'Barra de localização', | ||
42 | popupMenuBar: 'Barra de Menu', | ||
43 | popupResizable: 'Redimensionável', | ||
44 | popupScrollBars: 'Barras de deslocamento', | ||
45 | popupStatusBar: 'Barra de Estado', | ||
46 | popupToolbar: 'Barra de ferramentas', | ||
47 | popupTop: 'Posição Direita', | ||
48 | rel: 'Relação', | ||
49 | selectAnchor: 'Seleccionar una referência', | ||
50 | styles: 'Estilo', | ||
51 | tabIndex: 'Índice de tabulação', | ||
52 | target: 'Alvo', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Nome do Frame Destino', | ||
55 | targetPopup: '<janela de popup>', | ||
56 | targetPopupName: 'Nome da Janela de Popup', | ||
57 | title: 'Hiperligação', | ||
58 | toAnchor: 'Referência a esta página', | ||
59 | toEmail: 'Email', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Inserir/Editar Hiperligação', | ||
62 | type: 'Tipo de Hiperligação', | ||
63 | unlink: 'Eliminar Hiperligação', | ||
64 | upload: 'Carregar' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/ro.js b/sources/plugins/link/lang/ro.js new file mode 100644 index 0000000..b561e57 --- /dev/null +++ b/sources/plugins/link/lang/ro.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'ro', { | ||
6 | acccessKey: 'Tasta de acces', | ||
7 | advanced: 'Avansat', | ||
8 | advisoryContentType: 'Tipul consultativ al titlului', | ||
9 | advisoryTitle: 'Titlul consultativ', | ||
10 | anchor: { | ||
11 | toolbar: 'Inserează/Editează ancoră', | ||
12 | menu: 'Proprietăţi ancoră', | ||
13 | title: 'Proprietăţi ancoră', | ||
14 | name: 'Numele ancorei', | ||
15 | errorName: 'Vă rugăm scrieţi numele ancorei', | ||
16 | remove: 'Elimină ancora' | ||
17 | }, | ||
18 | anchorId: 'după Id-ul elementului', | ||
19 | anchorName: 'după numele ancorei', | ||
20 | charset: 'Setul de caractere al resursei legate', | ||
21 | cssClasses: 'Clasele cu stilul paginii (CSS)', | ||
22 | emailAddress: 'Adresă de e-mail', | ||
23 | emailBody: 'Opțiuni Meniu Contextual', | ||
24 | emailSubject: 'Subiectul mesajului', | ||
25 | id: 'Id', | ||
26 | info: 'Informaţii despre link (Legătură web)', | ||
27 | langCode: 'Direcţia cuvintelor', | ||
28 | langDir: 'Direcţia cuvintelor', | ||
29 | langDirLTR: 'stânga-dreapta (LTR)', | ||
30 | langDirRTL: 'dreapta-stânga (RTL)', | ||
31 | menu: 'Editează Link', | ||
32 | name: 'Nume', | ||
33 | noAnchors: '(Nicio ancoră disponibilă în document)', | ||
34 | noEmail: 'Vă rugăm să scrieţi adresa de e-mail', | ||
35 | noUrl: 'Vă rugăm să scrieţi URL-ul', | ||
36 | other: '<alt>', | ||
37 | popupDependent: 'Dependent (Netscape)', | ||
38 | popupFeatures: 'Proprietăţile ferestrei popup', | ||
39 | popupFullScreen: 'Tot ecranul (Full Screen)(IE)', | ||
40 | popupLeft: 'Poziţia la stânga', | ||
41 | popupLocationBar: 'Bara de locaţie', | ||
42 | popupMenuBar: 'Bara de meniu', | ||
43 | popupResizable: 'Redimensionabil', | ||
44 | popupScrollBars: 'Bare de derulare', | ||
45 | popupStatusBar: 'Bara de status', | ||
46 | popupToolbar: 'Bara de opţiuni', | ||
47 | popupTop: 'Poziţia la dreapta', | ||
48 | rel: 'Relație', | ||
49 | selectAnchor: 'Selectaţi o ancoră', | ||
50 | styles: 'Stil', | ||
51 | tabIndex: 'Indexul tabului', | ||
52 | target: 'Ţintă (Target)', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Numele frameului ţintă', | ||
55 | targetPopup: '<fereastra popup>', | ||
56 | targetPopupName: 'Numele ferestrei popup', | ||
57 | title: 'Link (Legătură web)', | ||
58 | toAnchor: 'Ancoră în această pagină', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Inserează/Editează link (legătură web)', | ||
62 | type: 'Tipul link-ului (al legăturii web)', | ||
63 | unlink: 'Înlătură link (legătură web)', | ||
64 | upload: 'Încarcă' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/ru.js b/sources/plugins/link/lang/ru.js new file mode 100644 index 0000000..5cb6575 --- /dev/null +++ b/sources/plugins/link/lang/ru.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'ru', { | ||
6 | acccessKey: 'Клавиша доступа', | ||
7 | advanced: 'Дополнительно', | ||
8 | advisoryContentType: 'Тип содержимого', | ||
9 | advisoryTitle: 'Заголовок', | ||
10 | anchor: { | ||
11 | toolbar: 'Вставить / редактировать якорь', | ||
12 | menu: 'Изменить якорь', | ||
13 | title: 'Свойства якоря', | ||
14 | name: 'Имя якоря', | ||
15 | errorName: 'Пожалуйста, введите имя якоря', | ||
16 | remove: 'Удалить якорь' | ||
17 | }, | ||
18 | anchorId: 'По идентификатору', | ||
19 | anchorName: 'По имени', | ||
20 | charset: 'Кодировка ресурса', | ||
21 | cssClasses: 'Классы CSS', | ||
22 | emailAddress: 'Email адрес', | ||
23 | emailBody: 'Текст сообщения', | ||
24 | emailSubject: 'Тема сообщения', | ||
25 | id: 'Идентификатор', | ||
26 | info: 'Информация о ссылке', | ||
27 | langCode: 'Код языка', | ||
28 | langDir: 'Направление текста', | ||
29 | langDirLTR: 'Слева направо (LTR)', | ||
30 | langDirRTL: 'Справа налево (RTL)', | ||
31 | menu: 'Редактировать ссылку', | ||
32 | name: 'Имя', | ||
33 | noAnchors: '(В документе нет ни одного якоря)', | ||
34 | noEmail: 'Пожалуйста, введите email адрес', | ||
35 | noUrl: 'Пожалуйста, введите ссылку', | ||
36 | other: '<другой>', | ||
37 | popupDependent: 'Зависимое (Netscape)', | ||
38 | popupFeatures: 'Параметры всплывающего окна', | ||
39 | popupFullScreen: 'Полноэкранное (IE)', | ||
40 | popupLeft: 'Отступ слева', | ||
41 | popupLocationBar: 'Панель адреса', | ||
42 | popupMenuBar: 'Панель меню', | ||
43 | popupResizable: 'Изменяемый размер', | ||
44 | popupScrollBars: 'Полосы прокрутки', | ||
45 | popupStatusBar: 'Строка состояния', | ||
46 | popupToolbar: 'Панель инструментов', | ||
47 | popupTop: 'Отступ сверху', | ||
48 | rel: 'Отношение', | ||
49 | selectAnchor: 'Выберите якорь', | ||
50 | styles: 'Стиль', | ||
51 | tabIndex: 'Последовательность перехода', | ||
52 | target: 'Цель', | ||
53 | targetFrame: '<фрейм>', | ||
54 | targetFrameName: 'Имя целевого фрейма', | ||
55 | targetPopup: '<всплывающее окно>', | ||
56 | targetPopupName: 'Имя всплывающего окна', | ||
57 | title: 'Ссылка', | ||
58 | toAnchor: 'Ссылка на якорь в тексте', | ||
59 | toEmail: 'Email', | ||
60 | toUrl: 'Ссылка', | ||
61 | toolbar: 'Вставить/Редактировать ссылку', | ||
62 | type: 'Тип ссылки', | ||
63 | unlink: 'Убрать ссылку', | ||
64 | upload: 'Загрузка' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/si.js b/sources/plugins/link/lang/si.js new file mode 100644 index 0000000..b8b4696 --- /dev/null +++ b/sources/plugins/link/lang/si.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'si', { | ||
6 | acccessKey: 'ප්රවේශ යතුර', | ||
7 | advanced: 'දීය', | ||
8 | advisoryContentType: 'උපදේශාත්මක අන්තර්ගත ආකාරය', | ||
9 | advisoryTitle: 'උපදේශාත්මක නාමය', | ||
10 | anchor: { | ||
11 | toolbar: 'ආධාරය', | ||
12 | menu: 'ආධාරය වෙනස් කිරීම', | ||
13 | title: 'ආධාරක ', | ||
14 | name: 'ආධාරකයේ නාමය', | ||
15 | errorName: 'කරුණාකර ආධාරකයේ නාමය ඇතුල් කරන්න', | ||
16 | remove: 'ආධාරකය ඉවත් කිරීම' | ||
17 | }, | ||
18 | anchorId: 'By Element Id', // MISSING | ||
19 | anchorName: 'By Anchor Name', // MISSING | ||
20 | charset: 'Linked Resource Charset', // MISSING | ||
21 | cssClasses: 'විලාසපත්ර පන්තිය', | ||
22 | emailAddress: 'E-Mail Address', // MISSING | ||
23 | emailBody: 'Message Body', // MISSING | ||
24 | emailSubject: 'Message Subject', // MISSING | ||
25 | id: 'අංකය', | ||
26 | info: 'Link Info', // MISSING | ||
27 | langCode: 'භාෂා කේතය', | ||
28 | langDir: 'භාෂා දිශාව', | ||
29 | langDirLTR: 'වමේසිට දකුණුට', | ||
30 | langDirRTL: 'දකුණේ සිට වමට', | ||
31 | menu: 'Edit Link', // MISSING | ||
32 | name: 'නම', | ||
33 | noAnchors: '(No anchors available in the document)', // MISSING | ||
34 | noEmail: 'Please type the e-mail address', // MISSING | ||
35 | noUrl: 'Please type the link URL', // MISSING | ||
36 | other: '<other>', // MISSING | ||
37 | popupDependent: 'Dependent (Netscape)', // MISSING | ||
38 | popupFeatures: 'Popup Window Features', // MISSING | ||
39 | popupFullScreen: 'Full Screen (IE)', // MISSING | ||
40 | popupLeft: 'Left Position', // MISSING | ||
41 | popupLocationBar: 'Location Bar', // MISSING | ||
42 | popupMenuBar: 'Menu Bar', // MISSING | ||
43 | popupResizable: 'Resizable', // MISSING | ||
44 | popupScrollBars: 'Scroll Bars', // MISSING | ||
45 | popupStatusBar: 'Status Bar', // MISSING | ||
46 | popupToolbar: 'Toolbar', // MISSING | ||
47 | popupTop: 'Top Position', // MISSING | ||
48 | rel: 'Relationship', // MISSING | ||
49 | selectAnchor: 'Select an Anchor', // MISSING | ||
50 | styles: 'විලාසය', | ||
51 | tabIndex: 'Tab Index', // MISSING | ||
52 | target: 'අරමුණ', | ||
53 | targetFrame: '<frame>', // MISSING | ||
54 | targetFrameName: 'Target Frame Name', // MISSING | ||
55 | targetPopup: '<popup window>', // MISSING | ||
56 | targetPopupName: 'Popup Window Name', // MISSING | ||
57 | title: 'සබැඳිය', | ||
58 | toAnchor: 'Link to anchor in the text', // MISSING | ||
59 | toEmail: 'E-mail', // MISSING | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'සබැඳිය', | ||
62 | type: 'Link Type', // MISSING | ||
63 | unlink: 'Unlink', // MISSING | ||
64 | upload: 'උඩුගතකිරීම' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/sk.js b/sources/plugins/link/lang/sk.js new file mode 100644 index 0000000..d0186f3 --- /dev/null +++ b/sources/plugins/link/lang/sk.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'sk', { | ||
6 | acccessKey: 'Prístupový kľúč', | ||
7 | advanced: 'Rozšírené', | ||
8 | advisoryContentType: 'Pomocný typ obsahu', | ||
9 | advisoryTitle: 'Pomocný titulok', | ||
10 | anchor: { | ||
11 | toolbar: 'Kotva', | ||
12 | menu: 'Upraviť kotvu', | ||
13 | title: 'Vlastnosti kotvy', | ||
14 | name: 'Názov kotvy', | ||
15 | errorName: 'Zadajte prosím názov kotvy', | ||
16 | remove: 'Odstrániť kotvu' | ||
17 | }, | ||
18 | anchorId: 'Podľa Id objektu', | ||
19 | anchorName: 'Podľa mena kotvy', | ||
20 | charset: 'Priradená znaková sada', | ||
21 | cssClasses: 'Triedy štýlu', | ||
22 | emailAddress: 'E-Mailová adresa', | ||
23 | emailBody: 'Telo správy', | ||
24 | emailSubject: 'Predmet správy', | ||
25 | id: 'Id', | ||
26 | info: 'Informácie o odkaze', | ||
27 | langCode: 'Orientácia jazyka', | ||
28 | langDir: 'Orientácia jazyka', | ||
29 | langDirLTR: 'Zľava doprava (LTR)', | ||
30 | langDirRTL: 'Sprava doľava (RTL)', | ||
31 | menu: 'Upraviť odkaz', | ||
32 | name: 'Názov', | ||
33 | noAnchors: '(V dokumente nie sú dostupné žiadne kotvy)', | ||
34 | noEmail: 'Zadajte prosím e-mailovú adresu', | ||
35 | noUrl: 'Zadajte prosím URL odkazu', | ||
36 | other: '<iný>', | ||
37 | popupDependent: 'Závislosť (Netscape)', | ||
38 | popupFeatures: 'Vlastnosti vyskakovacieho okna', | ||
39 | popupFullScreen: 'Celá obrazovka (IE)', | ||
40 | popupLeft: 'Ľavý okraj', | ||
41 | popupLocationBar: 'Panel umiestnenia (location bar)', | ||
42 | popupMenuBar: 'Panel ponuky (menu bar)', | ||
43 | popupResizable: 'Meniteľná veľkosť (resizable)', | ||
44 | popupScrollBars: 'Posuvníky (scroll bars)', | ||
45 | popupStatusBar: 'Stavový riadok (status bar)', | ||
46 | popupToolbar: 'Panel nástrojov (toolbar)', | ||
47 | popupTop: 'Horný okraj', | ||
48 | rel: 'Vzťah (rel)', | ||
49 | selectAnchor: 'Vybrať kotvu', | ||
50 | styles: 'Štýl', | ||
51 | tabIndex: 'Poradie prvku (tab index)', | ||
52 | target: 'Cieľ', | ||
53 | targetFrame: '<rámec>', | ||
54 | targetFrameName: 'Názov rámu cieľa', | ||
55 | targetPopup: '<vyskakovacie okno>', | ||
56 | targetPopupName: 'Názov vyskakovacieho okna', | ||
57 | title: 'Odkaz', | ||
58 | toAnchor: 'Odkaz na kotvu v texte', | ||
59 | toEmail: 'E-mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Odkaz', | ||
62 | type: 'Typ odkazu', | ||
63 | unlink: 'Odstrániť odkaz', | ||
64 | upload: 'Nahrať' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/sl.js b/sources/plugins/link/lang/sl.js new file mode 100644 index 0000000..392d7fe --- /dev/null +++ b/sources/plugins/link/lang/sl.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'sl', { | ||
6 | acccessKey: 'Dostopno Geslo', | ||
7 | advanced: 'Napredno', | ||
8 | advisoryContentType: 'Predlagani tip vsebine (content-type)', | ||
9 | advisoryTitle: 'Predlagani naslov', | ||
10 | anchor: { | ||
11 | toolbar: 'Vstavi/uredi zaznamek', | ||
12 | menu: 'Lastnosti zaznamka', | ||
13 | title: 'Lastnosti zaznamka', | ||
14 | name: 'Ime zaznamka', | ||
15 | errorName: 'Prosim vnesite ime zaznamka', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'Po ID-ju elementa', | ||
19 | anchorName: 'Po imenu zaznamka', | ||
20 | charset: 'Kodna tabela povezanega vira', | ||
21 | cssClasses: 'Razred stilne predloge', | ||
22 | emailAddress: 'Elektronski naslov', | ||
23 | emailBody: 'Vsebina sporočila', | ||
24 | emailSubject: 'Predmet sporočila', | ||
25 | id: 'Id', | ||
26 | info: 'Podatki o povezavi', | ||
27 | langCode: 'Smer jezika', | ||
28 | langDir: 'Smer jezika', | ||
29 | langDirLTR: 'Od leve proti desni (LTR)', | ||
30 | langDirRTL: 'Od desne proti levi (RTL)', | ||
31 | menu: 'Uredi povezavo', | ||
32 | name: 'Ime', | ||
33 | noAnchors: '(V tem dokumentu ni zaznamkov)', | ||
34 | noEmail: 'Vnesite elektronski naslov', | ||
35 | noUrl: 'Vnesite URL povezave', | ||
36 | other: '<drug>', | ||
37 | popupDependent: 'Podokno (Netscape)', | ||
38 | popupFeatures: 'Značilnosti pojavnega okna', | ||
39 | popupFullScreen: 'Celozaslonska slika (IE)', | ||
40 | popupLeft: 'Lega levo', | ||
41 | popupLocationBar: 'Naslovna vrstica', | ||
42 | popupMenuBar: 'Menijska vrstica', | ||
43 | popupResizable: 'Spremenljive velikosti', | ||
44 | popupScrollBars: 'Drsniki', | ||
45 | popupStatusBar: 'Vrstica stanja', | ||
46 | popupToolbar: 'Orodna vrstica', | ||
47 | popupTop: 'Lega na vrhu', | ||
48 | rel: 'Odnos', | ||
49 | selectAnchor: 'Izberi zaznamek', | ||
50 | styles: 'Slog', | ||
51 | tabIndex: 'Številka tabulatorja', | ||
52 | target: 'Cilj', | ||
53 | targetFrame: '<okvir>', | ||
54 | targetFrameName: 'Ime ciljnega okvirja', | ||
55 | targetPopup: '<pojavno okno>', | ||
56 | targetPopupName: 'Ime pojavnega okna', | ||
57 | title: 'Povezava', | ||
58 | toAnchor: 'Zaznamek na tej strani', | ||
59 | toEmail: 'Elektronski naslov', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Vstavi/uredi povezavo', | ||
62 | type: 'Vrsta povezave', | ||
63 | unlink: 'Odstrani povezavo', | ||
64 | upload: 'Prenesi' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/sq.js b/sources/plugins/link/lang/sq.js new file mode 100644 index 0000000..33692f1 --- /dev/null +++ b/sources/plugins/link/lang/sq.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'sq', { | ||
6 | acccessKey: 'Sipas ID-së së Elementit', | ||
7 | advanced: 'Të përparuara', | ||
8 | advisoryContentType: 'Lloji i Përmbajtjes Këshillimore', | ||
9 | advisoryTitle: 'Titull', | ||
10 | anchor: { | ||
11 | toolbar: 'Spirancë', | ||
12 | menu: 'Redakto Spirancën', | ||
13 | title: 'Anchor Properties', // MISSING | ||
14 | name: 'Emri i Spirancës', | ||
15 | errorName: 'Ju lutemi shkruani emrin e spirancës', | ||
16 | remove: 'Largo Spirancën' | ||
17 | }, | ||
18 | anchorId: 'Sipas ID-së së Elementit', | ||
19 | anchorName: 'Sipas Emrit të Spirancës', | ||
20 | charset: 'Seti i Karaktereve të Burimeve të Nëdlidhura', | ||
21 | cssClasses: 'Klasa stili CSS', | ||
22 | emailAddress: 'Posta Elektronike', | ||
23 | emailBody: 'Trupi i Porosisë', | ||
24 | emailSubject: 'Titulli i Porosisë', | ||
25 | id: 'Id', | ||
26 | info: 'Informacione të Nyjes', | ||
27 | langCode: 'Kod gjuhe', | ||
28 | langDir: 'Drejtim teksti', | ||
29 | langDirLTR: 'Nga e majta në të djathë (LTR)', | ||
30 | langDirRTL: 'Nga e djathta në të majtë (RTL)', | ||
31 | menu: 'Redakto Nyjen', | ||
32 | name: 'Emër', | ||
33 | noAnchors: '(Nuk ka asnjë spirancë në dokument)', | ||
34 | noEmail: 'Ju lutemi shkruani postën elektronike', | ||
35 | noUrl: 'Ju lutemi shkruani URL-në e nyjes', | ||
36 | other: '<tjetër>', | ||
37 | popupDependent: 'E Varur (Netscape)', | ||
38 | popupFeatures: 'Karakteristikat e Dritares së Dialogut', | ||
39 | popupFullScreen: 'Ekran i Plotë (IE)', | ||
40 | popupLeft: 'Pozita Majtas', | ||
41 | popupLocationBar: 'Shiriti i Lokacionit', | ||
42 | popupMenuBar: 'Shiriti i Menysë', | ||
43 | popupResizable: 'I ndryshueshëm', | ||
44 | popupScrollBars: 'Shiritat zvarritës', | ||
45 | popupStatusBar: 'Shiriti i Statutit', | ||
46 | popupToolbar: 'Shiriti i Mejteve', | ||
47 | popupTop: 'Top Pozita', | ||
48 | rel: 'Marrëdhëniet', | ||
49 | selectAnchor: 'Përzgjidh një Spirancë', | ||
50 | styles: 'Stil', | ||
51 | tabIndex: 'Indeksi i fletave', | ||
52 | target: 'Objektivi', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Emri i Kornizës së Synuar', | ||
55 | targetPopup: '<popup window>', | ||
56 | targetPopupName: 'Emri i Dritares së Dialogut', | ||
57 | title: 'Nyja', | ||
58 | toAnchor: 'Lidhu me spirancën në tekst', | ||
59 | toEmail: 'Posta Elektronike', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Nyja', | ||
62 | type: 'Lloji i Nyjes', | ||
63 | unlink: 'Largo Nyjen', | ||
64 | upload: 'Ngarko' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/sr-latn.js b/sources/plugins/link/lang/sr-latn.js new file mode 100644 index 0000000..592f05a --- /dev/null +++ b/sources/plugins/link/lang/sr-latn.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'sr-latn', { | ||
6 | acccessKey: 'Pristupni taster', | ||
7 | advanced: 'Napredni tagovi', | ||
8 | advisoryContentType: 'Advisory vrsta sadržaja', | ||
9 | advisoryTitle: 'Advisory naslov', | ||
10 | anchor: { | ||
11 | toolbar: 'Unesi/izmeni sidro', | ||
12 | menu: 'Osobine sidra', | ||
13 | title: 'Osobine sidra', | ||
14 | name: 'Naziv sidra', | ||
15 | errorName: 'Unesite naziv sidra', | ||
16 | remove: 'Ukloni sidro' | ||
17 | }, | ||
18 | anchorId: 'Po Id-u elementa', | ||
19 | anchorName: 'Po nazivu sidra', | ||
20 | charset: 'Linked Resource Charset', | ||
21 | cssClasses: 'Stylesheet klase', | ||
22 | emailAddress: 'E-Mail adresa', | ||
23 | emailBody: 'Sadržaj poruke', | ||
24 | emailSubject: 'Naslov', | ||
25 | id: 'Id', | ||
26 | info: 'Link Info', | ||
27 | langCode: 'Smer jezika', | ||
28 | langDir: 'Smer jezika', | ||
29 | langDirLTR: 'S leva na desno (LTR)', | ||
30 | langDirRTL: 'S desna na levo (RTL)', | ||
31 | menu: 'Izmeni link', | ||
32 | name: 'Naziv', | ||
33 | noAnchors: '(Nema dostupnih sidra)', | ||
34 | noEmail: 'Otkucajte adresu elektronske pote', | ||
35 | noUrl: 'Unesite URL linka', | ||
36 | other: '<остало>', | ||
37 | popupDependent: 'Zavisno (Netscape)', | ||
38 | popupFeatures: 'Mogućnosti popup prozora', | ||
39 | popupFullScreen: 'Prikaz preko celog ekrana (IE)', | ||
40 | popupLeft: 'Od leve ivice ekrana (px)', | ||
41 | popupLocationBar: 'Lokacija', | ||
42 | popupMenuBar: 'Kontekstni meni', | ||
43 | popupResizable: 'Promenljive veličine', | ||
44 | popupScrollBars: 'Scroll bar', | ||
45 | popupStatusBar: 'Statusna linija', | ||
46 | popupToolbar: 'Toolbar', | ||
47 | popupTop: 'Od vrha ekrana (px)', | ||
48 | rel: 'Odnos', | ||
49 | selectAnchor: 'Odaberi sidro', | ||
50 | styles: 'Stil', | ||
51 | tabIndex: 'Tab indeks', | ||
52 | target: 'Meta', | ||
53 | targetFrame: '<okvir>', | ||
54 | targetFrameName: 'Naziv odredišnog frejma', | ||
55 | targetPopup: '<popup prozor>', | ||
56 | targetPopupName: 'Naziv popup prozora', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Sidro na ovoj stranici', | ||
59 | toEmail: 'E-Mail', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Unesi/izmeni link', | ||
62 | type: 'Vrsta linka', | ||
63 | unlink: 'Ukloni link', | ||
64 | upload: 'Pošalji' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/sr.js b/sources/plugins/link/lang/sr.js new file mode 100644 index 0000000..6d5055b --- /dev/null +++ b/sources/plugins/link/lang/sr.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'sr', { | ||
6 | acccessKey: 'Приступни тастер', | ||
7 | advanced: 'Напредни тагови', | ||
8 | advisoryContentType: 'Advisory врста садржаја', | ||
9 | advisoryTitle: 'Advisory наслов', | ||
10 | anchor: { | ||
11 | toolbar: 'Унеси/измени сидро', | ||
12 | menu: 'Особине сидра', | ||
13 | title: 'Особине сидра', | ||
14 | name: 'Име сидра', | ||
15 | errorName: 'Молимо Вас да унесете име сидра', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'Пo Ид-jу елемента', | ||
19 | anchorName: 'По називу сидра', | ||
20 | charset: 'Linked Resource Charset', | ||
21 | cssClasses: 'Stylesheet класе', | ||
22 | emailAddress: 'Адреса електронске поште', | ||
23 | emailBody: 'Садржај поруке', | ||
24 | emailSubject: 'Наслов', | ||
25 | id: 'Ид', | ||
26 | info: 'Линк инфо', | ||
27 | langCode: 'Смер језика', | ||
28 | langDir: 'Смер језика', | ||
29 | langDirLTR: 'С лева на десно (LTR)', | ||
30 | langDirRTL: 'С десна на лево (RTL)', | ||
31 | menu: 'Промени линк', | ||
32 | name: 'Назив', | ||
33 | noAnchors: '(Нема доступних сидра)', | ||
34 | noEmail: 'Откуцајте адресу електронске поште', | ||
35 | noUrl: 'Унесите УРЛ линка', | ||
36 | other: '<друго>', | ||
37 | popupDependent: 'Зависно (Netscape)', | ||
38 | popupFeatures: 'Могућности искачућег прозора', | ||
39 | popupFullScreen: 'Приказ преко целог екрана (ИE)', | ||
40 | popupLeft: 'Од леве ивице екрана (пиксела)', | ||
41 | popupLocationBar: 'Локација', | ||
42 | popupMenuBar: 'Контекстни мени', | ||
43 | popupResizable: 'Величина се мења', | ||
44 | popupScrollBars: 'Скрол бар', | ||
45 | popupStatusBar: 'Статусна линија', | ||
46 | popupToolbar: 'Toolbar', | ||
47 | popupTop: 'Од врха екрана (пиксела)', | ||
48 | rel: 'Однос', | ||
49 | selectAnchor: 'Одабери сидро', | ||
50 | styles: 'Стил', | ||
51 | tabIndex: 'Таб индекс', | ||
52 | target: 'Meтa', | ||
53 | targetFrame: '<оквир>', | ||
54 | targetFrameName: 'Назив одредишног фрејма', | ||
55 | targetPopup: '<искачући прозор>', | ||
56 | targetPopupName: 'Назив искачућег прозора', | ||
57 | title: 'Линк', | ||
58 | toAnchor: 'Сидро на овој страници', | ||
59 | toEmail: 'Eлектронска пошта', | ||
60 | toUrl: 'УРЛ', | ||
61 | toolbar: 'Унеси/измени линк', | ||
62 | type: 'Врста линка', | ||
63 | unlink: 'Уклони линк', | ||
64 | upload: 'Пошаљи' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/sv.js b/sources/plugins/link/lang/sv.js new file mode 100644 index 0000000..30dc5b0 --- /dev/null +++ b/sources/plugins/link/lang/sv.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'sv', { | ||
6 | acccessKey: 'Behörighetsnyckel', | ||
7 | advanced: 'Avancerad', | ||
8 | advisoryContentType: 'Innehållstyp', | ||
9 | advisoryTitle: 'Titel', | ||
10 | anchor: { | ||
11 | toolbar: 'Infoga/Redigera ankarlänk', | ||
12 | menu: 'Egenskaper för ankarlänk', | ||
13 | title: 'Egenskaper för ankarlänk', | ||
14 | name: 'Ankarnamn', | ||
15 | errorName: 'Var god ange ett ankarnamn', | ||
16 | remove: 'Radera ankare' | ||
17 | }, | ||
18 | anchorId: 'Efter element-id', | ||
19 | anchorName: 'Efter ankarnamn', | ||
20 | charset: 'Teckenuppställning', | ||
21 | cssClasses: 'Stilmall', | ||
22 | emailAddress: 'E-postadress', | ||
23 | emailBody: 'Innehåll', | ||
24 | emailSubject: 'Ämne', | ||
25 | id: 'Id', | ||
26 | info: 'Länkinformation', | ||
27 | langCode: 'Språkkod', | ||
28 | langDir: 'Språkriktning', | ||
29 | langDirLTR: 'Vänster till höger (VTH)', | ||
30 | langDirRTL: 'Höger till vänster (HTV)', | ||
31 | menu: 'Redigera länk', | ||
32 | name: 'Namn', | ||
33 | noAnchors: '(Inga ankare kunde hittas)', | ||
34 | noEmail: 'Var god ange e-postadress', | ||
35 | noUrl: 'Var god ange länkens URL', | ||
36 | other: '<annan>', | ||
37 | popupDependent: 'Beroende (endast Netscape)', | ||
38 | popupFeatures: 'Popup-fönstrets egenskaper', | ||
39 | popupFullScreen: 'Helskärm (endast IE)', | ||
40 | popupLeft: 'Position från vänster', | ||
41 | popupLocationBar: 'Adressfält', | ||
42 | popupMenuBar: 'Menyfält', | ||
43 | popupResizable: 'Resizable', // MISSING | ||
44 | popupScrollBars: 'Scrolllista', | ||
45 | popupStatusBar: 'Statusfält', | ||
46 | popupToolbar: 'Verktygsfält', | ||
47 | popupTop: 'Position från sidans topp', | ||
48 | rel: 'Förhållande', | ||
49 | selectAnchor: 'Välj ett ankare', | ||
50 | styles: 'Stilmall', | ||
51 | tabIndex: 'Tabindex', | ||
52 | target: 'Mål', | ||
53 | targetFrame: '<ram>', | ||
54 | targetFrameName: 'Målets ramnamn', | ||
55 | targetPopup: '<popup-fönster>', | ||
56 | targetPopupName: 'Popup-fönstrets namn', | ||
57 | title: 'Länk', | ||
58 | toAnchor: 'Länk till ankare i texten', | ||
59 | toEmail: 'E-post', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Infoga/Redigera länk', | ||
62 | type: 'Länktyp', | ||
63 | unlink: 'Radera länk', | ||
64 | upload: 'Ladda upp' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/th.js b/sources/plugins/link/lang/th.js new file mode 100644 index 0000000..d49dbb3 --- /dev/null +++ b/sources/plugins/link/lang/th.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'th', { | ||
6 | acccessKey: 'แอคเซส คีย์', | ||
7 | advanced: 'ขั้นสูง', | ||
8 | advisoryContentType: 'ชนิดของคำเกริ่นนำ', | ||
9 | advisoryTitle: 'คำเกริ่นนำ', | ||
10 | anchor: { | ||
11 | toolbar: 'แทรก/แก้ไข Anchor', | ||
12 | menu: 'รายละเอียด Anchor', | ||
13 | title: 'รายละเอียด Anchor', | ||
14 | name: 'ชื่อ Anchor', | ||
15 | errorName: 'กรุณาระบุชื่อของ Anchor', | ||
16 | remove: 'Remove Anchor' | ||
17 | }, | ||
18 | anchorId: 'ไอดี', | ||
19 | anchorName: 'ชื่อ', | ||
20 | charset: 'ลิงค์เชื่อมโยงไปยังชุดตัวอักษร', | ||
21 | cssClasses: 'คลาสของไฟล์กำหนดลักษณะการแสดงผล', | ||
22 | emailAddress: 'อีเมล์ (E-Mail)', | ||
23 | emailBody: 'ข้อความ', | ||
24 | emailSubject: 'หัวเรื่อง', | ||
25 | id: 'ไอดี', | ||
26 | info: 'รายละเอียด', | ||
27 | langCode: 'การเขียน-อ่านภาษา', | ||
28 | langDir: 'การเขียน-อ่านภาษา', | ||
29 | langDirLTR: 'จากซ้ายไปขวา (LTR)', | ||
30 | langDirRTL: 'จากขวามาซ้าย (RTL)', | ||
31 | menu: 'แก้ไข ลิงค์', | ||
32 | name: 'ชื่อ', | ||
33 | noAnchors: '(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)', | ||
34 | noEmail: 'กรุณาระบุอีเมล์ (E-mail)', | ||
35 | noUrl: 'กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)', | ||
36 | other: '<อื่น ๆ>', | ||
37 | popupDependent: 'แสดงเต็มหน้าจอ (Netscape)', | ||
38 | popupFeatures: 'คุณสมบัติของหน้าจอเล็ก (Pop-up)', | ||
39 | popupFullScreen: 'แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)', | ||
40 | popupLeft: 'พิกัดซ้าย (Left Position)', | ||
41 | popupLocationBar: 'แสดงที่อยู่ของไฟล์', | ||
42 | popupMenuBar: 'แสดงแถบเมนู', | ||
43 | popupResizable: 'สามารถปรับขนาดได้', | ||
44 | popupScrollBars: 'แสดงแถบเลื่อน', | ||
45 | popupStatusBar: 'แสดงแถบสถานะ', | ||
46 | popupToolbar: 'แสดงแถบเครื่องมือ', | ||
47 | popupTop: 'พิกัดบน (Top Position)', | ||
48 | rel: 'ความสัมพันธ์', | ||
49 | selectAnchor: 'ระบุข้อมูลของจุดเชื่อมโยง (Anchor)', | ||
50 | styles: 'ลักษณะการแสดงผล', | ||
51 | tabIndex: 'ลำดับของ แท็บ', | ||
52 | target: 'การเปิดหน้าลิงค์', | ||
53 | targetFrame: '<เปิดในเฟรม>', | ||
54 | targetFrameName: 'ชื่อทาร์เก็ตเฟรม', | ||
55 | targetPopup: '<เปิดหน้าจอเล็ก (Pop-up)>', | ||
56 | targetPopupName: 'ระบุชื่อหน้าจอเล็ก (Pop-up)', | ||
57 | title: 'ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ', | ||
58 | toAnchor: 'จุดเชื่อมโยง (Anchor)', | ||
59 | toEmail: 'ส่งอีเมล์ (E-Mail)', | ||
60 | toUrl: 'ที่อยู่อ้างอิง URL', | ||
61 | toolbar: 'แทรก/แก้ไข ลิงค์', | ||
62 | type: 'ประเภทของลิงค์', | ||
63 | unlink: 'ลบ ลิงค์', | ||
64 | upload: 'อัพโหลดไฟล์' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/tr.js b/sources/plugins/link/lang/tr.js new file mode 100644 index 0000000..ce7b726 --- /dev/null +++ b/sources/plugins/link/lang/tr.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'tr', { | ||
6 | acccessKey: 'Erişim Tuşu', | ||
7 | advanced: 'Gelişmiş', | ||
8 | advisoryContentType: 'Danışma İçerik Türü', | ||
9 | advisoryTitle: 'Danışma Başlığı', | ||
10 | anchor: { | ||
11 | toolbar: 'Bağlantı Ekle/Düzenle', | ||
12 | menu: 'Bağlantı Özellikleri', | ||
13 | title: 'Bağlantı Özellikleri', | ||
14 | name: 'Bağlantı Adı', | ||
15 | errorName: 'Lütfen bağlantı için ad giriniz', | ||
16 | remove: 'Bağlantıyı Kaldır' | ||
17 | }, | ||
18 | anchorId: 'Eleman Kimlik Numarası ile', | ||
19 | anchorName: 'Bağlantı Adı ile', | ||
20 | charset: 'Bağlı Kaynak Karakter Gurubu', | ||
21 | cssClasses: 'Biçem Sayfası Sınıfları', | ||
22 | emailAddress: 'E-Posta Adresi', | ||
23 | emailBody: 'İleti Gövdesi', | ||
24 | emailSubject: 'İleti Konusu', | ||
25 | id: 'Id', | ||
26 | info: 'Link Bilgisi', | ||
27 | langCode: 'Dil Yönü', | ||
28 | langDir: 'Dil Yönü', | ||
29 | langDirLTR: 'Soldan Sağa (LTR)', | ||
30 | langDirRTL: 'Sağdan Sola (RTL)', | ||
31 | menu: 'Link Düzenle', | ||
32 | name: 'Ad', | ||
33 | noAnchors: '(Bu belgede hiç çapa yok)', | ||
34 | noEmail: 'Lütfen E-posta adresini yazın', | ||
35 | noUrl: 'Lütfen Link URL\'sini yazın', | ||
36 | other: '<diğer>', | ||
37 | popupDependent: 'Bağımlı (Netscape)', | ||
38 | popupFeatures: 'Yeni Açılan Pencere Özellikleri', | ||
39 | popupFullScreen: 'Tam Ekran (IE)', | ||
40 | popupLeft: 'Sola Göre Konum', | ||
41 | popupLocationBar: 'Yer Çubuğu', | ||
42 | popupMenuBar: 'Menü Çubuğu', | ||
43 | popupResizable: 'Resizable', | ||
44 | popupScrollBars: 'Kaydırma Çubukları', | ||
45 | popupStatusBar: 'Durum Çubuğu', | ||
46 | popupToolbar: 'Araç Çubuğu', | ||
47 | popupTop: 'Yukarıya Göre Konum', | ||
48 | rel: 'İlişki', | ||
49 | selectAnchor: 'Bağlantı Seç', | ||
50 | styles: 'Biçem', | ||
51 | tabIndex: 'Sekme İndeksi', | ||
52 | target: 'Hedef', | ||
53 | targetFrame: '<çerçeve>', | ||
54 | targetFrameName: 'Hedef Çerçeve Adı', | ||
55 | targetPopup: '<yeni açılan pencere>', | ||
56 | targetPopupName: 'Yeni Açılan Pencere Adı', | ||
57 | title: 'Link', | ||
58 | toAnchor: 'Bu sayfada çapa', | ||
59 | toEmail: 'E-Posta', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Link Ekle/Düzenle', | ||
62 | type: 'Link Türü', | ||
63 | unlink: 'Köprü Kaldır', | ||
64 | upload: 'Karşıya Yükle' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/tt.js b/sources/plugins/link/lang/tt.js new file mode 100644 index 0000000..4f2d077 --- /dev/null +++ b/sources/plugins/link/lang/tt.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'tt', { | ||
6 | acccessKey: 'Access Key', // MISSING | ||
7 | advanced: 'Киңәйтелгән көйләүләр', | ||
8 | advisoryContentType: 'Advisory Content Type', // MISSING | ||
9 | advisoryTitle: 'Киңәш исем', | ||
10 | anchor: { | ||
11 | toolbar: 'Якорь', | ||
12 | menu: 'Якорьне үзгәртү', | ||
13 | title: 'Якорь үзлекләре', | ||
14 | name: 'Якорь исеме', | ||
15 | errorName: 'Якорьнең исемен языгыз', | ||
16 | remove: 'Якорьне бетерү' | ||
17 | }, | ||
18 | anchorId: 'Элемент идентификаторы буенча', | ||
19 | anchorName: 'Якорь исеме буенча', | ||
20 | charset: 'Linked Resource Charset', // MISSING | ||
21 | cssClasses: 'Стильләр класслары', | ||
22 | emailAddress: 'Электрон почта адресы', | ||
23 | emailBody: 'Хат эчтәлеге', | ||
24 | emailSubject: 'Хат темасы', | ||
25 | id: 'Идентификатор', | ||
26 | info: 'Сылталама тасвирламасы', | ||
27 | langCode: 'Тел коды', | ||
28 | langDir: 'Язылыш юнəлеше', | ||
29 | langDirLTR: 'Сулдан уңга язылыш (LTR)', | ||
30 | langDirRTL: 'Уңнан сулга язылыш (RTL)', | ||
31 | menu: 'Сылталамаyны үзгәртү', | ||
32 | name: 'Исем', | ||
33 | noAnchors: '(Әлеге документта якорьләр табылмады)', | ||
34 | noEmail: 'Электрон почта адресын языгыз', | ||
35 | noUrl: 'Сылталаманы языгыз', | ||
36 | other: '<бүтән>', | ||
37 | popupDependent: 'Бәйле (Netscape)', | ||
38 | popupFeatures: 'Popup Window Features', // MISSING | ||
39 | popupFullScreen: 'Тулы экран (IE)', | ||
40 | popupLeft: 'Left Position', // MISSING | ||
41 | popupLocationBar: 'Location Bar', // MISSING | ||
42 | popupMenuBar: 'Menu Bar', // MISSING | ||
43 | popupResizable: 'Resizable', // MISSING | ||
44 | popupScrollBars: 'Scroll Bars', // MISSING | ||
45 | popupStatusBar: 'Status Bar', // MISSING | ||
46 | popupToolbar: 'Toolbar', // MISSING | ||
47 | popupTop: 'Top Position', // MISSING | ||
48 | rel: 'Бәйләнеш', | ||
49 | selectAnchor: 'Якорьне сайлау', | ||
50 | styles: 'Стиль', | ||
51 | tabIndex: 'Tab Index', // MISSING | ||
52 | target: 'Максат', | ||
53 | targetFrame: '<frame>', | ||
54 | targetFrameName: 'Target Frame Name', // MISSING | ||
55 | targetPopup: '<popup window>', | ||
56 | targetPopupName: 'Попап тәрәзәсе исеме', | ||
57 | title: 'Сылталама', | ||
58 | toAnchor: 'Якорьне текст белән бәйләү', | ||
59 | toEmail: 'Электрон почта', | ||
60 | toUrl: 'Сылталама', | ||
61 | toolbar: 'Сылталама', | ||
62 | type: 'Сылталама төре', | ||
63 | unlink: 'Сылталаманы бетерү', | ||
64 | upload: 'Йөкләү' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/ug.js b/sources/plugins/link/lang/ug.js new file mode 100644 index 0000000..0d81c27 --- /dev/null +++ b/sources/plugins/link/lang/ug.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'ug', { | ||
6 | acccessKey: 'زىيارەت كۇنۇپكا', | ||
7 | advanced: 'ئالىي', | ||
8 | advisoryContentType: 'مەزمۇن تىپى', | ||
9 | advisoryTitle: 'ماۋزۇ', | ||
10 | anchor: { | ||
11 | toolbar: 'لەڭگەرلىك نۇقتا ئۇلانمىسى قىستۇر/تەھرىرلە', | ||
12 | menu: 'لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى', | ||
13 | title: 'لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى', | ||
14 | name: 'لەڭگەرلىك نۇقتا ئاتى', | ||
15 | errorName: 'لەڭگەرلىك نۇقتا ئاتىنى كىرگۈزۈڭ', | ||
16 | remove: 'لەڭگەرلىك نۇقتا ئۆچۈر' | ||
17 | }, | ||
18 | anchorId: 'لەڭگەرلىك نۇقتا ID سى بويىچە', | ||
19 | anchorName: 'لەڭگەرلىك نۇقتا ئاتى بويىچە', | ||
20 | charset: 'ھەرپ كودلىنىشى', | ||
21 | cssClasses: 'ئۇسلۇب خىلى ئاتى', | ||
22 | emailAddress: 'ئادرېس', | ||
23 | emailBody: 'مەزمۇن', | ||
24 | emailSubject: 'ماۋزۇ', | ||
25 | id: 'ID', | ||
26 | info: 'ئۇلانما ئۇچۇرى', | ||
27 | langCode: 'تىل كودى', | ||
28 | langDir: 'تىل يۆنىلىشى', | ||
29 | langDirLTR: 'سولدىن ئوڭغا (LTR)', | ||
30 | langDirRTL: 'ئوڭدىن سولغا (RTL)', | ||
31 | menu: 'ئۇلانما تەھرىر', | ||
32 | name: 'ئات', | ||
33 | noAnchors: '(بۇ پۈتۈكتە ئىشلەتكىلى بولىدىغان لەڭگەرلىك نۇقتا يوق)', | ||
34 | noEmail: 'ئېلخەت ئادرېسىنى كىرگۈزۈڭ', | ||
35 | noUrl: 'ئۇلانما ئادرېسىنى كىرگۈزۈڭ', | ||
36 | other: '‹باشقا›', | ||
37 | popupDependent: 'تەۋە (NS)', | ||
38 | popupFeatures: 'قاڭقىش كۆزنەك خاسلىقى', | ||
39 | popupFullScreen: 'پۈتۈن ئېكران (IE)', | ||
40 | popupLeft: 'سول', | ||
41 | popupLocationBar: 'ئادرېس بالداق', | ||
42 | popupMenuBar: 'تىزىملىك بالداق', | ||
43 | popupResizable: 'چوڭلۇقى ئۆزگەرتىشچان', | ||
44 | popupScrollBars: 'دومىلىما سۈرگۈچ', | ||
45 | popupStatusBar: 'ھالەت بالداق', | ||
46 | popupToolbar: 'قورال بالداق', | ||
47 | popupTop: 'ئوڭ', | ||
48 | rel: 'باغلىنىش', | ||
49 | selectAnchor: 'بىر لەڭگەرلىك نۇقتا تاللاڭ', | ||
50 | styles: 'قۇر ئىچىدىكى ئۇسلۇبى', | ||
51 | tabIndex: 'Tab تەرتىپى', | ||
52 | target: 'نىشان', | ||
53 | targetFrame: '‹كاندۇك›', | ||
54 | targetFrameName: 'نىشان كاندۇك ئاتى', | ||
55 | targetPopup: '‹قاڭقىش كۆزنەك›', | ||
56 | targetPopupName: 'قاڭقىش كۆزنەك ئاتى', | ||
57 | title: 'ئۇلانما', | ||
58 | toAnchor: 'بەت ئىچىدىكى لەڭگەرلىك نۇقتا ئۇلانمىسى', | ||
59 | toEmail: 'ئېلخەت', | ||
60 | toUrl: 'ئادرېس', | ||
61 | toolbar: 'ئۇلانما قىستۇر/تەھرىرلە', | ||
62 | type: 'ئۇلانما تىپى', | ||
63 | unlink: 'ئۇلانما بىكار قىل', | ||
64 | upload: 'يۈكلە' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/uk.js b/sources/plugins/link/lang/uk.js new file mode 100644 index 0000000..655bdae --- /dev/null +++ b/sources/plugins/link/lang/uk.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'uk', { | ||
6 | acccessKey: 'Гаряча клавіша', | ||
7 | advanced: 'Додаткове', | ||
8 | advisoryContentType: 'Тип вмісту', | ||
9 | advisoryTitle: 'Заголовок', | ||
10 | anchor: { | ||
11 | toolbar: 'Вставити/Редагувати якір', | ||
12 | menu: 'Властивості якоря', | ||
13 | title: 'Властивості якоря', | ||
14 | name: 'Ім\'я якоря', | ||
15 | errorName: 'Будь ласка, вкажіть ім\'я якоря', | ||
16 | remove: 'Прибрати якір' | ||
17 | }, | ||
18 | anchorId: 'За ідентифікатором елементу', | ||
19 | anchorName: 'За ім\'ям елементу', | ||
20 | charset: 'Кодування', | ||
21 | cssClasses: 'Клас CSS', | ||
22 | emailAddress: 'Адреса ел. пошти', | ||
23 | emailBody: 'Тіло повідомлення', | ||
24 | emailSubject: 'Тема листа', | ||
25 | id: 'Ідентифікатор', | ||
26 | info: 'Інформація посилання', | ||
27 | langCode: 'Код мови', | ||
28 | langDir: 'Напрямок мови', | ||
29 | langDirLTR: 'Зліва направо (LTR)', | ||
30 | langDirRTL: 'Справа наліво (RTL)', | ||
31 | menu: 'Вставити посилання', | ||
32 | name: 'Ім\'я', | ||
33 | noAnchors: '(В цьому документі немає якорів)', | ||
34 | noEmail: 'Будь ласка, вкажіть адрес ел. пошти', | ||
35 | noUrl: 'Будь ласка, вкажіть URL посилання', | ||
36 | other: '<інший>', | ||
37 | popupDependent: 'Залежний (Netscape)', | ||
38 | popupFeatures: 'Властивості випливаючого вікна', | ||
39 | popupFullScreen: 'Повний екран (IE)', | ||
40 | popupLeft: 'Позиція зліва', | ||
41 | popupLocationBar: 'Панель локації', | ||
42 | popupMenuBar: 'Панель меню', | ||
43 | popupResizable: 'Масштабоване', | ||
44 | popupScrollBars: 'Стрічки прокрутки', | ||
45 | popupStatusBar: 'Рядок статусу', | ||
46 | popupToolbar: 'Панель інструментів', | ||
47 | popupTop: 'Позиція зверху', | ||
48 | rel: 'Зв\'язок', | ||
49 | selectAnchor: 'Оберіть якір', | ||
50 | styles: 'Стиль CSS', | ||
51 | tabIndex: 'Послідовність переходу', | ||
52 | target: 'Ціль', | ||
53 | targetFrame: '<фрейм>', | ||
54 | targetFrameName: 'Ім\'я цільового фрейму', | ||
55 | targetPopup: '<випливаюче вікно>', | ||
56 | targetPopupName: 'Ім\'я випливаючого вікна', | ||
57 | title: 'Посилання', | ||
58 | toAnchor: 'Якір на цю сторінку', | ||
59 | toEmail: 'Ел. пошта', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Вставити/Редагувати посилання', | ||
62 | type: 'Тип посилання', | ||
63 | unlink: 'Видалити посилання', | ||
64 | upload: 'Надіслати' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/vi.js b/sources/plugins/link/lang/vi.js new file mode 100644 index 0000000..6769108 --- /dev/null +++ b/sources/plugins/link/lang/vi.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'vi', { | ||
6 | acccessKey: 'Phím hỗ trợ truy cập', | ||
7 | advanced: 'Mở rộng', | ||
8 | advisoryContentType: 'Nội dung hướng dẫn', | ||
9 | advisoryTitle: 'Nhan đề hướng dẫn', | ||
10 | anchor: { | ||
11 | toolbar: 'Chèn/Sửa điểm neo', | ||
12 | menu: 'Thuộc tính điểm neo', | ||
13 | title: 'Thuộc tính điểm neo', | ||
14 | name: 'Tên của điểm neo', | ||
15 | errorName: 'Hãy nhập vào tên của điểm neo', | ||
16 | remove: 'Xóa neo' | ||
17 | }, | ||
18 | anchorId: 'Theo định danh thành phần', | ||
19 | anchorName: 'Theo tên điểm neo', | ||
20 | charset: 'Bảng mã của tài nguyên được liên kết đến', | ||
21 | cssClasses: 'Lớp Stylesheet', | ||
22 | emailAddress: 'Thư điện tử', | ||
23 | emailBody: 'Nội dung thông điệp', | ||
24 | emailSubject: 'Tiêu đề thông điệp', | ||
25 | id: 'Định danh', | ||
26 | info: 'Thông tin liên kết', | ||
27 | langCode: 'Mã ngôn ngữ', | ||
28 | langDir: 'Hướng ngôn ngữ', | ||
29 | langDirLTR: 'Trái sang phải (LTR)', | ||
30 | langDirRTL: 'Phải sang trái (RTL)', | ||
31 | menu: 'Sửa liên kết', | ||
32 | name: 'Tên', | ||
33 | noAnchors: '(Không có điểm neo nào trong tài liệu)', | ||
34 | noEmail: 'Hãy đưa vào địa chỉ thư điện tử', | ||
35 | noUrl: 'Hãy đưa vào đường dẫn liên kết (URL)', | ||
36 | other: '<khác>', | ||
37 | popupDependent: 'Phụ thuộc (Netscape)', | ||
38 | popupFeatures: 'Đặc điểm của cửa sổ Popup', | ||
39 | popupFullScreen: 'Toàn màn hình (IE)', | ||
40 | popupLeft: 'Vị trí bên trái', | ||
41 | popupLocationBar: 'Thanh vị trí', | ||
42 | popupMenuBar: 'Thanh Menu', | ||
43 | popupResizable: 'Có thể thay đổi kích cỡ', | ||
44 | popupScrollBars: 'Thanh cuộn', | ||
45 | popupStatusBar: 'Thanh trạng thái', | ||
46 | popupToolbar: 'Thanh công cụ', | ||
47 | popupTop: 'Vị trí phía trên', | ||
48 | rel: 'Quan hệ', | ||
49 | selectAnchor: 'Chọn một điểm neo', | ||
50 | styles: 'Kiểu (style)', | ||
51 | tabIndex: 'Chỉ số của Tab', | ||
52 | target: 'Đích', | ||
53 | targetFrame: '<khung>', | ||
54 | targetFrameName: 'Tên khung đích', | ||
55 | targetPopup: '<cửa sổ popup>', | ||
56 | targetPopupName: 'Tên cửa sổ Popup', | ||
57 | title: 'Liên kết', | ||
58 | toAnchor: 'Neo trong trang này', | ||
59 | toEmail: 'Thư điện tử', | ||
60 | toUrl: 'URL', | ||
61 | toolbar: 'Chèn/Sửa liên kết', | ||
62 | type: 'Kiểu liên kết', | ||
63 | unlink: 'Xoá liên kết', | ||
64 | upload: 'Tải lên' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/zh-cn.js b/sources/plugins/link/lang/zh-cn.js new file mode 100644 index 0000000..af30dd8 --- /dev/null +++ b/sources/plugins/link/lang/zh-cn.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'zh-cn', { | ||
6 | acccessKey: '访问键', | ||
7 | advanced: '高级', | ||
8 | advisoryContentType: '内容类型', | ||
9 | advisoryTitle: '标题', | ||
10 | anchor: { | ||
11 | toolbar: '插入/编辑锚点链接', | ||
12 | menu: '锚点链接属性', | ||
13 | title: '锚点链接属性', | ||
14 | name: '锚点名称', | ||
15 | errorName: '请输入锚点名称', | ||
16 | remove: '删除锚点' | ||
17 | }, | ||
18 | anchorId: '按锚点 ID', | ||
19 | anchorName: '按锚点名称', | ||
20 | charset: '字符编码', | ||
21 | cssClasses: '样式类名称', | ||
22 | emailAddress: '地址', | ||
23 | emailBody: '内容', | ||
24 | emailSubject: '主题', | ||
25 | id: 'ID', | ||
26 | info: '超链接信息', | ||
27 | langCode: '语言代码', | ||
28 | langDir: '语言方向', | ||
29 | langDirLTR: '从左到右 (LTR)', | ||
30 | langDirRTL: '从右到左 (RTL)', | ||
31 | menu: '编辑超链接', | ||
32 | name: '名称', | ||
33 | noAnchors: '(此文档没有可用的锚点)', | ||
34 | noEmail: '请输入电子邮件地址', | ||
35 | noUrl: '请输入超链接地址', | ||
36 | other: '<其他>', | ||
37 | popupDependent: '依附 (NS)', | ||
38 | popupFeatures: '弹出窗口属性', | ||
39 | popupFullScreen: '全屏 (IE)', | ||
40 | popupLeft: '左', | ||
41 | popupLocationBar: '地址栏', | ||
42 | popupMenuBar: '菜单栏', | ||
43 | popupResizable: '可缩放', | ||
44 | popupScrollBars: '滚动条', | ||
45 | popupStatusBar: '状态栏', | ||
46 | popupToolbar: '工具栏', | ||
47 | popupTop: '右', | ||
48 | rel: '关联', | ||
49 | selectAnchor: '选择一个锚点', | ||
50 | styles: '行内样式', | ||
51 | tabIndex: 'Tab 键次序', | ||
52 | target: '目标', | ||
53 | targetFrame: '<框架>', | ||
54 | targetFrameName: '目标框架名称', | ||
55 | targetPopup: '<弹出窗口>', | ||
56 | targetPopupName: '弹出窗口名称', | ||
57 | title: '超链接', | ||
58 | toAnchor: '页内锚点链接', | ||
59 | toEmail: '电子邮件', | ||
60 | toUrl: '地址', | ||
61 | toolbar: '插入/编辑超链接', | ||
62 | type: '超链接类型', | ||
63 | unlink: '取消超链接', | ||
64 | upload: '上传' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/lang/zh.js b/sources/plugins/link/lang/zh.js new file mode 100644 index 0000000..4dfa7cf --- /dev/null +++ b/sources/plugins/link/lang/zh.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'link', 'zh', { | ||
6 | acccessKey: '便捷鍵', | ||
7 | advanced: '進階', | ||
8 | advisoryContentType: '建議內容類型', | ||
9 | advisoryTitle: '標題', | ||
10 | anchor: { | ||
11 | toolbar: '錨點', | ||
12 | menu: '編輯錨點', | ||
13 | title: '錨點內容', | ||
14 | name: '錨點名稱', | ||
15 | errorName: '請輸入錨點名稱', | ||
16 | remove: '移除錨點' | ||
17 | }, | ||
18 | anchorId: '依元件編號', | ||
19 | anchorName: '依錨點名稱', | ||
20 | charset: '連結資源的字元集', | ||
21 | cssClasses: '樣式表類別', | ||
22 | emailAddress: '電子郵件地址', | ||
23 | emailBody: '郵件本文', | ||
24 | emailSubject: '郵件主旨', | ||
25 | id: 'ID', | ||
26 | info: '連結資訊', | ||
27 | langCode: '語言碼', | ||
28 | langDir: '語言方向', | ||
29 | langDirLTR: '由左至右 (LTR)', | ||
30 | langDirRTL: '由右至左 (RTL)', | ||
31 | menu: '編輯連結', | ||
32 | name: '名稱', | ||
33 | noAnchors: '(本文件中無可用之錨點)', | ||
34 | noEmail: '請輸入電子郵件', | ||
35 | noUrl: '請輸入連結 URL', | ||
36 | other: '<其他>', | ||
37 | popupDependent: '獨立 (Netscape)', | ||
38 | popupFeatures: '快顯視窗功能', | ||
39 | popupFullScreen: '全螢幕 (IE)', | ||
40 | popupLeft: '左側位置', | ||
41 | popupLocationBar: '位置列', | ||
42 | popupMenuBar: '功能表列', | ||
43 | popupResizable: '可調大小', | ||
44 | popupScrollBars: '捲軸', | ||
45 | popupStatusBar: '狀態列', | ||
46 | popupToolbar: '工具列', | ||
47 | popupTop: '頂端位置', | ||
48 | rel: '關係', | ||
49 | selectAnchor: '選取一個錨點', | ||
50 | styles: '樣式', | ||
51 | tabIndex: '定位順序', | ||
52 | target: '目標', | ||
53 | targetFrame: '<框架>', | ||
54 | targetFrameName: '目標框架名稱', | ||
55 | targetPopup: '<快顯視窗>', | ||
56 | targetPopupName: '快顯視窗名稱', | ||
57 | title: '連結', | ||
58 | toAnchor: '文字中的錨點連結', | ||
59 | toEmail: '電子郵件', | ||
60 | toUrl: '網址', | ||
61 | toolbar: '連結', | ||
62 | type: '連結類型', | ||
63 | unlink: '取消連結', | ||
64 | upload: '上傳' | ||
65 | } ); | ||
diff --git a/sources/plugins/link/plugin.js b/sources/plugins/link/plugin.js new file mode 100644 index 0000000..db11376 --- /dev/null +++ b/sources/plugins/link/plugin.js | |||
@@ -0,0 +1,787 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | 'use strict'; | ||
7 | |||
8 | ( function() { | ||
9 | CKEDITOR.plugins.add( 'link', { | ||
10 | requires: 'dialog,fakeobjects', | ||
11 | // jscs:disable maximumLineLength | ||
12 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
13 | // jscs:enable maximumLineLength | ||
14 | icons: 'anchor,anchor-rtl,link,unlink', // %REMOVE_LINE_CORE% | ||
15 | hidpi: true, // %REMOVE_LINE_CORE% | ||
16 | onLoad: function() { | ||
17 | // Add the CSS styles for anchor placeholders. | ||
18 | var iconPath = CKEDITOR.getUrl( this.path + 'images' + ( CKEDITOR.env.hidpi ? '/hidpi' : '' ) + '/anchor.png' ), | ||
19 | baseStyle = 'background:url(' + iconPath + ') no-repeat %1 center;border:1px dotted #00f;background-size:16px;'; | ||
20 | |||
21 | var template = '.%2 a.cke_anchor,' + | ||
22 | '.%2 a.cke_anchor_empty' + | ||
23 | ',.cke_editable.%2 a[name]' + | ||
24 | ',.cke_editable.%2 a[data-cke-saved-name]' + | ||
25 | '{' + | ||
26 | baseStyle + | ||
27 | 'padding-%1:18px;' + | ||
28 | // Show the arrow cursor for the anchor image (FF at least). | ||
29 | 'cursor:auto;' + | ||
30 | '}' + | ||
31 | '.%2 img.cke_anchor' + | ||
32 | '{' + | ||
33 | baseStyle + | ||
34 | 'width:16px;' + | ||
35 | 'min-height:15px;' + | ||
36 | // The default line-height on IE. | ||
37 | 'height:1.15em;' + | ||
38 | // Opera works better with "middle" (even if not perfect) | ||
39 | 'vertical-align:text-bottom;' + | ||
40 | '}'; | ||
41 | |||
42 | // Styles with contents direction awareness. | ||
43 | function cssWithDir( dir ) { | ||
44 | return template.replace( /%1/g, dir == 'rtl' ? 'right' : 'left' ).replace( /%2/g, 'cke_contents_' + dir ); | ||
45 | } | ||
46 | |||
47 | CKEDITOR.addCss( cssWithDir( 'ltr' ) + cssWithDir( 'rtl' ) ); | ||
48 | }, | ||
49 | |||
50 | init: function( editor ) { | ||
51 | var allowed = 'a[!href]', | ||
52 | required = 'a[href]'; | ||
53 | |||
54 | if ( CKEDITOR.dialog.isTabEnabled( editor, 'link', 'advanced' ) ) | ||
55 | allowed = allowed.replace( ']', ',accesskey,charset,dir,id,lang,name,rel,tabindex,title,type]{*}(*)' ); | ||
56 | if ( CKEDITOR.dialog.isTabEnabled( editor, 'link', 'target' ) ) | ||
57 | allowed = allowed.replace( ']', ',target,onclick]' ); | ||
58 | |||
59 | // Add the link and unlink buttons. | ||
60 | editor.addCommand( 'link', new CKEDITOR.dialogCommand( 'link', { | ||
61 | allowedContent: allowed, | ||
62 | requiredContent: required | ||
63 | } ) ); | ||
64 | editor.addCommand( 'anchor', new CKEDITOR.dialogCommand( 'anchor', { | ||
65 | allowedContent: 'a[!name,id]', | ||
66 | requiredContent: 'a[name]' | ||
67 | } ) ); | ||
68 | editor.addCommand( 'unlink', new CKEDITOR.unlinkCommand() ); | ||
69 | editor.addCommand( 'removeAnchor', new CKEDITOR.removeAnchorCommand() ); | ||
70 | |||
71 | editor.setKeystroke( CKEDITOR.CTRL + 76 /*L*/, 'link' ); | ||
72 | |||
73 | if ( editor.ui.addButton ) { | ||
74 | editor.ui.addButton( 'Link', { | ||
75 | label: editor.lang.link.toolbar, | ||
76 | command: 'link', | ||
77 | toolbar: 'links,10' | ||
78 | } ); | ||
79 | editor.ui.addButton( 'Unlink', { | ||
80 | label: editor.lang.link.unlink, | ||
81 | command: 'unlink', | ||
82 | toolbar: 'links,20' | ||
83 | } ); | ||
84 | editor.ui.addButton( 'Anchor', { | ||
85 | label: editor.lang.link.anchor.toolbar, | ||
86 | command: 'anchor', | ||
87 | toolbar: 'links,30' | ||
88 | } ); | ||
89 | } | ||
90 | |||
91 | CKEDITOR.dialog.add( 'link', this.path + 'dialogs/link.js' ); | ||
92 | CKEDITOR.dialog.add( 'anchor', this.path + 'dialogs/anchor.js' ); | ||
93 | |||
94 | editor.on( 'doubleclick', function( evt ) { | ||
95 | var element = CKEDITOR.plugins.link.getSelectedLink( editor ) || evt.data.element; | ||
96 | |||
97 | if ( !element.isReadOnly() ) { | ||
98 | if ( element.is( 'a' ) ) { | ||
99 | evt.data.dialog = ( element.getAttribute( 'name' ) && ( !element.getAttribute( 'href' ) || !element.getChildCount() ) ) ? 'anchor' : 'link'; | ||
100 | |||
101 | // Pass the link to be selected along with event data. | ||
102 | evt.data.link = element; | ||
103 | } else if ( CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element ) ) { | ||
104 | evt.data.dialog = 'anchor'; | ||
105 | } | ||
106 | } | ||
107 | }, null, null, 0 ); | ||
108 | |||
109 | // If event was cancelled, link passed in event data will not be selected. | ||
110 | editor.on( 'doubleclick', function( evt ) { | ||
111 | // Make sure both links and anchors are selected (#11822). | ||
112 | if ( evt.data.dialog in { link: 1, anchor: 1 } && evt.data.link ) | ||
113 | editor.getSelection().selectElement( evt.data.link ); | ||
114 | }, null, null, 20 ); | ||
115 | |||
116 | // If the "menu" plugin is loaded, register the menu items. | ||
117 | if ( editor.addMenuItems ) { | ||
118 | editor.addMenuItems( { | ||
119 | anchor: { | ||
120 | label: editor.lang.link.anchor.menu, | ||
121 | command: 'anchor', | ||
122 | group: 'anchor', | ||
123 | order: 1 | ||
124 | }, | ||
125 | |||
126 | removeAnchor: { | ||
127 | label: editor.lang.link.anchor.remove, | ||
128 | command: 'removeAnchor', | ||
129 | group: 'anchor', | ||
130 | order: 5 | ||
131 | }, | ||
132 | |||
133 | link: { | ||
134 | label: editor.lang.link.menu, | ||
135 | command: 'link', | ||
136 | group: 'link', | ||
137 | order: 1 | ||
138 | }, | ||
139 | |||
140 | unlink: { | ||
141 | label: editor.lang.link.unlink, | ||
142 | command: 'unlink', | ||
143 | group: 'link', | ||
144 | order: 5 | ||
145 | } | ||
146 | } ); | ||
147 | } | ||
148 | |||
149 | // If the "contextmenu" plugin is loaded, register the listeners. | ||
150 | if ( editor.contextMenu ) { | ||
151 | editor.contextMenu.addListener( function( element ) { | ||
152 | if ( !element || element.isReadOnly() ) | ||
153 | return null; | ||
154 | |||
155 | var anchor = CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element ); | ||
156 | |||
157 | if ( !anchor && !( anchor = CKEDITOR.plugins.link.getSelectedLink( editor ) ) ) | ||
158 | return null; | ||
159 | |||
160 | var menu = {}; | ||
161 | |||
162 | if ( anchor.getAttribute( 'href' ) && anchor.getChildCount() ) | ||
163 | menu = { link: CKEDITOR.TRISTATE_OFF, unlink: CKEDITOR.TRISTATE_OFF }; | ||
164 | |||
165 | if ( anchor && anchor.hasAttribute( 'name' ) ) | ||
166 | menu.anchor = menu.removeAnchor = CKEDITOR.TRISTATE_OFF; | ||
167 | |||
168 | return menu; | ||
169 | } ); | ||
170 | } | ||
171 | |||
172 | this.compiledProtectionFunction = getCompiledProtectionFunction( editor ); | ||
173 | }, | ||
174 | |||
175 | afterInit: function( editor ) { | ||
176 | // Empty anchors upcasting to fake objects. | ||
177 | editor.dataProcessor.dataFilter.addRules( { | ||
178 | elements: { | ||
179 | a: function( element ) { | ||
180 | if ( !element.attributes.name ) | ||
181 | return null; | ||
182 | |||
183 | if ( !element.children.length ) | ||
184 | return editor.createFakeParserElement( element, 'cke_anchor', 'anchor' ); | ||
185 | |||
186 | return null; | ||
187 | } | ||
188 | } | ||
189 | } ); | ||
190 | |||
191 | var pathFilters = editor._.elementsPath && editor._.elementsPath.filters; | ||
192 | if ( pathFilters ) { | ||
193 | pathFilters.push( function( element, name ) { | ||
194 | if ( name == 'a' ) { | ||
195 | if ( CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element ) || ( element.getAttribute( 'name' ) && ( !element.getAttribute( 'href' ) || !element.getChildCount() ) ) ) | ||
196 | return 'anchor'; | ||
197 | } | ||
198 | } ); | ||
199 | } | ||
200 | } | ||
201 | } ); | ||
202 | |||
203 | // Loads the parameters in a selected link to the link dialog fields. | ||
204 | var javascriptProtocolRegex = /^javascript:/, | ||
205 | emailRegex = /^mailto:([^?]+)(?:\?(.+))?$/, | ||
206 | emailSubjectRegex = /subject=([^;?:@&=$,\/]*)/i, | ||
207 | emailBodyRegex = /body=([^;?:@&=$,\/]*)/i, | ||
208 | anchorRegex = /^#(.*)$/, | ||
209 | urlRegex = /^((?:http|https|ftp|news):\/\/)?(.*)$/, | ||
210 | selectableTargets = /^(_(?:self|top|parent|blank))$/, | ||
211 | encodedEmailLinkRegex = /^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/, | ||
212 | functionCallProtectedEmailLinkRegex = /^javascript:([^(]+)\(([^)]+)\)$/, | ||
213 | popupRegex = /\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/, | ||
214 | popupFeaturesRegex = /(?:^|,)([^=]+)=(\d+|yes|no)/gi; | ||
215 | |||
216 | var advAttrNames = { | ||
217 | id: 'advId', | ||
218 | dir: 'advLangDir', | ||
219 | accessKey: 'advAccessKey', | ||
220 | // 'data-cke-saved-name': 'advName', | ||
221 | name: 'advName', | ||
222 | lang: 'advLangCode', | ||
223 | tabindex: 'advTabIndex', | ||
224 | title: 'advTitle', | ||
225 | type: 'advContentType', | ||
226 | 'class': 'advCSSClasses', | ||
227 | charset: 'advCharset', | ||
228 | style: 'advStyles', | ||
229 | rel: 'advRel' | ||
230 | }; | ||
231 | |||
232 | function unescapeSingleQuote( str ) { | ||
233 | return str.replace( /\\'/g, '\'' ); | ||
234 | } | ||
235 | |||
236 | function escapeSingleQuote( str ) { | ||
237 | return str.replace( /'/g, '\\$&' ); | ||
238 | } | ||
239 | |||
240 | function protectEmailAddressAsEncodedString( address ) { | ||
241 | var charCode, | ||
242 | length = address.length, | ||
243 | encodedChars = []; | ||
244 | |||
245 | for ( var i = 0; i < length; i++ ) { | ||
246 | charCode = address.charCodeAt( i ); | ||
247 | encodedChars.push( charCode ); | ||
248 | } | ||
249 | |||
250 | return 'String.fromCharCode(' + encodedChars.join( ',' ) + ')'; | ||
251 | } | ||
252 | |||
253 | function protectEmailLinkAsFunction( editor, email ) { | ||
254 | var plugin = editor.plugins.link, | ||
255 | name = plugin.compiledProtectionFunction.name, | ||
256 | params = plugin.compiledProtectionFunction.params, | ||
257 | paramName, paramValue, retval; | ||
258 | |||
259 | retval = [ name, '(' ]; | ||
260 | for ( var i = 0; i < params.length; i++ ) { | ||
261 | paramName = params[ i ].toLowerCase(); | ||
262 | paramValue = email[ paramName ]; | ||
263 | |||
264 | i > 0 && retval.push( ',' ); | ||
265 | retval.push( '\'', paramValue ? escapeSingleQuote( encodeURIComponent( email[ paramName ] ) ) : '', '\'' ); | ||
266 | } | ||
267 | retval.push( ')' ); | ||
268 | return retval.join( '' ); | ||
269 | } | ||
270 | |||
271 | function getCompiledProtectionFunction( editor ) { | ||
272 | var emailProtection = editor.config.emailProtection || '', | ||
273 | compiledProtectionFunction; | ||
274 | |||
275 | // Compile the protection function pattern. | ||
276 | if ( emailProtection && emailProtection != 'encode' ) { | ||
277 | compiledProtectionFunction = {}; | ||
278 | |||
279 | emailProtection.replace( /^([^(]+)\(([^)]+)\)$/, function( match, funcName, params ) { | ||
280 | compiledProtectionFunction.name = funcName; | ||
281 | compiledProtectionFunction.params = []; | ||
282 | params.replace( /[^,\s]+/g, function( param ) { | ||
283 | compiledProtectionFunction.params.push( param ); | ||
284 | } ); | ||
285 | } ); | ||
286 | } | ||
287 | |||
288 | return compiledProtectionFunction; | ||
289 | } | ||
290 | |||
291 | /** | ||
292 | * Set of Link plugin helpers. | ||
293 | * | ||
294 | * @class | ||
295 | * @singleton | ||
296 | */ | ||
297 | CKEDITOR.plugins.link = { | ||
298 | /** | ||
299 | * Get the surrounding link element of the current selection. | ||
300 | * | ||
301 | * CKEDITOR.plugins.link.getSelectedLink( editor ); | ||
302 | * | ||
303 | * // The following selections will all return the link element. | ||
304 | * | ||
305 | * <a href="#">li^nk</a> | ||
306 | * <a href="#">[link]</a> | ||
307 | * text[<a href="#">link]</a> | ||
308 | * <a href="#">li[nk</a>] | ||
309 | * [<b><a href="#">li]nk</a></b>] | ||
310 | * [<a href="#"><b>li]nk</b></a> | ||
311 | * | ||
312 | * @since 3.2.1 | ||
313 | * @param {CKEDITOR.editor} editor | ||
314 | */ | ||
315 | getSelectedLink: function( editor ) { | ||
316 | var selection = editor.getSelection(); | ||
317 | var selectedElement = selection.getSelectedElement(); | ||
318 | if ( selectedElement && selectedElement.is( 'a' ) ) | ||
319 | return selectedElement; | ||
320 | |||
321 | var range = selection.getRanges()[ 0 ]; | ||
322 | |||
323 | if ( range ) { | ||
324 | range.shrink( CKEDITOR.SHRINK_TEXT ); | ||
325 | return editor.elementPath( range.getCommonAncestor() ).contains( 'a', 1 ); | ||
326 | } | ||
327 | return null; | ||
328 | }, | ||
329 | |||
330 | /** | ||
331 | * Collects anchors available in the editor (i.e. used by the Link plugin). | ||
332 | * Note that the scope of search is different for inline (the "global" document) and | ||
333 | * classic (`iframe`-based) editors (the "inner" document). | ||
334 | * | ||
335 | * @since 4.3.3 | ||
336 | * @param {CKEDITOR.editor} editor | ||
337 | * @returns {CKEDITOR.dom.element[]} An array of anchor elements. | ||
338 | */ | ||
339 | getEditorAnchors: function( editor ) { | ||
340 | var editable = editor.editable(), | ||
341 | |||
342 | // The scope of search for anchors is the entire document for inline editors | ||
343 | // and editor's editable for classic editor/divarea (#11359). | ||
344 | scope = ( editable.isInline() && !editor.plugins.divarea ) ? editor.document : editable, | ||
345 | |||
346 | links = scope.getElementsByTag( 'a' ), | ||
347 | imgs = scope.getElementsByTag( 'img' ), | ||
348 | anchors = [], | ||
349 | i = 0, | ||
350 | item; | ||
351 | |||
352 | // Retrieve all anchors within the scope. | ||
353 | while ( ( item = links.getItem( i++ ) ) ) { | ||
354 | if ( item.data( 'cke-saved-name' ) || item.hasAttribute( 'name' ) ) { | ||
355 | anchors.push( { | ||
356 | name: item.data( 'cke-saved-name' ) || item.getAttribute( 'name' ), | ||
357 | id: item.getAttribute( 'id' ) | ||
358 | } ); | ||
359 | } | ||
360 | } | ||
361 | // Retrieve all "fake anchors" within the scope. | ||
362 | i = 0; | ||
363 | |||
364 | while ( ( item = imgs.getItem( i++ ) ) ) { | ||
365 | if ( ( item = this.tryRestoreFakeAnchor( editor, item ) ) ) { | ||
366 | anchors.push( { | ||
367 | name: item.getAttribute( 'name' ), | ||
368 | id: item.getAttribute( 'id' ) | ||
369 | } ); | ||
370 | } | ||
371 | } | ||
372 | |||
373 | return anchors; | ||
374 | }, | ||
375 | |||
376 | /** | ||
377 | * Opera and WebKit do not make it possible to select empty anchors. Fake | ||
378 | * elements must be used for them. | ||
379 | * | ||
380 | * @readonly | ||
381 | * @deprecated 4.3.3 It is set to `true` in every browser. | ||
382 | * @property {Boolean} | ||
383 | */ | ||
384 | fakeAnchor: true, | ||
385 | |||
386 | /** | ||
387 | * For browsers that do not support CSS3 `a[name]:empty()`. Note that IE9 is included because of #7783. | ||
388 | * | ||
389 | * @readonly | ||
390 | * @deprecated 4.3.3 It is set to `false` in every browser. | ||
391 | * @property {Boolean} synAnchorSelector | ||
392 | */ | ||
393 | |||
394 | /** | ||
395 | * For browsers that have editing issues with an empty anchor. | ||
396 | * | ||
397 | * @readonly | ||
398 | * @deprecated 4.3.3 It is set to `false` in every browser. | ||
399 | * @property {Boolean} emptyAnchorFix | ||
400 | */ | ||
401 | |||
402 | /** | ||
403 | * Returns an element representing a real anchor restored from a fake anchor. | ||
404 | * | ||
405 | * @param {CKEDITOR.editor} editor | ||
406 | * @param {CKEDITOR.dom.element} element | ||
407 | * @returns {CKEDITOR.dom.element} Restored anchor element or nothing if the | ||
408 | * passed element was not a fake anchor. | ||
409 | */ | ||
410 | tryRestoreFakeAnchor: function( editor, element ) { | ||
411 | if ( element && element.data( 'cke-real-element-type' ) && element.data( 'cke-real-element-type' ) == 'anchor' ) { | ||
412 | var link = editor.restoreRealElement( element ); | ||
413 | if ( link.data( 'cke-saved-name' ) ) | ||
414 | return link; | ||
415 | } | ||
416 | }, | ||
417 | |||
418 | /** | ||
419 | * Parses attributes of the link element and returns an object representing | ||
420 | * the current state (data) of the link. This data format is a plain object accepted | ||
421 | * e.g. by the Link dialog window and {@link #getLinkAttributes}. | ||
422 | * | ||
423 | * **Note:** Data model format produced by the parser must be compatible with the Link | ||
424 | * plugin dialog because it is passed directly to {@link CKEDITOR.dialog#setupContent}. | ||
425 | * | ||
426 | * @since 4.4 | ||
427 | * @param {CKEDITOR.editor} editor | ||
428 | * @param {CKEDITOR.dom.element} element | ||
429 | * @returns {Object} An object of link data. | ||
430 | */ | ||
431 | parseLinkAttributes: function( editor, element ) { | ||
432 | var href = ( element && ( element.data( 'cke-saved-href' ) || element.getAttribute( 'href' ) ) ) || '', | ||
433 | compiledProtectionFunction = editor.plugins.link.compiledProtectionFunction, | ||
434 | emailProtection = editor.config.emailProtection, | ||
435 | javascriptMatch, emailMatch, anchorMatch, urlMatch, | ||
436 | retval = {}; | ||
437 | |||
438 | if ( ( javascriptMatch = href.match( javascriptProtocolRegex ) ) ) { | ||
439 | if ( emailProtection == 'encode' ) { | ||
440 | href = href.replace( encodedEmailLinkRegex, function( match, protectedAddress, rest ) { | ||
441 | // Without it 'undefined' is appended to e-mails without subject and body (#9192). | ||
442 | rest = rest || ''; | ||
443 | |||
444 | return 'mailto:' + | ||
445 | String.fromCharCode.apply( String, protectedAddress.split( ',' ) ) + | ||
446 | unescapeSingleQuote( rest ); | ||
447 | } ); | ||
448 | } | ||
449 | // Protected email link as function call. | ||
450 | else if ( emailProtection ) { | ||
451 | href.replace( functionCallProtectedEmailLinkRegex, function( match, funcName, funcArgs ) { | ||
452 | if ( funcName == compiledProtectionFunction.name ) { | ||
453 | retval.type = 'email'; | ||
454 | var email = retval.email = {}; | ||
455 | |||
456 | var paramRegex = /[^,\s]+/g, | ||
457 | paramQuoteRegex = /(^')|('$)/g, | ||
458 | paramsMatch = funcArgs.match( paramRegex ), | ||
459 | paramsMatchLength = paramsMatch.length, | ||
460 | paramName, paramVal; | ||
461 | |||
462 | for ( var i = 0; i < paramsMatchLength; i++ ) { | ||
463 | paramVal = decodeURIComponent( unescapeSingleQuote( paramsMatch[ i ].replace( paramQuoteRegex, '' ) ) ); | ||
464 | paramName = compiledProtectionFunction.params[ i ].toLowerCase(); | ||
465 | email[ paramName ] = paramVal; | ||
466 | } | ||
467 | email.address = [ email.name, email.domain ].join( '@' ); | ||
468 | } | ||
469 | } ); | ||
470 | } | ||
471 | } | ||
472 | |||
473 | if ( !retval.type ) { | ||
474 | if ( ( anchorMatch = href.match( anchorRegex ) ) ) { | ||
475 | retval.type = 'anchor'; | ||
476 | retval.anchor = {}; | ||
477 | retval.anchor.name = retval.anchor.id = anchorMatch[ 1 ]; | ||
478 | } | ||
479 | // Protected email link as encoded string. | ||
480 | else if ( ( emailMatch = href.match( emailRegex ) ) ) { | ||
481 | var subjectMatch = href.match( emailSubjectRegex ), | ||
482 | bodyMatch = href.match( emailBodyRegex ); | ||
483 | |||
484 | retval.type = 'email'; | ||
485 | var email = ( retval.email = {} ); | ||
486 | email.address = emailMatch[ 1 ]; | ||
487 | subjectMatch && ( email.subject = decodeURIComponent( subjectMatch[ 1 ] ) ); | ||
488 | bodyMatch && ( email.body = decodeURIComponent( bodyMatch[ 1 ] ) ); | ||
489 | } | ||
490 | // urlRegex matches empty strings, so need to check for href as well. | ||
491 | else if ( href && ( urlMatch = href.match( urlRegex ) ) ) { | ||
492 | retval.type = 'url'; | ||
493 | retval.url = {}; | ||
494 | retval.url.protocol = urlMatch[ 1 ]; | ||
495 | retval.url.url = urlMatch[ 2 ]; | ||
496 | } | ||
497 | } | ||
498 | |||
499 | // Load target and popup settings. | ||
500 | if ( element ) { | ||
501 | var target = element.getAttribute( 'target' ); | ||
502 | |||
503 | // IE BUG: target attribute is an empty string instead of null in IE if it's not set. | ||
504 | if ( !target ) { | ||
505 | var onclick = element.data( 'cke-pa-onclick' ) || element.getAttribute( 'onclick' ), | ||
506 | onclickMatch = onclick && onclick.match( popupRegex ); | ||
507 | |||
508 | if ( onclickMatch ) { | ||
509 | retval.target = { | ||
510 | type: 'popup', | ||
511 | name: onclickMatch[ 1 ] | ||
512 | }; | ||
513 | |||
514 | var featureMatch; | ||
515 | while ( ( featureMatch = popupFeaturesRegex.exec( onclickMatch[ 2 ] ) ) ) { | ||
516 | // Some values should remain numbers (#7300) | ||
517 | if ( ( featureMatch[ 2 ] == 'yes' || featureMatch[ 2 ] == '1' ) && !( featureMatch[ 1 ] in { height: 1, width: 1, top: 1, left: 1 } ) ) | ||
518 | retval.target[ featureMatch[ 1 ] ] = true; | ||
519 | else if ( isFinite( featureMatch[ 2 ] ) ) | ||
520 | retval.target[ featureMatch[ 1 ] ] = featureMatch[ 2 ]; | ||
521 | } | ||
522 | } | ||
523 | } else { | ||
524 | retval.target = { | ||
525 | type: target.match( selectableTargets ) ? target : 'frame', | ||
526 | name: target | ||
527 | }; | ||
528 | } | ||
529 | |||
530 | var advanced = {}; | ||
531 | |||
532 | for ( var a in advAttrNames ) { | ||
533 | var val = element.getAttribute( a ); | ||
534 | |||
535 | if ( val ) | ||
536 | advanced[ advAttrNames[ a ] ] = val; | ||
537 | } | ||
538 | |||
539 | var advName = element.data( 'cke-saved-name' ) || advanced.advName; | ||
540 | |||
541 | if ( advName ) | ||
542 | advanced.advName = advName; | ||
543 | |||
544 | if ( !CKEDITOR.tools.isEmpty( advanced ) ) | ||
545 | retval.advanced = advanced; | ||
546 | } | ||
547 | |||
548 | return retval; | ||
549 | }, | ||
550 | |||
551 | /** | ||
552 | * Converts link data produced by {@link #parseLinkAttributes} into an object which consists | ||
553 | * of attributes to be set (with their values) and an array of attributes to be removed. | ||
554 | * This method can be used to compose or to update any link element with the given data. | ||
555 | * | ||
556 | * @since 4.4 | ||
557 | * @param {CKEDITOR.editor} editor | ||
558 | * @param {Object} data Data in {@link #parseLinkAttributes} format. | ||
559 | * @returns {Object} An object consisting of two keys, i.e.: | ||
560 | * | ||
561 | * { | ||
562 | * // Attributes to be set. | ||
563 | * set: { | ||
564 | * href: 'http://foo.bar', | ||
565 | * target: 'bang' | ||
566 | * }, | ||
567 | * // Attributes to be removed. | ||
568 | * removed: [ | ||
569 | * 'id', 'style' | ||
570 | * ] | ||
571 | * } | ||
572 | * | ||
573 | */ | ||
574 | getLinkAttributes: function( editor, data ) { | ||
575 | var emailProtection = editor.config.emailProtection || '', | ||
576 | set = {}; | ||
577 | |||
578 | // Compose the URL. | ||
579 | switch ( data.type ) { | ||
580 | case 'url': | ||
581 | var protocol = ( data.url && data.url.protocol !== undefined ) ? data.url.protocol : 'http://', | ||
582 | url = ( data.url && CKEDITOR.tools.trim( data.url.url ) ) || ''; | ||
583 | |||
584 | set[ 'data-cke-saved-href' ] = ( url.indexOf( '/' ) === 0 ) ? url : protocol + url; | ||
585 | |||
586 | break; | ||
587 | case 'anchor': | ||
588 | var name = ( data.anchor && data.anchor.name ), | ||
589 | id = ( data.anchor && data.anchor.id ); | ||
590 | |||
591 | set[ 'data-cke-saved-href' ] = '#' + ( name || id || '' ); | ||
592 | |||
593 | break; | ||
594 | case 'email': | ||
595 | var email = data.email, | ||
596 | address = email.address, | ||
597 | linkHref; | ||
598 | |||
599 | switch ( emailProtection ) { | ||
600 | case '': | ||
601 | case 'encode': | ||
602 | var subject = encodeURIComponent( email.subject || '' ), | ||
603 | body = encodeURIComponent( email.body || '' ), | ||
604 | argList = []; | ||
605 | |||
606 | // Build the e-mail parameters first. | ||
607 | subject && argList.push( 'subject=' + subject ); | ||
608 | body && argList.push( 'body=' + body ); | ||
609 | argList = argList.length ? '?' + argList.join( '&' ) : ''; | ||
610 | |||
611 | if ( emailProtection == 'encode' ) { | ||
612 | linkHref = [ | ||
613 | 'javascript:void(location.href=\'mailto:\'+', // jshint ignore:line | ||
614 | protectEmailAddressAsEncodedString( address ) | ||
615 | ]; | ||
616 | // parameters are optional. | ||
617 | argList && linkHref.push( '+\'', escapeSingleQuote( argList ), '\'' ); | ||
618 | |||
619 | linkHref.push( ')' ); | ||
620 | } else { | ||
621 | linkHref = [ 'mailto:', address, argList ]; | ||
622 | } | ||
623 | |||
624 | break; | ||
625 | default: | ||
626 | // Separating name and domain. | ||
627 | var nameAndDomain = address.split( '@', 2 ); | ||
628 | email.name = nameAndDomain[ 0 ]; | ||
629 | email.domain = nameAndDomain[ 1 ]; | ||
630 | |||
631 | linkHref = [ 'javascript:', protectEmailLinkAsFunction( editor, email ) ]; // jshint ignore:line | ||
632 | } | ||
633 | |||
634 | set[ 'data-cke-saved-href' ] = linkHref.join( '' ); | ||
635 | break; | ||
636 | } | ||
637 | |||
638 | // Popups and target. | ||
639 | if ( data.target ) { | ||
640 | if ( data.target.type == 'popup' ) { | ||
641 | var onclickList = [ | ||
642 | 'window.open(this.href, \'', data.target.name || '', '\', \'' | ||
643 | ], | ||
644 | featureList = [ | ||
645 | 'resizable', 'status', 'location', 'toolbar', 'menubar', 'fullscreen', 'scrollbars', 'dependent' | ||
646 | ], | ||
647 | featureLength = featureList.length, | ||
648 | addFeature = function( featureName ) { | ||
649 | if ( data.target[ featureName ] ) | ||
650 | featureList.push( featureName + '=' + data.target[ featureName ] ); | ||
651 | }; | ||
652 | |||
653 | for ( var i = 0; i < featureLength; i++ ) | ||
654 | featureList[ i ] = featureList[ i ] + ( data.target[ featureList[ i ] ] ? '=yes' : '=no' ); | ||
655 | |||
656 | addFeature( 'width' ); | ||
657 | addFeature( 'left' ); | ||
658 | addFeature( 'height' ); | ||
659 | addFeature( 'top' ); | ||
660 | |||
661 | onclickList.push( featureList.join( ',' ), '\'); return false;' ); | ||
662 | set[ 'data-cke-pa-onclick' ] = onclickList.join( '' ); | ||
663 | } | ||
664 | else if ( data.target.type != 'notSet' && data.target.name ) { | ||
665 | set.target = data.target.name; | ||
666 | } | ||
667 | } | ||
668 | |||
669 | // Advanced attributes. | ||
670 | if ( data.advanced ) { | ||
671 | for ( var a in advAttrNames ) { | ||
672 | var val = data.advanced[ advAttrNames[ a ] ]; | ||
673 | |||
674 | if ( val ) | ||
675 | set[ a ] = val; | ||
676 | } | ||
677 | |||
678 | if ( set.name ) | ||
679 | set[ 'data-cke-saved-name' ] = set.name; | ||
680 | } | ||
681 | |||
682 | // Browser need the "href" fro copy/paste link to work. (#6641) | ||
683 | if ( set[ 'data-cke-saved-href' ] ) | ||
684 | set.href = set[ 'data-cke-saved-href' ]; | ||
685 | |||
686 | var removed = { | ||
687 | target: 1, | ||
688 | onclick: 1, | ||
689 | 'data-cke-pa-onclick': 1, | ||
690 | 'data-cke-saved-name': 1 | ||
691 | }; | ||
692 | |||
693 | if ( data.advanced ) | ||
694 | CKEDITOR.tools.extend( removed, advAttrNames ); | ||
695 | |||
696 | // Remove all attributes which are not currently set. | ||
697 | for ( var s in set ) | ||
698 | delete removed[ s ]; | ||
699 | |||
700 | return { | ||
701 | set: set, | ||
702 | removed: CKEDITOR.tools.objectKeys( removed ) | ||
703 | }; | ||
704 | } | ||
705 | }; | ||
706 | |||
707 | // TODO Much probably there's no need to expose these as public objects. | ||
708 | |||
709 | CKEDITOR.unlinkCommand = function() {}; | ||
710 | CKEDITOR.unlinkCommand.prototype = { | ||
711 | exec: function( editor ) { | ||
712 | var style = new CKEDITOR.style( { element: 'a', type: CKEDITOR.STYLE_INLINE, alwaysRemoveElement: 1 } ); | ||
713 | editor.removeStyle( style ); | ||
714 | }, | ||
715 | |||
716 | refresh: function( editor, path ) { | ||
717 | // Despite our initial hope, document.queryCommandEnabled() does not work | ||
718 | // for this in Firefox. So we must detect the state by element paths. | ||
719 | |||
720 | var element = path.lastElement && path.lastElement.getAscendant( 'a', true ); | ||
721 | |||
722 | if ( element && element.getName() == 'a' && element.getAttribute( 'href' ) && element.getChildCount() ) | ||
723 | this.setState( CKEDITOR.TRISTATE_OFF ); | ||
724 | else | ||
725 | this.setState( CKEDITOR.TRISTATE_DISABLED ); | ||
726 | }, | ||
727 | |||
728 | contextSensitive: 1, | ||
729 | startDisabled: 1, | ||
730 | requiredContent: 'a[href]' | ||
731 | }; | ||
732 | |||
733 | CKEDITOR.removeAnchorCommand = function() {}; | ||
734 | CKEDITOR.removeAnchorCommand.prototype = { | ||
735 | exec: function( editor ) { | ||
736 | var sel = editor.getSelection(), | ||
737 | bms = sel.createBookmarks(), | ||
738 | anchor; | ||
739 | if ( sel && ( anchor = sel.getSelectedElement() ) && ( !anchor.getChildCount() ? CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, anchor ) : anchor.is( 'a' ) ) ) | ||
740 | anchor.remove( 1 ); | ||
741 | else { | ||
742 | if ( ( anchor = CKEDITOR.plugins.link.getSelectedLink( editor ) ) ) { | ||
743 | if ( anchor.hasAttribute( 'href' ) ) { | ||
744 | anchor.removeAttributes( { name: 1, 'data-cke-saved-name': 1 } ); | ||
745 | anchor.removeClass( 'cke_anchor' ); | ||
746 | } else { | ||
747 | anchor.remove( 1 ); | ||
748 | } | ||
749 | } | ||
750 | } | ||
751 | sel.selectBookmarks( bms ); | ||
752 | }, | ||
753 | requiredContent: 'a[name]' | ||
754 | }; | ||
755 | |||
756 | CKEDITOR.tools.extend( CKEDITOR.config, { | ||
757 | /** | ||
758 | * Whether to show the Advanced tab in the Link dialog window. | ||
759 | * | ||
760 | * @cfg {Boolean} [linkShowAdvancedTab=true] | ||
761 | * @member CKEDITOR.config | ||
762 | */ | ||
763 | linkShowAdvancedTab: true, | ||
764 | |||
765 | /** | ||
766 | * Whether to show the Target tab in the Link dialog window. | ||
767 | * | ||
768 | * @cfg {Boolean} [linkShowTargetTab=true] | ||
769 | * @member CKEDITOR.config | ||
770 | */ | ||
771 | linkShowTargetTab: true | ||
772 | |||
773 | /** | ||
774 | * Whether JavaScript code is allowed as a `href` attribute in an anchor tag. | ||
775 | * With this option enabled it is possible to create links like: | ||
776 | * | ||
777 | * <a href="javascript:alert('Hello world!')">hello world</a> | ||
778 | * | ||
779 | * By default JavaScript links are not allowed and will not pass | ||
780 | * the Link dialog window validation. | ||
781 | * | ||
782 | * @since 4.4.1 | ||
783 | * @cfg {Boolean} [linkJavaScriptLinksAllowed=false] | ||
784 | * @member CKEDITOR.config | ||
785 | */ | ||
786 | } ); | ||
787 | } )(); | ||
diff --git a/sources/plugins/list/icons/bulletedlist-rtl.png b/sources/plugins/list/icons/bulletedlist-rtl.png new file mode 100644 index 0000000..766814a --- /dev/null +++ b/sources/plugins/list/icons/bulletedlist-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/list/icons/bulletedlist.png b/sources/plugins/list/icons/bulletedlist.png new file mode 100644 index 0000000..e57ec7a --- /dev/null +++ b/sources/plugins/list/icons/bulletedlist.png | |||
Binary files differ | |||
diff --git a/sources/plugins/list/icons/hidpi/bulletedlist-rtl.png b/sources/plugins/list/icons/hidpi/bulletedlist-rtl.png new file mode 100644 index 0000000..50e3156 --- /dev/null +++ b/sources/plugins/list/icons/hidpi/bulletedlist-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/list/icons/hidpi/bulletedlist.png b/sources/plugins/list/icons/hidpi/bulletedlist.png new file mode 100644 index 0000000..00f84d0 --- /dev/null +++ b/sources/plugins/list/icons/hidpi/bulletedlist.png | |||
Binary files differ | |||
diff --git a/sources/plugins/list/icons/hidpi/numberedlist-rtl.png b/sources/plugins/list/icons/hidpi/numberedlist-rtl.png new file mode 100644 index 0000000..1dff87d --- /dev/null +++ b/sources/plugins/list/icons/hidpi/numberedlist-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/list/icons/hidpi/numberedlist.png b/sources/plugins/list/icons/hidpi/numberedlist.png new file mode 100644 index 0000000..c20b88f --- /dev/null +++ b/sources/plugins/list/icons/hidpi/numberedlist.png | |||
Binary files differ | |||
diff --git a/sources/plugins/list/icons/numberedlist-rtl.png b/sources/plugins/list/icons/numberedlist-rtl.png new file mode 100644 index 0000000..2c39858 --- /dev/null +++ b/sources/plugins/list/icons/numberedlist-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/list/icons/numberedlist.png b/sources/plugins/list/icons/numberedlist.png new file mode 100644 index 0000000..f509a85 --- /dev/null +++ b/sources/plugins/list/icons/numberedlist.png | |||
Binary files differ | |||
diff --git a/sources/plugins/list/lang/af.js b/sources/plugins/list/lang/af.js new file mode 100644 index 0000000..08284ee --- /dev/null +++ b/sources/plugins/list/lang/af.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'af', { | ||
6 | bulletedlist: 'Ongenommerde lys', | ||
7 | numberedlist: 'Genommerde lys' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/ar.js b/sources/plugins/list/lang/ar.js new file mode 100644 index 0000000..4166c77 --- /dev/null +++ b/sources/plugins/list/lang/ar.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'ar', { | ||
6 | bulletedlist: 'ادخال/حذف تعداد نقطي', | ||
7 | numberedlist: 'ادخال/حذف تعداد رقمي' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/bg.js b/sources/plugins/list/lang/bg.js new file mode 100644 index 0000000..919cb64 --- /dev/null +++ b/sources/plugins/list/lang/bg.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'bg', { | ||
6 | bulletedlist: 'Вмъкване/Премахване на точков списък', | ||
7 | numberedlist: 'Вмъкване/Премахване на номериран списък' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/bn.js b/sources/plugins/list/lang/bn.js new file mode 100644 index 0000000..3b0d4d9 --- /dev/null +++ b/sources/plugins/list/lang/bn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'bn', { | ||
6 | bulletedlist: 'বুলেট লিস্ট লেবেল', | ||
7 | numberedlist: 'সাংখ্যিক লিস্টের লেবেল' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/bs.js b/sources/plugins/list/lang/bs.js new file mode 100644 index 0000000..d32464e --- /dev/null +++ b/sources/plugins/list/lang/bs.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'bs', { | ||
6 | bulletedlist: 'Lista', | ||
7 | numberedlist: 'Numerisana lista' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/ca.js b/sources/plugins/list/lang/ca.js new file mode 100644 index 0000000..10df0a8 --- /dev/null +++ b/sources/plugins/list/lang/ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'ca', { | ||
6 | bulletedlist: 'Llista de pics', | ||
7 | numberedlist: 'Llista numerada' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/cs.js b/sources/plugins/list/lang/cs.js new file mode 100644 index 0000000..8df6494 --- /dev/null +++ b/sources/plugins/list/lang/cs.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'cs', { | ||
6 | bulletedlist: 'Odrážky', | ||
7 | numberedlist: 'Číslování' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/cy.js b/sources/plugins/list/lang/cy.js new file mode 100644 index 0000000..b8fbdd1 --- /dev/null +++ b/sources/plugins/list/lang/cy.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'cy', { | ||
6 | bulletedlist: 'Mewnosod/Tynnu Rhestr Bwled', | ||
7 | numberedlist: 'Mewnosod/Tynnu Rhestr Rhifol' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/da.js b/sources/plugins/list/lang/da.js new file mode 100644 index 0000000..9a54f9f --- /dev/null +++ b/sources/plugins/list/lang/da.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'da', { | ||
6 | bulletedlist: 'Punktopstilling', | ||
7 | numberedlist: 'Talopstilling' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/de-ch.js b/sources/plugins/list/lang/de-ch.js new file mode 100644 index 0000000..a7566fc --- /dev/null +++ b/sources/plugins/list/lang/de-ch.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'de-ch', { | ||
6 | bulletedlist: 'Liste', | ||
7 | numberedlist: 'Nummerierte Liste einfügen/entfernen' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/de.js b/sources/plugins/list/lang/de.js new file mode 100644 index 0000000..0ad08ae --- /dev/null +++ b/sources/plugins/list/lang/de.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'de', { | ||
6 | bulletedlist: 'Liste', | ||
7 | numberedlist: 'Nummerierte Liste einfügen/entfernen' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/el.js b/sources/plugins/list/lang/el.js new file mode 100644 index 0000000..248f10b --- /dev/null +++ b/sources/plugins/list/lang/el.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'el', { | ||
6 | bulletedlist: 'Εισαγωγή/Απομάκρυνση Λίστας Κουκκίδων', | ||
7 | numberedlist: 'Εισαγωγή/Απομάκρυνση Αριθμημένης Λίστας' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/en-au.js b/sources/plugins/list/lang/en-au.js new file mode 100644 index 0000000..3aa94b9 --- /dev/null +++ b/sources/plugins/list/lang/en-au.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'en-au', { | ||
6 | bulletedlist: 'Insert/Remove Bulleted List', | ||
7 | numberedlist: 'Insert/Remove Numbered List' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/en-ca.js b/sources/plugins/list/lang/en-ca.js new file mode 100644 index 0000000..8eee06d --- /dev/null +++ b/sources/plugins/list/lang/en-ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'en-ca', { | ||
6 | bulletedlist: 'Insert/Remove Bulleted List', | ||
7 | numberedlist: 'Insert/Remove Numbered List' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/en-gb.js b/sources/plugins/list/lang/en-gb.js new file mode 100644 index 0000000..7acd42a --- /dev/null +++ b/sources/plugins/list/lang/en-gb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'en-gb', { | ||
6 | bulletedlist: 'Insert/Remove Bulleted List', | ||
7 | numberedlist: 'Insert/Remove Numbered List' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/en.js b/sources/plugins/list/lang/en.js new file mode 100644 index 0000000..e88b212 --- /dev/null +++ b/sources/plugins/list/lang/en.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'en', { | ||
6 | bulletedlist: 'Insert/Remove Bulleted List', | ||
7 | numberedlist: 'Insert/Remove Numbered List' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/eo.js b/sources/plugins/list/lang/eo.js new file mode 100644 index 0000000..8b7ead0 --- /dev/null +++ b/sources/plugins/list/lang/eo.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'eo', { | ||
6 | bulletedlist: 'Bula Listo', | ||
7 | numberedlist: 'Numera Listo' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/es.js b/sources/plugins/list/lang/es.js new file mode 100644 index 0000000..f3c94a1 --- /dev/null +++ b/sources/plugins/list/lang/es.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'es', { | ||
6 | bulletedlist: 'Viñetas', | ||
7 | numberedlist: 'Numeración' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/et.js b/sources/plugins/list/lang/et.js new file mode 100644 index 0000000..fcfe125 --- /dev/null +++ b/sources/plugins/list/lang/et.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'et', { | ||
6 | bulletedlist: 'Punktloend', | ||
7 | numberedlist: 'Numberloend' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/eu.js b/sources/plugins/list/lang/eu.js new file mode 100644 index 0000000..7b96e14 --- /dev/null +++ b/sources/plugins/list/lang/eu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'eu', { | ||
6 | bulletedlist: 'Buletdun Zerrenda', | ||
7 | numberedlist: 'Zenbakidun Zerrenda' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/fa.js b/sources/plugins/list/lang/fa.js new file mode 100644 index 0000000..43d91ed --- /dev/null +++ b/sources/plugins/list/lang/fa.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'fa', { | ||
6 | bulletedlist: 'فهرست نقطهای', | ||
7 | numberedlist: 'فهرست شمارهدار' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/fi.js b/sources/plugins/list/lang/fi.js new file mode 100644 index 0000000..b80340f --- /dev/null +++ b/sources/plugins/list/lang/fi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'fi', { | ||
6 | bulletedlist: 'Luettelomerkit', | ||
7 | numberedlist: 'Numerointi' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/fo.js b/sources/plugins/list/lang/fo.js new file mode 100644 index 0000000..812fa3f --- /dev/null +++ b/sources/plugins/list/lang/fo.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'fo', { | ||
6 | bulletedlist: 'Punktmerktur listi', | ||
7 | numberedlist: 'Talmerktur listi' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/fr-ca.js b/sources/plugins/list/lang/fr-ca.js new file mode 100644 index 0000000..f7bb322 --- /dev/null +++ b/sources/plugins/list/lang/fr-ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'fr-ca', { | ||
6 | bulletedlist: 'Liste à puces', | ||
7 | numberedlist: 'Liste numérotée' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/fr.js b/sources/plugins/list/lang/fr.js new file mode 100644 index 0000000..f559f97 --- /dev/null +++ b/sources/plugins/list/lang/fr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'fr', { | ||
6 | bulletedlist: 'Insérer/Supprimer la liste à puces', | ||
7 | numberedlist: 'Insérer/Supprimer la liste numérotée' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/gl.js b/sources/plugins/list/lang/gl.js new file mode 100644 index 0000000..d89d402 --- /dev/null +++ b/sources/plugins/list/lang/gl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'gl', { | ||
6 | bulletedlist: 'Inserir/retirar lista viñeteada', | ||
7 | numberedlist: 'Inserir/retirar lista numerada' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/gu.js b/sources/plugins/list/lang/gu.js new file mode 100644 index 0000000..8381217 --- /dev/null +++ b/sources/plugins/list/lang/gu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'gu', { | ||
6 | bulletedlist: 'બુલેટ સૂચિ', | ||
7 | numberedlist: 'સંખ્યાંકન સૂચિ' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/he.js b/sources/plugins/list/lang/he.js new file mode 100644 index 0000000..2c0f892 --- /dev/null +++ b/sources/plugins/list/lang/he.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'he', { | ||
6 | bulletedlist: 'רשימת נקודות', | ||
7 | numberedlist: 'רשימה ממוספרת' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/hi.js b/sources/plugins/list/lang/hi.js new file mode 100644 index 0000000..6bf594d --- /dev/null +++ b/sources/plugins/list/lang/hi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'hi', { | ||
6 | bulletedlist: 'बुलॅट सूची', | ||
7 | numberedlist: 'अंकीय सूची' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/hr.js b/sources/plugins/list/lang/hr.js new file mode 100644 index 0000000..5df25cc --- /dev/null +++ b/sources/plugins/list/lang/hr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'hr', { | ||
6 | bulletedlist: 'Obična lista', | ||
7 | numberedlist: 'Brojčana lista' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/hu.js b/sources/plugins/list/lang/hu.js new file mode 100644 index 0000000..39b40db --- /dev/null +++ b/sources/plugins/list/lang/hu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'hu', { | ||
6 | bulletedlist: 'Felsorolás', | ||
7 | numberedlist: 'Számozás' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/id.js b/sources/plugins/list/lang/id.js new file mode 100644 index 0000000..def3199 --- /dev/null +++ b/sources/plugins/list/lang/id.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'id', { | ||
6 | bulletedlist: 'Sisip/Hapus Daftar Bullet', | ||
7 | numberedlist: 'Sisip/Hapus Daftar Bernomor' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/is.js b/sources/plugins/list/lang/is.js new file mode 100644 index 0000000..ea4ac73 --- /dev/null +++ b/sources/plugins/list/lang/is.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'is', { | ||
6 | bulletedlist: 'Punktalisti', | ||
7 | numberedlist: 'Númeraður listi' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/it.js b/sources/plugins/list/lang/it.js new file mode 100644 index 0000000..1a3c53b --- /dev/null +++ b/sources/plugins/list/lang/it.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'it', { | ||
6 | bulletedlist: 'Inserisci/Rimuovi Elenco Puntato', | ||
7 | numberedlist: 'Inserisci/Rimuovi Elenco Numerato' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/ja.js b/sources/plugins/list/lang/ja.js new file mode 100644 index 0000000..3d5b448 --- /dev/null +++ b/sources/plugins/list/lang/ja.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'ja', { | ||
6 | bulletedlist: '番号無しリスト', | ||
7 | numberedlist: '番号付きリスト' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/ka.js b/sources/plugins/list/lang/ka.js new file mode 100644 index 0000000..e5c1a3b --- /dev/null +++ b/sources/plugins/list/lang/ka.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'ka', { | ||
6 | bulletedlist: 'ღილიანი სია', | ||
7 | numberedlist: 'გადანომრილი სია' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/km.js b/sources/plugins/list/lang/km.js new file mode 100644 index 0000000..4df9646 --- /dev/null +++ b/sources/plugins/list/lang/km.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'km', { | ||
6 | bulletedlist: 'បញ្ចូល / លុបបញ្ជីជាចំណុចមូល', | ||
7 | numberedlist: 'បញ្ចូល / លុបបញ្ជីជាលេខ' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/ko.js b/sources/plugins/list/lang/ko.js new file mode 100644 index 0000000..73deb19 --- /dev/null +++ b/sources/plugins/list/lang/ko.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'ko', { | ||
6 | bulletedlist: '순서 없는 목록', | ||
7 | numberedlist: '순서 있는 목록' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/ku.js b/sources/plugins/list/lang/ku.js new file mode 100644 index 0000000..585373f --- /dev/null +++ b/sources/plugins/list/lang/ku.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'ku', { | ||
6 | bulletedlist: 'دانان/لابردنی خاڵی لیست', | ||
7 | numberedlist: 'دانان/لابردنی ژمارەی لیست' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/lt.js b/sources/plugins/list/lang/lt.js new file mode 100644 index 0000000..820bde9 --- /dev/null +++ b/sources/plugins/list/lang/lt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'lt', { | ||
6 | bulletedlist: 'Suženklintas sąrašas', | ||
7 | numberedlist: 'Numeruotas sąrašas' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/lv.js b/sources/plugins/list/lang/lv.js new file mode 100644 index 0000000..062effc --- /dev/null +++ b/sources/plugins/list/lang/lv.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'lv', { | ||
6 | bulletedlist: 'Pievienot/Noņemt vienkāršu sarakstu', | ||
7 | numberedlist: 'Numurēts saraksts' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/mk.js b/sources/plugins/list/lang/mk.js new file mode 100644 index 0000000..4fa9e4d --- /dev/null +++ b/sources/plugins/list/lang/mk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'mk', { | ||
6 | bulletedlist: 'Insert/Remove Bulleted List', // MISSING | ||
7 | numberedlist: 'Insert/Remove Numbered List' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/mn.js b/sources/plugins/list/lang/mn.js new file mode 100644 index 0000000..b12f230 --- /dev/null +++ b/sources/plugins/list/lang/mn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'mn', { | ||
6 | bulletedlist: 'Цэгтэй жагсаалт', | ||
7 | numberedlist: 'Дугаарлагдсан жагсаалт' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/ms.js b/sources/plugins/list/lang/ms.js new file mode 100644 index 0000000..1ebba10 --- /dev/null +++ b/sources/plugins/list/lang/ms.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'ms', { | ||
6 | bulletedlist: 'Senarai tidak bernombor', | ||
7 | numberedlist: 'Senarai bernombor' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/nb.js b/sources/plugins/list/lang/nb.js new file mode 100644 index 0000000..1e96a9f --- /dev/null +++ b/sources/plugins/list/lang/nb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'nb', { | ||
6 | bulletedlist: 'Legg til / fjern punktmerket liste', | ||
7 | numberedlist: 'Legg til / fjern nummerert liste' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/nl.js b/sources/plugins/list/lang/nl.js new file mode 100644 index 0000000..49aeedf --- /dev/null +++ b/sources/plugins/list/lang/nl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'nl', { | ||
6 | bulletedlist: 'Opsomming invoegen', | ||
7 | numberedlist: 'Genummerde lijst invoegen' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/no.js b/sources/plugins/list/lang/no.js new file mode 100644 index 0000000..c2794c0 --- /dev/null +++ b/sources/plugins/list/lang/no.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'no', { | ||
6 | bulletedlist: 'Legg til/Fjern punktmerket liste', | ||
7 | numberedlist: 'Legg til/Fjern nummerert liste' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/pl.js b/sources/plugins/list/lang/pl.js new file mode 100644 index 0000000..c95238e --- /dev/null +++ b/sources/plugins/list/lang/pl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'pl', { | ||
6 | bulletedlist: 'Lista wypunktowana', | ||
7 | numberedlist: 'Lista numerowana' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/pt-br.js b/sources/plugins/list/lang/pt-br.js new file mode 100644 index 0000000..47faf0c --- /dev/null +++ b/sources/plugins/list/lang/pt-br.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'pt-br', { | ||
6 | bulletedlist: 'Lista sem números', | ||
7 | numberedlist: 'Lista numerada' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/pt.js b/sources/plugins/list/lang/pt.js new file mode 100644 index 0000000..36c8be8 --- /dev/null +++ b/sources/plugins/list/lang/pt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'pt', { | ||
6 | bulletedlist: 'Marcas', | ||
7 | numberedlist: 'Numeração' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/ro.js b/sources/plugins/list/lang/ro.js new file mode 100644 index 0000000..ae66ff3 --- /dev/null +++ b/sources/plugins/list/lang/ro.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'ro', { | ||
6 | bulletedlist: 'Inserează / Elimină Listă cu puncte', | ||
7 | numberedlist: 'Inserează / Elimină Listă numerotată' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/ru.js b/sources/plugins/list/lang/ru.js new file mode 100644 index 0000000..293ecbd --- /dev/null +++ b/sources/plugins/list/lang/ru.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'ru', { | ||
6 | bulletedlist: 'Вставить / удалить маркированный список', | ||
7 | numberedlist: 'Вставить / удалить нумерованный список' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/si.js b/sources/plugins/list/lang/si.js new file mode 100644 index 0000000..02566bc --- /dev/null +++ b/sources/plugins/list/lang/si.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'si', { | ||
6 | bulletedlist: 'ඇතුලත් / ඉවත් කිරීම ලඉස්තුව', | ||
7 | numberedlist: 'ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/sk.js b/sources/plugins/list/lang/sk.js new file mode 100644 index 0000000..4621b15 --- /dev/null +++ b/sources/plugins/list/lang/sk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'sk', { | ||
6 | bulletedlist: 'Vložiť/odstrániť zoznam s odrážkami', | ||
7 | numberedlist: 'Vložiť/odstrániť číslovaný zoznam' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/sl.js b/sources/plugins/list/lang/sl.js new file mode 100644 index 0000000..40c1d8d --- /dev/null +++ b/sources/plugins/list/lang/sl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'sl', { | ||
6 | bulletedlist: 'Označen seznam', | ||
7 | numberedlist: 'Oštevilčen seznam' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/sq.js b/sources/plugins/list/lang/sq.js new file mode 100644 index 0000000..d63dab0 --- /dev/null +++ b/sources/plugins/list/lang/sq.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'sq', { | ||
6 | bulletedlist: 'Vendos/Largo Listën me Pika', | ||
7 | numberedlist: 'Vendos/Largo Listën me Numra' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/sr-latn.js b/sources/plugins/list/lang/sr-latn.js new file mode 100644 index 0000000..990fd21 --- /dev/null +++ b/sources/plugins/list/lang/sr-latn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'sr-latn', { | ||
6 | bulletedlist: 'Nenabrojiva lista', | ||
7 | numberedlist: 'Nabrojiva lista' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/sr.js b/sources/plugins/list/lang/sr.js new file mode 100644 index 0000000..5853621 --- /dev/null +++ b/sources/plugins/list/lang/sr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'sr', { | ||
6 | bulletedlist: 'Ненабројива листа', | ||
7 | numberedlist: 'Набројиву листу' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/sv.js b/sources/plugins/list/lang/sv.js new file mode 100644 index 0000000..fa93ade --- /dev/null +++ b/sources/plugins/list/lang/sv.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'sv', { | ||
6 | bulletedlist: 'Infoga/ta bort punktlista', | ||
7 | numberedlist: 'Infoga/ta bort numrerad lista' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/th.js b/sources/plugins/list/lang/th.js new file mode 100644 index 0000000..fa84203 --- /dev/null +++ b/sources/plugins/list/lang/th.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'th', { | ||
6 | bulletedlist: 'ลำดับรายการแบบสัญลักษณ์', | ||
7 | numberedlist: 'ลำดับรายการแบบตัวเลข' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/tr.js b/sources/plugins/list/lang/tr.js new file mode 100644 index 0000000..8e8d925 --- /dev/null +++ b/sources/plugins/list/lang/tr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'tr', { | ||
6 | bulletedlist: 'Simgeli Liste', | ||
7 | numberedlist: 'Numaralı Liste' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/tt.js b/sources/plugins/list/lang/tt.js new file mode 100644 index 0000000..2c5da84 --- /dev/null +++ b/sources/plugins/list/lang/tt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'tt', { | ||
6 | bulletedlist: 'Маркерлы тезмә өстәү/бетерү', | ||
7 | numberedlist: ' Номерланган тезмә өстәү/бетерү' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/ug.js b/sources/plugins/list/lang/ug.js new file mode 100644 index 0000000..5323bee --- /dev/null +++ b/sources/plugins/list/lang/ug.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'ug', { | ||
6 | bulletedlist: 'تۈر بەلگە تىزىمى', | ||
7 | numberedlist: 'تەرتىپ نومۇر تىزىمى' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/uk.js b/sources/plugins/list/lang/uk.js new file mode 100644 index 0000000..5ee50a7 --- /dev/null +++ b/sources/plugins/list/lang/uk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'uk', { | ||
6 | bulletedlist: 'Маркірований список', | ||
7 | numberedlist: 'Нумерований список' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/vi.js b/sources/plugins/list/lang/vi.js new file mode 100644 index 0000000..506567e --- /dev/null +++ b/sources/plugins/list/lang/vi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'vi', { | ||
6 | bulletedlist: 'Chèn/Xoá Danh sách không thứ tự', | ||
7 | numberedlist: 'Chèn/Xoá Danh sách có thứ tự' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/zh-cn.js b/sources/plugins/list/lang/zh-cn.js new file mode 100644 index 0000000..9eb185f --- /dev/null +++ b/sources/plugins/list/lang/zh-cn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'zh-cn', { | ||
6 | bulletedlist: '项目列表', | ||
7 | numberedlist: '编号列表' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/lang/zh.js b/sources/plugins/list/lang/zh.js new file mode 100644 index 0000000..ae02b93 --- /dev/null +++ b/sources/plugins/list/lang/zh.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'list', 'zh', { | ||
6 | bulletedlist: '插入/移除項目符號清單', | ||
7 | numberedlist: '插入/移除編號清單清單' | ||
8 | } ); | ||
diff --git a/sources/plugins/list/plugin.js b/sources/plugins/list/plugin.js new file mode 100644 index 0000000..68b4f02 --- /dev/null +++ b/sources/plugins/list/plugin.js | |||
@@ -0,0 +1,1111 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview Insert and remove numbered and bulleted lists. | ||
8 | */ | ||
9 | |||
10 | ( function() { | ||
11 | var listNodeNames = { ol: 1, ul: 1 }; | ||
12 | |||
13 | var whitespaces = CKEDITOR.dom.walker.whitespaces(), | ||
14 | bookmarks = CKEDITOR.dom.walker.bookmark(), | ||
15 | nonEmpty = function( node ) { | ||
16 | return !( whitespaces( node ) || bookmarks( node ) ); | ||
17 | }, | ||
18 | blockBogus = CKEDITOR.dom.walker.bogus(); | ||
19 | |||
20 | function cleanUpDirection( element ) { | ||
21 | var dir, parent, parentDir; | ||
22 | if ( ( dir = element.getDirection() ) ) { | ||
23 | parent = element.getParent(); | ||
24 | while ( parent && !( parentDir = parent.getDirection() ) ) | ||
25 | parent = parent.getParent(); | ||
26 | |||
27 | if ( dir == parentDir ) | ||
28 | element.removeAttribute( 'dir' ); | ||
29 | } | ||
30 | } | ||
31 | |||
32 | // Inherit inline styles from another element. | ||
33 | function inheritInlineStyles( parent, el ) { | ||
34 | var style = parent.getAttribute( 'style' ); | ||
35 | |||
36 | // Put parent styles before child styles. | ||
37 | style && el.setAttribute( 'style', style.replace( /([^;])$/, '$1;' ) + ( el.getAttribute( 'style' ) || '' ) ); | ||
38 | } | ||
39 | |||
40 | CKEDITOR.plugins.list = { | ||
41 | /** | ||
42 | * Convert a DOM list tree into a data structure that is easier to | ||
43 | * manipulate. This operation should be non-intrusive in the sense that it | ||
44 | * does not change the DOM tree, with the exception that it may add some | ||
45 | * markers to the list item nodes when database is specified. | ||
46 | * | ||
47 | * @member CKEDITOR.plugins.list | ||
48 | * @todo params | ||
49 | */ | ||
50 | listToArray: function( listNode, database, baseArray, baseIndentLevel, grandparentNode ) { | ||
51 | if ( !listNodeNames[ listNode.getName() ] ) | ||
52 | return []; | ||
53 | |||
54 | if ( !baseIndentLevel ) | ||
55 | baseIndentLevel = 0; | ||
56 | if ( !baseArray ) | ||
57 | baseArray = []; | ||
58 | |||
59 | // Iterate over all list items to and look for inner lists. | ||
60 | for ( var i = 0, count = listNode.getChildCount(); i < count; i++ ) { | ||
61 | var listItem = listNode.getChild( i ); | ||
62 | |||
63 | // Fixing malformed nested lists by moving it into a previous list item. (#6236) | ||
64 | if ( listItem.type == CKEDITOR.NODE_ELEMENT && listItem.getName() in CKEDITOR.dtd.$list ) | ||
65 | CKEDITOR.plugins.list.listToArray( listItem, database, baseArray, baseIndentLevel + 1 ); | ||
66 | |||
67 | // It may be a text node or some funny stuff. | ||
68 | if ( listItem.$.nodeName.toLowerCase() != 'li' ) | ||
69 | continue; | ||
70 | |||
71 | var itemObj = { 'parent': listNode, indent: baseIndentLevel, element: listItem, contents: [] }; | ||
72 | if ( !grandparentNode ) { | ||
73 | itemObj.grandparent = listNode.getParent(); | ||
74 | if ( itemObj.grandparent && itemObj.grandparent.$.nodeName.toLowerCase() == 'li' ) | ||
75 | itemObj.grandparent = itemObj.grandparent.getParent(); | ||
76 | } else { | ||
77 | itemObj.grandparent = grandparentNode; | ||
78 | } | ||
79 | |||
80 | if ( database ) | ||
81 | CKEDITOR.dom.element.setMarker( database, listItem, 'listarray_index', baseArray.length ); | ||
82 | baseArray.push( itemObj ); | ||
83 | |||
84 | for ( var j = 0, itemChildCount = listItem.getChildCount(), child; j < itemChildCount; j++ ) { | ||
85 | child = listItem.getChild( j ); | ||
86 | if ( child.type == CKEDITOR.NODE_ELEMENT && listNodeNames[ child.getName() ] ) | ||
87 | // Note the recursion here, it pushes inner list items with | ||
88 | // +1 indentation in the correct order. | ||
89 | CKEDITOR.plugins.list.listToArray( child, database, baseArray, baseIndentLevel + 1, itemObj.grandparent ); | ||
90 | else | ||
91 | itemObj.contents.push( child ); | ||
92 | } | ||
93 | } | ||
94 | return baseArray; | ||
95 | }, | ||
96 | |||
97 | /** | ||
98 | * Convert our internal representation of a list back to a DOM forest. | ||
99 | * | ||
100 | * @member CKEDITOR.plugins.list | ||
101 | * @todo params | ||
102 | */ | ||
103 | arrayToList: function( listArray, database, baseIndex, paragraphMode, dir ) { | ||
104 | if ( !baseIndex ) | ||
105 | baseIndex = 0; | ||
106 | if ( !listArray || listArray.length < baseIndex + 1 ) | ||
107 | return null; | ||
108 | |||
109 | var i, | ||
110 | doc = listArray[ baseIndex ].parent.getDocument(), | ||
111 | retval = new CKEDITOR.dom.documentFragment( doc ), | ||
112 | rootNode = null, | ||
113 | currentIndex = baseIndex, | ||
114 | indentLevel = Math.max( listArray[ baseIndex ].indent, 0 ), | ||
115 | currentListItem = null, | ||
116 | orgDir, block, | ||
117 | paragraphName = ( paragraphMode == CKEDITOR.ENTER_P ? 'p' : 'div' ); | ||
118 | |||
119 | while ( 1 ) { | ||
120 | var item = listArray[ currentIndex ], | ||
121 | itemGrandParent = item.grandparent; | ||
122 | |||
123 | orgDir = item.element.getDirection( 1 ); | ||
124 | |||
125 | if ( item.indent == indentLevel ) { | ||
126 | if ( !rootNode || listArray[ currentIndex ].parent.getName() != rootNode.getName() ) { | ||
127 | rootNode = listArray[ currentIndex ].parent.clone( false, 1 ); | ||
128 | dir && rootNode.setAttribute( 'dir', dir ); | ||
129 | retval.append( rootNode ); | ||
130 | } | ||
131 | currentListItem = rootNode.append( item.element.clone( 0, 1 ) ); | ||
132 | |||
133 | if ( orgDir != rootNode.getDirection( 1 ) ) | ||
134 | currentListItem.setAttribute( 'dir', orgDir ); | ||
135 | |||
136 | for ( i = 0; i < item.contents.length; i++ ) | ||
137 | currentListItem.append( item.contents[ i ].clone( 1, 1 ) ); | ||
138 | currentIndex++; | ||
139 | } else if ( item.indent == Math.max( indentLevel, 0 ) + 1 ) { | ||
140 | // Maintain original direction (#6861). | ||
141 | var currDir = listArray[ currentIndex - 1 ].element.getDirection( 1 ), | ||
142 | listData = CKEDITOR.plugins.list.arrayToList( listArray, null, currentIndex, paragraphMode, currDir != orgDir ? orgDir : null ); | ||
143 | |||
144 | // If the next block is an <li> with another list tree as the first | ||
145 | // child, we'll need to append a filler (<br>/NBSP) or the list item | ||
146 | // wouldn't be editable. (#6724) | ||
147 | if ( !currentListItem.getChildCount() && CKEDITOR.env.needsNbspFiller && doc.$.documentMode <= 7 ) | ||
148 | currentListItem.append( doc.createText( '\xa0' ) ); | ||
149 | currentListItem.append( listData.listNode ); | ||
150 | currentIndex = listData.nextIndex; | ||
151 | } else if ( item.indent == -1 && !baseIndex && itemGrandParent ) { | ||
152 | if ( listNodeNames[ itemGrandParent.getName() ] ) { | ||
153 | currentListItem = item.element.clone( false, true ); | ||
154 | if ( orgDir != itemGrandParent.getDirection( 1 ) ) | ||
155 | currentListItem.setAttribute( 'dir', orgDir ); | ||
156 | } else { | ||
157 | currentListItem = new CKEDITOR.dom.documentFragment( doc ); | ||
158 | } | ||
159 | |||
160 | // Migrate all children to the new container, | ||
161 | // apply the proper text direction. | ||
162 | var dirLoose = itemGrandParent.getDirection( 1 ) != orgDir, | ||
163 | li = item.element, | ||
164 | className = li.getAttribute( 'class' ), | ||
165 | style = li.getAttribute( 'style' ); | ||
166 | |||
167 | var needsBlock = currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && ( paragraphMode != CKEDITOR.ENTER_BR || dirLoose || style || className ); | ||
168 | |||
169 | var child, | ||
170 | count = item.contents.length, | ||
171 | cachedBookmark; | ||
172 | |||
173 | for ( i = 0; i < count; i++ ) { | ||
174 | child = item.contents[ i ]; | ||
175 | |||
176 | // Append bookmark if we can, or cache it and append it when we'll know | ||
177 | // what to do with it. Generally - we want to keep it next to its original neighbour. | ||
178 | // Exception: if bookmark is the only child it hasn't got any neighbour, so handle it normally | ||
179 | // (wrap with block if needed). | ||
180 | if ( bookmarks( child ) && count > 1 ) { | ||
181 | // If we don't need block, it's simple - append bookmark directly to the current list item. | ||
182 | if ( !needsBlock ) | ||
183 | currentListItem.append( child.clone( 1, 1 ) ); | ||
184 | else | ||
185 | cachedBookmark = child.clone( 1, 1 ); | ||
186 | } | ||
187 | // Block content goes directly to the current list item, without wrapping. | ||
188 | else if ( child.type == CKEDITOR.NODE_ELEMENT && child.isBlockBoundary() ) { | ||
189 | // Apply direction on content blocks. | ||
190 | if ( dirLoose && !child.getDirection() ) | ||
191 | child.setAttribute( 'dir', orgDir ); | ||
192 | |||
193 | inheritInlineStyles( li, child ); | ||
194 | |||
195 | className && child.addClass( className ); | ||
196 | |||
197 | // Close the block which we started for inline content. | ||
198 | block = null; | ||
199 | // Append bookmark directly before current child. | ||
200 | if ( cachedBookmark ) { | ||
201 | currentListItem.append( cachedBookmark ); | ||
202 | cachedBookmark = null; | ||
203 | } | ||
204 | // Append this block element to the list item. | ||
205 | currentListItem.append( child.clone( 1, 1 ) ); | ||
206 | } | ||
207 | // Some inline content was found - wrap it with block and append that | ||
208 | // block to the current list item or append it to the block previously created. | ||
209 | else if ( needsBlock ) { | ||
210 | // Establish new block to hold text direction and styles. | ||
211 | if ( !block ) { | ||
212 | block = doc.createElement( paragraphName ); | ||
213 | currentListItem.append( block ); | ||
214 | dirLoose && block.setAttribute( 'dir', orgDir ); | ||
215 | } | ||
216 | |||
217 | // Copy over styles to new block; | ||
218 | style && block.setAttribute( 'style', style ); | ||
219 | className && block.setAttribute( 'class', className ); | ||
220 | |||
221 | // Append bookmark directly before current child. | ||
222 | if ( cachedBookmark ) { | ||
223 | block.append( cachedBookmark ); | ||
224 | cachedBookmark = null; | ||
225 | } | ||
226 | block.append( child.clone( 1, 1 ) ); | ||
227 | } | ||
228 | // E.g. BR mode - inline content appended directly to the list item. | ||
229 | else { | ||
230 | currentListItem.append( child.clone( 1, 1 ) ); | ||
231 | } | ||
232 | } | ||
233 | |||
234 | // No content after bookmark - append it to the block if we had one | ||
235 | // or directly to the current list item if we finished directly in the current list item. | ||
236 | if ( cachedBookmark ) { | ||
237 | ( block || currentListItem ).append( cachedBookmark ); | ||
238 | cachedBookmark = null; | ||
239 | } | ||
240 | |||
241 | if ( currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && currentIndex != listArray.length - 1 ) { | ||
242 | var last; | ||
243 | |||
244 | // Remove bogus <br> if this browser uses them. | ||
245 | if ( CKEDITOR.env.needsBrFiller ) { | ||
246 | last = currentListItem.getLast(); | ||
247 | if ( last && last.type == CKEDITOR.NODE_ELEMENT && last.is( 'br' ) ) | ||
248 | last.remove(); | ||
249 | } | ||
250 | |||
251 | // If the last element is not a block, append <br> to separate merged list items. | ||
252 | last = currentListItem.getLast( nonEmpty ); | ||
253 | if ( !( last && last.type == CKEDITOR.NODE_ELEMENT && last.is( CKEDITOR.dtd.$block ) ) ) | ||
254 | currentListItem.append( doc.createElement( 'br' ) ); | ||
255 | } | ||
256 | |||
257 | var currentListItemName = currentListItem.$.nodeName.toLowerCase(); | ||
258 | if ( currentListItemName == 'div' || currentListItemName == 'p' ) { | ||
259 | currentListItem.appendBogus(); | ||
260 | } | ||
261 | retval.append( currentListItem ); | ||
262 | rootNode = null; | ||
263 | currentIndex++; | ||
264 | } else { | ||
265 | return null; | ||
266 | } | ||
267 | |||
268 | block = null; | ||
269 | |||
270 | if ( listArray.length <= currentIndex || Math.max( listArray[ currentIndex ].indent, 0 ) < indentLevel ) | ||
271 | break; | ||
272 | } | ||
273 | |||
274 | if ( database ) { | ||
275 | var currentNode = retval.getFirst(); | ||
276 | |||
277 | while ( currentNode ) { | ||
278 | if ( currentNode.type == CKEDITOR.NODE_ELEMENT ) { | ||
279 | // Clear marker attributes for the new list tree made of cloned nodes, if any. | ||
280 | CKEDITOR.dom.element.clearMarkers( database, currentNode ); | ||
281 | |||
282 | // Clear redundant direction attribute specified on list items. | ||
283 | if ( currentNode.getName() in CKEDITOR.dtd.$listItem ) | ||
284 | cleanUpDirection( currentNode ); | ||
285 | } | ||
286 | |||
287 | currentNode = currentNode.getNextSourceNode(); | ||
288 | } | ||
289 | } | ||
290 | |||
291 | return { listNode: retval, nextIndex: currentIndex }; | ||
292 | } | ||
293 | }; | ||
294 | |||
295 | function changeListType( editor, groupObj, database, listsCreated ) { | ||
296 | // This case is easy... | ||
297 | // 1. Convert the whole list into a one-dimensional array. | ||
298 | // 2. Change the list type by modifying the array. | ||
299 | // 3. Recreate the whole list by converting the array to a list. | ||
300 | // 4. Replace the original list with the recreated list. | ||
301 | var listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ), | ||
302 | selectedListItems = []; | ||
303 | |||
304 | for ( var i = 0; i < groupObj.contents.length; i++ ) { | ||
305 | var itemNode = groupObj.contents[ i ]; | ||
306 | itemNode = itemNode.getAscendant( 'li', true ); | ||
307 | if ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) ) | ||
308 | continue; | ||
309 | selectedListItems.push( itemNode ); | ||
310 | CKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true ); | ||
311 | } | ||
312 | |||
313 | var root = groupObj.root, | ||
314 | doc = root.getDocument(), | ||
315 | listNode, newListNode; | ||
316 | |||
317 | for ( i = 0; i < selectedListItems.length; i++ ) { | ||
318 | var listIndex = selectedListItems[ i ].getCustomData( 'listarray_index' ); | ||
319 | listNode = listArray[ listIndex ].parent; | ||
320 | |||
321 | // Switch to new list node for this particular item. | ||
322 | if ( !listNode.is( this.type ) ) { | ||
323 | newListNode = doc.createElement( this.type ); | ||
324 | // Copy all attributes, except from 'start' and 'type'. | ||
325 | listNode.copyAttributes( newListNode, { start: 1, type: 1 } ); | ||
326 | // The list-style-type property should be ignored. | ||
327 | newListNode.removeStyle( 'list-style-type' ); | ||
328 | listArray[ listIndex ].parent = newListNode; | ||
329 | } | ||
330 | } | ||
331 | |||
332 | var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode ); | ||
333 | var child, | ||
334 | length = newList.listNode.getChildCount(); | ||
335 | for ( i = 0; i < length && ( child = newList.listNode.getChild( i ) ); i++ ) { | ||
336 | if ( child.getName() == this.type ) | ||
337 | listsCreated.push( child ); | ||
338 | } | ||
339 | newList.listNode.replace( groupObj.root ); | ||
340 | |||
341 | editor.fire( 'contentDomInvalidated' ); | ||
342 | } | ||
343 | |||
344 | function createList( editor, groupObj, listsCreated ) { | ||
345 | var contents = groupObj.contents, | ||
346 | doc = groupObj.root.getDocument(), | ||
347 | listContents = []; | ||
348 | |||
349 | // It is possible to have the contents returned by DomRangeIterator to be the same as the root. | ||
350 | // e.g. when we're running into table cells. | ||
351 | // In such a case, enclose the childNodes of contents[0] into a <div>. | ||
352 | if ( contents.length == 1 && contents[ 0 ].equals( groupObj.root ) ) { | ||
353 | var divBlock = doc.createElement( 'div' ); | ||
354 | contents[ 0 ].moveChildren && contents[ 0 ].moveChildren( divBlock ); | ||
355 | contents[ 0 ].append( divBlock ); | ||
356 | contents[ 0 ] = divBlock; | ||
357 | } | ||
358 | |||
359 | // Calculate the common parent node of all content blocks. | ||
360 | var commonParent = groupObj.contents[ 0 ].getParent(); | ||
361 | for ( var i = 0; i < contents.length; i++ ) | ||
362 | commonParent = commonParent.getCommonAncestor( contents[ i ].getParent() ); | ||
363 | |||
364 | var useComputedState = editor.config.useComputedState, | ||
365 | listDir, explicitDirection; | ||
366 | |||
367 | useComputedState = useComputedState === undefined || useComputedState; | ||
368 | |||
369 | // We want to insert things that are in the same tree level only, so calculate the contents again | ||
370 | // by expanding the selected blocks to the same tree level. | ||
371 | for ( i = 0; i < contents.length; i++ ) { | ||
372 | var contentNode = contents[ i ], | ||
373 | parentNode; | ||
374 | while ( ( parentNode = contentNode.getParent() ) ) { | ||
375 | if ( parentNode.equals( commonParent ) ) { | ||
376 | listContents.push( contentNode ); | ||
377 | |||
378 | // Determine the lists's direction. | ||
379 | if ( !explicitDirection && contentNode.getDirection() ) | ||
380 | explicitDirection = 1; | ||
381 | |||
382 | var itemDir = contentNode.getDirection( useComputedState ); | ||
383 | |||
384 | if ( listDir !== null ) { | ||
385 | // If at least one LI have a different direction than current listDir, we can't have listDir. | ||
386 | if ( listDir && listDir != itemDir ) | ||
387 | listDir = null; | ||
388 | else | ||
389 | listDir = itemDir; | ||
390 | } | ||
391 | |||
392 | break; | ||
393 | } | ||
394 | contentNode = parentNode; | ||
395 | } | ||
396 | } | ||
397 | |||
398 | if ( listContents.length < 1 ) | ||
399 | return; | ||
400 | |||
401 | // Insert the list to the DOM tree. | ||
402 | var insertAnchor = listContents[ listContents.length - 1 ].getNext(), | ||
403 | listNode = doc.createElement( this.type ); | ||
404 | |||
405 | listsCreated.push( listNode ); | ||
406 | |||
407 | var contentBlock, listItem; | ||
408 | |||
409 | while ( listContents.length ) { | ||
410 | contentBlock = listContents.shift(); | ||
411 | listItem = doc.createElement( 'li' ); | ||
412 | |||
413 | // If current block should be preserved, append it to list item instead of | ||
414 | // transforming it to <li> element. | ||
415 | if ( shouldPreserveBlock( contentBlock ) ) | ||
416 | contentBlock.appendTo( listItem ); | ||
417 | else { | ||
418 | contentBlock.copyAttributes( listItem ); | ||
419 | // Remove direction attribute after it was merged into list root. (#7657) | ||
420 | if ( listDir && contentBlock.getDirection() ) { | ||
421 | listItem.removeStyle( 'direction' ); | ||
422 | listItem.removeAttribute( 'dir' ); | ||
423 | } | ||
424 | contentBlock.moveChildren( listItem ); | ||
425 | contentBlock.remove(); | ||
426 | } | ||
427 | |||
428 | listItem.appendTo( listNode ); | ||
429 | } | ||
430 | |||
431 | // Apply list root dir only if it has been explicitly declared. | ||
432 | if ( listDir && explicitDirection ) | ||
433 | listNode.setAttribute( 'dir', listDir ); | ||
434 | |||
435 | if ( insertAnchor ) | ||
436 | listNode.insertBefore( insertAnchor ); | ||
437 | else | ||
438 | listNode.appendTo( commonParent ); | ||
439 | } | ||
440 | |||
441 | function removeList( editor, groupObj, database ) { | ||
442 | // This is very much like the change list type operation. | ||
443 | // Except that we're changing the selected items' indent to -1 in the list array. | ||
444 | var listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ), | ||
445 | selectedListItems = []; | ||
446 | |||
447 | for ( var i = 0; i < groupObj.contents.length; i++ ) { | ||
448 | var itemNode = groupObj.contents[ i ]; | ||
449 | itemNode = itemNode.getAscendant( 'li', true ); | ||
450 | if ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) ) | ||
451 | continue; | ||
452 | selectedListItems.push( itemNode ); | ||
453 | CKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true ); | ||
454 | } | ||
455 | |||
456 | var lastListIndex = null; | ||
457 | for ( i = 0; i < selectedListItems.length; i++ ) { | ||
458 | var listIndex = selectedListItems[ i ].getCustomData( 'listarray_index' ); | ||
459 | listArray[ listIndex ].indent = -1; | ||
460 | lastListIndex = listIndex; | ||
461 | } | ||
462 | |||
463 | // After cutting parts of the list out with indent=-1, we still have to maintain the array list | ||
464 | // model's nextItem.indent <= currentItem.indent + 1 invariant. Otherwise the array model of the | ||
465 | // list cannot be converted back to a real DOM list. | ||
466 | for ( i = lastListIndex + 1; i < listArray.length; i++ ) { | ||
467 | if ( listArray[ i ].indent > listArray[ i - 1 ].indent + 1 ) { | ||
468 | var indentOffset = listArray[ i - 1 ].indent + 1 - listArray[ i ].indent; | ||
469 | var oldIndent = listArray[ i ].indent; | ||
470 | while ( listArray[ i ] && listArray[ i ].indent >= oldIndent ) { | ||
471 | listArray[ i ].indent += indentOffset; | ||
472 | i++; | ||
473 | } | ||
474 | i--; | ||
475 | } | ||
476 | } | ||
477 | |||
478 | var newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, groupObj.root.getAttribute( 'dir' ) ); | ||
479 | |||
480 | // Compensate <br> before/after the list node if the surrounds are non-blocks.(#3836) | ||
481 | var docFragment = newList.listNode, | ||
482 | boundaryNode, siblingNode; | ||
483 | |||
484 | function compensateBrs( isStart ) { | ||
485 | if ( | ||
486 | ( boundaryNode = docFragment[ isStart ? 'getFirst' : 'getLast' ]() ) && | ||
487 | !( boundaryNode.is && boundaryNode.isBlockBoundary() ) && | ||
488 | ( siblingNode = groupObj.root[ isStart ? 'getPrevious' : 'getNext' ]( CKEDITOR.dom.walker.invisible( true ) ) ) && | ||
489 | !( siblingNode.is && siblingNode.isBlockBoundary( { br: 1 } ) ) | ||
490 | ) { | ||
491 | editor.document.createElement( 'br' )[ isStart ? 'insertBefore' : 'insertAfter' ]( boundaryNode ); | ||
492 | } | ||
493 | } | ||
494 | compensateBrs( true ); | ||
495 | compensateBrs(); | ||
496 | |||
497 | docFragment.replace( groupObj.root ); | ||
498 | |||
499 | editor.fire( 'contentDomInvalidated' ); | ||
500 | } | ||
501 | |||
502 | var headerTagRegex = /^h[1-6]$/; | ||
503 | |||
504 | // Checks wheather this block should be element preserved (not transformed to <li>) when creating list. | ||
505 | function shouldPreserveBlock( block ) { | ||
506 | return ( | ||
507 | // #5335 | ||
508 | block.is( 'pre' ) || | ||
509 | // #5271 - this is a header. | ||
510 | headerTagRegex.test( block.getName() ) || | ||
511 | // 11083 - this is a non-editable element. | ||
512 | block.getAttribute( 'contenteditable' ) == 'false' | ||
513 | ); | ||
514 | } | ||
515 | |||
516 | function listCommand( name, type ) { | ||
517 | this.name = name; | ||
518 | this.type = type; | ||
519 | this.context = type; | ||
520 | this.allowedContent = type + ' li'; | ||
521 | this.requiredContent = type; | ||
522 | } | ||
523 | |||
524 | var elementType = CKEDITOR.dom.walker.nodeType( CKEDITOR.NODE_ELEMENT ); | ||
525 | |||
526 | // Merge child nodes with direction preserved. (#7448) | ||
527 | function mergeChildren( from, into, refNode, forward ) { | ||
528 | var child, itemDir; | ||
529 | while ( ( child = from[ forward ? 'getLast' : 'getFirst' ]( elementType ) ) ) { | ||
530 | if ( ( itemDir = child.getDirection( 1 ) ) !== into.getDirection( 1 ) ) | ||
531 | child.setAttribute( 'dir', itemDir ); | ||
532 | |||
533 | child.remove(); | ||
534 | |||
535 | refNode ? child[ forward ? 'insertBefore' : 'insertAfter' ]( refNode ) : into.append( child, forward ); | ||
536 | } | ||
537 | } | ||
538 | |||
539 | listCommand.prototype = { | ||
540 | exec: function( editor ) { | ||
541 | // Run state check first of all. | ||
542 | this.refresh( editor, editor.elementPath() ); | ||
543 | |||
544 | var config = editor.config, | ||
545 | selection = editor.getSelection(), | ||
546 | ranges = selection && selection.getRanges(); | ||
547 | |||
548 | // Midas lists rule #1 says we can create a list even in an empty document. | ||
549 | // But DOM iterator wouldn't run if the document is really empty. | ||
550 | // So create a paragraph if the document is empty and we're going to create a list. | ||
551 | if ( this.state == CKEDITOR.TRISTATE_OFF ) { | ||
552 | var editable = editor.editable(); | ||
553 | if ( !editable.getFirst( nonEmpty ) ) { | ||
554 | config.enterMode == CKEDITOR.ENTER_BR ? editable.appendBogus() : ranges[ 0 ].fixBlock( 1, config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ); | ||
555 | |||
556 | selection.selectRanges( ranges ); | ||
557 | } | ||
558 | // Maybe a single range there enclosing the whole list, | ||
559 | // turn on the list state manually(#4129). | ||
560 | else { | ||
561 | var range = ranges.length == 1 && ranges[ 0 ], | ||
562 | enclosedNode = range && range.getEnclosedNode(); | ||
563 | if ( enclosedNode && enclosedNode.is && this.type == enclosedNode.getName() ) | ||
564 | this.setState( CKEDITOR.TRISTATE_ON ); | ||
565 | } | ||
566 | } | ||
567 | |||
568 | var bookmarks = selection.createBookmarks( true ); | ||
569 | |||
570 | // Group the blocks up because there are many cases where multiple lists have to be created, | ||
571 | // or multiple lists have to be cancelled. | ||
572 | var listGroups = [], | ||
573 | database = {}, | ||
574 | rangeIterator = ranges.createIterator(), | ||
575 | index = 0; | ||
576 | |||
577 | while ( ( range = rangeIterator.getNextRange() ) && ++index ) { | ||
578 | var boundaryNodes = range.getBoundaryNodes(), | ||
579 | startNode = boundaryNodes.startNode, | ||
580 | endNode = boundaryNodes.endNode; | ||
581 | |||
582 | if ( startNode.type == CKEDITOR.NODE_ELEMENT && startNode.getName() == 'td' ) | ||
583 | range.setStartAt( boundaryNodes.startNode, CKEDITOR.POSITION_AFTER_START ); | ||
584 | |||
585 | if ( endNode.type == CKEDITOR.NODE_ELEMENT && endNode.getName() == 'td' ) | ||
586 | range.setEndAt( boundaryNodes.endNode, CKEDITOR.POSITION_BEFORE_END ); | ||
587 | |||
588 | var iterator = range.createIterator(), | ||
589 | block; | ||
590 | |||
591 | iterator.forceBrBreak = ( this.state == CKEDITOR.TRISTATE_OFF ); | ||
592 | |||
593 | while ( ( block = iterator.getNextParagraph() ) ) { | ||
594 | // Avoid duplicate blocks get processed across ranges. | ||
595 | if ( block.getCustomData( 'list_block' ) ) | ||
596 | continue; | ||
597 | else | ||
598 | CKEDITOR.dom.element.setMarker( database, block, 'list_block', 1 ); | ||
599 | |||
600 | var path = editor.elementPath( block ), | ||
601 | pathElements = path.elements, | ||
602 | pathElementsCount = pathElements.length, | ||
603 | processedFlag = 0, | ||
604 | blockLimit = path.blockLimit, | ||
605 | element; | ||
606 | |||
607 | // First, try to group by a list ancestor. | ||
608 | for ( var i = pathElementsCount - 1; i >= 0 && ( element = pathElements[ i ] ); i-- ) { | ||
609 | // Don't leak outside block limit (#3940). | ||
610 | if ( listNodeNames[ element.getName() ] && blockLimit.contains( element ) ) { | ||
611 | // If we've encountered a list inside a block limit | ||
612 | // The last group object of the block limit element should | ||
613 | // no longer be valid. Since paragraphs after the list | ||
614 | // should belong to a different group of paragraphs before | ||
615 | // the list. (Bug #1309) | ||
616 | blockLimit.removeCustomData( 'list_group_object_' + index ); | ||
617 | |||
618 | var groupObj = element.getCustomData( 'list_group_object' ); | ||
619 | if ( groupObj ) | ||
620 | groupObj.contents.push( block ); | ||
621 | else { | ||
622 | groupObj = { root: element, contents: [ block ] }; | ||
623 | listGroups.push( groupObj ); | ||
624 | CKEDITOR.dom.element.setMarker( database, element, 'list_group_object', groupObj ); | ||
625 | } | ||
626 | processedFlag = 1; | ||
627 | break; | ||
628 | } | ||
629 | } | ||
630 | |||
631 | if ( processedFlag ) | ||
632 | continue; | ||
633 | |||
634 | // No list ancestor? Group by block limit, but don't mix contents from different ranges. | ||
635 | var root = blockLimit; | ||
636 | if ( root.getCustomData( 'list_group_object_' + index ) ) | ||
637 | root.getCustomData( 'list_group_object_' + index ).contents.push( block ); | ||
638 | else { | ||
639 | groupObj = { root: root, contents: [ block ] }; | ||
640 | CKEDITOR.dom.element.setMarker( database, root, 'list_group_object_' + index, groupObj ); | ||
641 | listGroups.push( groupObj ); | ||
642 | } | ||
643 | } | ||
644 | } | ||
645 | |||
646 | // Now we have two kinds of list groups, groups rooted at a list, and groups rooted at a block limit element. | ||
647 | // We either have to build lists or remove lists, for removing a list does not makes sense when we are looking | ||
648 | // at the group that's not rooted at lists. So we have three cases to handle. | ||
649 | var listsCreated = []; | ||
650 | while ( listGroups.length > 0 ) { | ||
651 | groupObj = listGroups.shift(); | ||
652 | if ( this.state == CKEDITOR.TRISTATE_OFF ) { | ||
653 | if ( listNodeNames[ groupObj.root.getName() ] ) | ||
654 | changeListType.call( this, editor, groupObj, database, listsCreated ); | ||
655 | else | ||
656 | createList.call( this, editor, groupObj, listsCreated ); | ||
657 | } else if ( this.state == CKEDITOR.TRISTATE_ON && listNodeNames[ groupObj.root.getName() ] ) { | ||
658 | removeList.call( this, editor, groupObj, database ); | ||
659 | } | ||
660 | } | ||
661 | |||
662 | // For all new lists created, merge into adjacent, same type lists. | ||
663 | for ( i = 0; i < listsCreated.length; i++ ) | ||
664 | mergeListSiblings( listsCreated[ i ] ); | ||
665 | |||
666 | // Clean up, restore selection and update toolbar button states. | ||
667 | CKEDITOR.dom.element.clearAllMarkers( database ); | ||
668 | selection.selectBookmarks( bookmarks ); | ||
669 | editor.focus(); | ||
670 | }, | ||
671 | |||
672 | refresh: function( editor, path ) { | ||
673 | var list = path.contains( listNodeNames, 1 ), | ||
674 | limit = path.blockLimit || path.root; | ||
675 | |||
676 | // 1. Only a single type of list activate. | ||
677 | // 2. Do not show list outside of block limit. | ||
678 | if ( list && limit.contains( list ) ) | ||
679 | this.setState( list.is( this.type ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); | ||
680 | else | ||
681 | this.setState( CKEDITOR.TRISTATE_OFF ); | ||
682 | } | ||
683 | }; | ||
684 | |||
685 | // Merge list adjacent, of same type lists. | ||
686 | function mergeListSiblings( listNode ) { | ||
687 | |||
688 | function mergeSibling( rtl ) { | ||
689 | var sibling = listNode[ rtl ? 'getPrevious' : 'getNext' ]( nonEmpty ); | ||
690 | if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT && sibling.is( listNode.getName() ) ) { | ||
691 | // Move children order by merge direction.(#3820) | ||
692 | mergeChildren( listNode, sibling, null, !rtl ); | ||
693 | |||
694 | listNode.remove(); | ||
695 | listNode = sibling; | ||
696 | } | ||
697 | } | ||
698 | |||
699 | mergeSibling(); | ||
700 | mergeSibling( 1 ); | ||
701 | } | ||
702 | |||
703 | // Check if node is block element that recieves text. | ||
704 | function isTextBlock( node ) { | ||
705 | return node.type == CKEDITOR.NODE_ELEMENT && ( node.getName() in CKEDITOR.dtd.$block || node.getName() in CKEDITOR.dtd.$listItem ) && CKEDITOR.dtd[ node.getName() ][ '#' ]; | ||
706 | } | ||
707 | |||
708 | // Join visually two block lines. | ||
709 | function joinNextLineToCursor( editor, cursor, nextCursor ) { | ||
710 | editor.fire( 'saveSnapshot' ); | ||
711 | |||
712 | // Merge with previous block's content. | ||
713 | nextCursor.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ); | ||
714 | var frag = nextCursor.extractContents(); | ||
715 | |||
716 | cursor.trim( false, true ); | ||
717 | var bm = cursor.createBookmark(); | ||
718 | |||
719 | // Kill original bogus; | ||
720 | var currentPath = new CKEDITOR.dom.elementPath( cursor.startContainer ), | ||
721 | pathBlock = currentPath.block, | ||
722 | currentBlock = currentPath.lastElement.getAscendant( 'li', 1 ) || pathBlock, | ||
723 | nextPath = new CKEDITOR.dom.elementPath( nextCursor.startContainer ), | ||
724 | nextLi = nextPath.contains( CKEDITOR.dtd.$listItem ), | ||
725 | nextList = nextPath.contains( CKEDITOR.dtd.$list ), | ||
726 | last; | ||
727 | |||
728 | // Remove bogus node the current block/pseudo block. | ||
729 | if ( pathBlock ) { | ||
730 | var bogus = pathBlock.getBogus(); | ||
731 | bogus && bogus.remove(); | ||
732 | } | ||
733 | else if ( nextList ) { | ||
734 | last = nextList.getPrevious( nonEmpty ); | ||
735 | if ( last && blockBogus( last ) ) | ||
736 | last.remove(); | ||
737 | } | ||
738 | |||
739 | // Kill the tail br in extracted. | ||
740 | last = frag.getLast(); | ||
741 | if ( last && last.type == CKEDITOR.NODE_ELEMENT && last.is( 'br' ) ) | ||
742 | last.remove(); | ||
743 | |||
744 | // Insert fragment at the range position. | ||
745 | var nextNode = cursor.startContainer.getChild( cursor.startOffset ); | ||
746 | if ( nextNode ) | ||
747 | frag.insertBefore( nextNode ); | ||
748 | else | ||
749 | cursor.startContainer.append( frag ); | ||
750 | |||
751 | // Move the sub list nested in the next list item. | ||
752 | if ( nextLi ) { | ||
753 | var sublist = getSubList( nextLi ); | ||
754 | if ( sublist ) { | ||
755 | // If next line is in the sub list of the current list item. | ||
756 | if ( currentBlock.contains( nextLi ) ) { | ||
757 | mergeChildren( sublist, nextLi.getParent(), nextLi ); | ||
758 | sublist.remove(); | ||
759 | } | ||
760 | // Migrate the sub list to current list item. | ||
761 | else { | ||
762 | currentBlock.append( sublist ); | ||
763 | } | ||
764 | } | ||
765 | } | ||
766 | |||
767 | var nextBlock, parent; | ||
768 | // Remove any remaining zombies path blocks at the end after line merged. | ||
769 | while ( nextCursor.checkStartOfBlock() && nextCursor.checkEndOfBlock() ) { | ||
770 | nextPath = nextCursor.startPath(); | ||
771 | nextBlock = nextPath.block; | ||
772 | |||
773 | // Abort when nothing to be removed (#10890). | ||
774 | if ( !nextBlock ) | ||
775 | break; | ||
776 | |||
777 | // Check if also to remove empty list. | ||
778 | if ( nextBlock.is( 'li' ) ) { | ||
779 | parent = nextBlock.getParent(); | ||
780 | if ( nextBlock.equals( parent.getLast( nonEmpty ) ) && nextBlock.equals( parent.getFirst( nonEmpty ) ) ) | ||
781 | nextBlock = parent; | ||
782 | } | ||
783 | |||
784 | nextCursor.moveToPosition( nextBlock, CKEDITOR.POSITION_BEFORE_START ); | ||
785 | nextBlock.remove(); | ||
786 | } | ||
787 | |||
788 | // Check if need to further merge with the list resides after the merged block. (#9080) | ||
789 | var walkerRng = nextCursor.clone(), editable = editor.editable(); | ||
790 | walkerRng.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END ); | ||
791 | var walker = new CKEDITOR.dom.walker( walkerRng ); | ||
792 | walker.evaluator = function( node ) { | ||
793 | return nonEmpty( node ) && !blockBogus( node ); | ||
794 | }; | ||
795 | var next = walker.next(); | ||
796 | if ( next && next.type == CKEDITOR.NODE_ELEMENT && next.getName() in CKEDITOR.dtd.$list ) | ||
797 | mergeListSiblings( next ); | ||
798 | |||
799 | cursor.moveToBookmark( bm ); | ||
800 | |||
801 | // Make fresh selection. | ||
802 | cursor.select(); | ||
803 | |||
804 | editor.fire( 'saveSnapshot' ); | ||
805 | } | ||
806 | |||
807 | function getSubList( li ) { | ||
808 | var last = li.getLast( nonEmpty ); | ||
809 | return last && last.type == CKEDITOR.NODE_ELEMENT && last.getName() in listNodeNames ? last : null; | ||
810 | } | ||
811 | |||
812 | CKEDITOR.plugins.add( 'list', { | ||
813 | // jscs:disable maximumLineLength | ||
814 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
815 | // jscs:enable maximumLineLength | ||
816 | icons: 'bulletedlist,bulletedlist-rtl,numberedlist,numberedlist-rtl', // %REMOVE_LINE_CORE% | ||
817 | hidpi: true, // %REMOVE_LINE_CORE% | ||
818 | requires: 'indentlist', | ||
819 | init: function( editor ) { | ||
820 | if ( editor.blockless ) | ||
821 | return; | ||
822 | |||
823 | // Register commands. | ||
824 | editor.addCommand( 'numberedlist', new listCommand( 'numberedlist', 'ol' ) ); | ||
825 | editor.addCommand( 'bulletedlist', new listCommand( 'bulletedlist', 'ul' ) ); | ||
826 | |||
827 | // Register the toolbar button. | ||
828 | if ( editor.ui.addButton ) { | ||
829 | editor.ui.addButton( 'NumberedList', { | ||
830 | label: editor.lang.list.numberedlist, | ||
831 | command: 'numberedlist', | ||
832 | directional: true, | ||
833 | toolbar: 'list,10' | ||
834 | } ); | ||
835 | editor.ui.addButton( 'BulletedList', { | ||
836 | label: editor.lang.list.bulletedlist, | ||
837 | command: 'bulletedlist', | ||
838 | directional: true, | ||
839 | toolbar: 'list,20' | ||
840 | } ); | ||
841 | } | ||
842 | |||
843 | // Handled backspace/del key to join list items. (#8248,#9080) | ||
844 | editor.on( 'key', function( evt ) { | ||
845 | // Use getKey directly in order to ignore modifiers. | ||
846 | // Justification: http://dev.ckeditor.com/ticket/11861#comment:13 | ||
847 | var key = evt.data.domEvent.getKey(), li; | ||
848 | |||
849 | // DEl/BACKSPACE | ||
850 | if ( editor.mode == 'wysiwyg' && key in { 8: 1, 46: 1 } ) { | ||
851 | var sel = editor.getSelection(), | ||
852 | range = sel.getRanges()[ 0 ], | ||
853 | path = range && range.startPath(); | ||
854 | |||
855 | if ( !range || !range.collapsed ) | ||
856 | return; | ||
857 | |||
858 | var isBackspace = key == 8; | ||
859 | var editable = editor.editable(); | ||
860 | var walker = new CKEDITOR.dom.walker( range.clone() ); | ||
861 | walker.evaluator = function( node ) { | ||
862 | return nonEmpty( node ) && !blockBogus( node ); | ||
863 | }; | ||
864 | // Backspace/Del behavior at the start/end of table is handled in core. | ||
865 | walker.guard = function( node, isOut ) { | ||
866 | return !( isOut && node.type == CKEDITOR.NODE_ELEMENT && node.is( 'table' ) ); | ||
867 | }; | ||
868 | |||
869 | var cursor = range.clone(); | ||
870 | |||
871 | if ( isBackspace ) { | ||
872 | var previous, joinWith; | ||
873 | |||
874 | // Join a sub list's first line, with the previous visual line in parent. | ||
875 | if ( | ||
876 | ( previous = path.contains( listNodeNames ) ) && | ||
877 | range.checkBoundaryOfElement( previous, CKEDITOR.START ) && | ||
878 | ( previous = previous.getParent() ) && previous.is( 'li' ) && | ||
879 | ( previous = getSubList( previous ) ) | ||
880 | ) { | ||
881 | joinWith = previous; | ||
882 | previous = previous.getPrevious( nonEmpty ); | ||
883 | // Place cursor before the nested list. | ||
884 | cursor.moveToPosition( | ||
885 | previous && blockBogus( previous ) ? previous : joinWith, | ||
886 | CKEDITOR.POSITION_BEFORE_START ); | ||
887 | } | ||
888 | // Join any line following a list, with the last visual line of the list. | ||
889 | else { | ||
890 | walker.range.setStartAt( editable, CKEDITOR.POSITION_AFTER_START ); | ||
891 | walker.range.setEnd( range.startContainer, range.startOffset ); | ||
892 | |||
893 | previous = walker.previous(); | ||
894 | |||
895 | if ( | ||
896 | previous && previous.type == CKEDITOR.NODE_ELEMENT && | ||
897 | ( previous.getName() in listNodeNames || | ||
898 | previous.is( 'li' ) ) | ||
899 | ) { | ||
900 | if ( !previous.is( 'li' ) ) { | ||
901 | walker.range.selectNodeContents( previous ); | ||
902 | walker.reset(); | ||
903 | walker.evaluator = isTextBlock; | ||
904 | previous = walker.previous(); | ||
905 | } | ||
906 | |||
907 | joinWith = previous; | ||
908 | // Place cursor at the end of previous block. | ||
909 | cursor.moveToElementEditEnd( joinWith ); | ||
910 | |||
911 | // And then just before end of closest block element (#12729). | ||
912 | cursor.moveToPosition( cursor.endPath().block, CKEDITOR.POSITION_BEFORE_END ); | ||
913 | } | ||
914 | } | ||
915 | |||
916 | if ( joinWith ) { | ||
917 | joinNextLineToCursor( editor, cursor, range ); | ||
918 | evt.cancel(); | ||
919 | } | ||
920 | else { | ||
921 | var list = path.contains( listNodeNames ); | ||
922 | // Backspace pressed at the start of list outdents the first list item. (#9129) | ||
923 | if ( list && range.checkBoundaryOfElement( list, CKEDITOR.START ) ) { | ||
924 | li = list.getFirst( nonEmpty ); | ||
925 | |||
926 | if ( range.checkBoundaryOfElement( li, CKEDITOR.START ) ) { | ||
927 | previous = list.getPrevious( nonEmpty ); | ||
928 | |||
929 | // Only if the list item contains a sub list, do nothing but | ||
930 | // simply move cursor backward one character. | ||
931 | if ( getSubList( li ) ) { | ||
932 | if ( previous ) { | ||
933 | range.moveToElementEditEnd( previous ); | ||
934 | range.select(); | ||
935 | } | ||
936 | |||
937 | evt.cancel(); | ||
938 | } | ||
939 | else { | ||
940 | editor.execCommand( 'outdent' ); | ||
941 | evt.cancel(); | ||
942 | } | ||
943 | } | ||
944 | } | ||
945 | } | ||
946 | |||
947 | } else { | ||
948 | var next, nextLine; | ||
949 | |||
950 | li = path.contains( 'li' ); | ||
951 | |||
952 | if ( li ) { | ||
953 | walker.range.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END ); | ||
954 | |||
955 | var last = li.getLast( nonEmpty ); | ||
956 | var block = last && isTextBlock( last ) ? last : li; | ||
957 | |||
958 | // Indicate cursor at the visual end of an list item. | ||
959 | var isAtEnd = 0; | ||
960 | |||
961 | next = walker.next(); | ||
962 | |||
963 | // When list item contains a sub list. | ||
964 | if ( | ||
965 | next && next.type == CKEDITOR.NODE_ELEMENT && | ||
966 | next.getName() in listNodeNames && | ||
967 | next.equals( last ) | ||
968 | ) { | ||
969 | isAtEnd = 1; | ||
970 | |||
971 | // Move to the first item in sub list. | ||
972 | next = walker.next(); | ||
973 | } | ||
974 | // Right at the end of list item. | ||
975 | else if ( range.checkBoundaryOfElement( block, CKEDITOR.END ) ) { | ||
976 | isAtEnd = 2; | ||
977 | } | ||
978 | |||
979 | if ( isAtEnd && next ) { | ||
980 | // Put cursor range there. | ||
981 | nextLine = range.clone(); | ||
982 | nextLine.moveToElementEditStart( next ); | ||
983 | |||
984 | // #13409 | ||
985 | // For the following case and similar | ||
986 | // | ||
987 | // <ul> | ||
988 | // <li> | ||
989 | // <p><a href="#one"><em>x^</em></a></p> | ||
990 | // <ul> | ||
991 | // <li><span>y</span></li> | ||
992 | // </ul> | ||
993 | // </li> | ||
994 | // </ul> | ||
995 | if ( isAtEnd == 1 ) { | ||
996 | // Move the cursor to <em> if attached to "x" text node. | ||
997 | cursor.optimize(); | ||
998 | |||
999 | // Abort if the range is attached directly in <li>, like | ||
1000 | // | ||
1001 | // <ul> | ||
1002 | // <li> | ||
1003 | // x^ | ||
1004 | // <ul> | ||
1005 | // <li><span>y</span></li> | ||
1006 | // </ul> | ||
1007 | // </li> | ||
1008 | // </ul> | ||
1009 | if ( !cursor.startContainer.equals( li ) ) { | ||
1010 | var node = cursor.startContainer, | ||
1011 | farthestInlineAscendant; | ||
1012 | |||
1013 | // Find <a>, which is farthest from <em> but still inline element. | ||
1014 | while ( node.is( CKEDITOR.dtd.$inline ) ) { | ||
1015 | farthestInlineAscendant = node; | ||
1016 | node = node.getParent(); | ||
1017 | } | ||
1018 | |||
1019 | // Move the range so it does not contain inline elements. | ||
1020 | // It prevents <span> from being included in <em>. | ||
1021 | // | ||
1022 | // <ul> | ||
1023 | // <li> | ||
1024 | // <p><a href="#one"><em>x</em></a>^</p> | ||
1025 | // <ul> | ||
1026 | // <li><span>y</span></li> | ||
1027 | // </ul> | ||
1028 | // </li> | ||
1029 | // </ul> | ||
1030 | // | ||
1031 | // so instead of | ||
1032 | // | ||
1033 | // <ul> | ||
1034 | // <li> | ||
1035 | // <p><a href="#one"><em>x^<span>y</span></em></a></p> | ||
1036 | // </li> | ||
1037 | // </ul> | ||
1038 | // | ||
1039 | // pressing DELETE produces | ||
1040 | // | ||
1041 | // <ul> | ||
1042 | // <li> | ||
1043 | // <p><a href="#one"><em>x</em></a>^<span>y</span></p> | ||
1044 | // </li> | ||
1045 | // </ul> | ||
1046 | if ( farthestInlineAscendant ) { | ||
1047 | cursor.moveToPosition( farthestInlineAscendant, CKEDITOR.POSITION_AFTER_END ); | ||
1048 | } | ||
1049 | } | ||
1050 | } | ||
1051 | |||
1052 | // Moving `cursor` and `next line` only when at the end literally (#12729). | ||
1053 | if ( isAtEnd == 2 ) { | ||
1054 | cursor.moveToPosition( cursor.endPath().block, CKEDITOR.POSITION_BEFORE_END ); | ||
1055 | |||
1056 | // Next line might be text node not wrapped in block element. | ||
1057 | if ( nextLine.endPath().block ) { | ||
1058 | nextLine.moveToPosition( nextLine.endPath().block, CKEDITOR.POSITION_AFTER_START ); | ||
1059 | } | ||
1060 | } | ||
1061 | |||
1062 | joinNextLineToCursor( editor, cursor, nextLine ); | ||
1063 | evt.cancel(); | ||
1064 | } | ||
1065 | } else { | ||
1066 | // Handle Del key pressed before the list. | ||
1067 | walker.range.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END ); | ||
1068 | next = walker.next(); | ||
1069 | |||
1070 | if ( next && next.type == CKEDITOR.NODE_ELEMENT && next.is( listNodeNames ) ) { | ||
1071 | // The start <li> | ||
1072 | next = next.getFirst( nonEmpty ); | ||
1073 | |||
1074 | // Simply remove the current empty block, move cursor to the | ||
1075 | // subsequent list. | ||
1076 | if ( path.block && range.checkStartOfBlock() && range.checkEndOfBlock() ) { | ||
1077 | path.block.remove(); | ||
1078 | range.moveToElementEditStart( next ); | ||
1079 | range.select(); | ||
1080 | evt.cancel(); | ||
1081 | } | ||
1082 | // Preventing the default (merge behavior), but simply move | ||
1083 | // the cursor one character forward if subsequent list item | ||
1084 | // contains sub list. | ||
1085 | else if ( getSubList( next ) ) { | ||
1086 | range.moveToElementEditStart( next ); | ||
1087 | range.select(); | ||
1088 | evt.cancel(); | ||
1089 | } | ||
1090 | // Merge the first list item with the current line. | ||
1091 | else { | ||
1092 | nextLine = range.clone(); | ||
1093 | nextLine.moveToElementEditStart( next ); | ||
1094 | joinNextLineToCursor( editor, cursor, nextLine ); | ||
1095 | evt.cancel(); | ||
1096 | } | ||
1097 | } | ||
1098 | } | ||
1099 | |||
1100 | } | ||
1101 | |||
1102 | // The backspace/del could potentially put cursor at a bad position, | ||
1103 | // being it handled or not, check immediately the selection to have it fixed. | ||
1104 | setTimeout( function() { | ||
1105 | editor.selectionChange( 1 ); | ||
1106 | } ); | ||
1107 | } | ||
1108 | } ); | ||
1109 | } | ||
1110 | } ); | ||
1111 | } )(); | ||
diff --git a/sources/plugins/listblock/plugin.js b/sources/plugins/listblock/plugin.js new file mode 100644 index 0000000..e998167 --- /dev/null +++ b/sources/plugins/listblock/plugin.js | |||
@@ -0,0 +1,241 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.add( 'listblock', { | ||
7 | requires: 'panel', | ||
8 | |||
9 | onLoad: function() { | ||
10 | var list = CKEDITOR.addTemplate( 'panel-list', '<ul role="presentation" class="cke_panel_list">{items}</ul>' ), | ||
11 | listItem = CKEDITOR.addTemplate( 'panel-list-item', '<li id="{id}" class="cke_panel_listItem" role=presentation>' + | ||
12 | '<a id="{id}_option" _cke_focus=1 hidefocus=true' + | ||
13 | ' title="{title}"' + | ||
14 | ' href="javascript:void(\'{val}\')" ' + | ||
15 | ' {onclick}="CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;"' + // #188 | ||
16 | ' role="option">' + | ||
17 | '{text}' + | ||
18 | '</a>' + | ||
19 | '</li>' ), | ||
20 | listGroup = CKEDITOR.addTemplate( 'panel-list-group', '<h1 id="{id}" class="cke_panel_grouptitle" role="presentation" >{label}</h1>' ), | ||
21 | reSingleQuote = /\'/g, | ||
22 | escapeSingleQuotes = function( str ) { | ||
23 | return str.replace( reSingleQuote, '\\\'' ); | ||
24 | }; | ||
25 | |||
26 | CKEDITOR.ui.panel.prototype.addListBlock = function( name, definition ) { | ||
27 | return this.addBlock( name, new CKEDITOR.ui.listBlock( this.getHolderElement(), definition ) ); | ||
28 | }; | ||
29 | |||
30 | CKEDITOR.ui.listBlock = CKEDITOR.tools.createClass( { | ||
31 | base: CKEDITOR.ui.panel.block, | ||
32 | |||
33 | $: function( blockHolder, blockDefinition ) { | ||
34 | blockDefinition = blockDefinition || {}; | ||
35 | |||
36 | var attribs = blockDefinition.attributes || ( blockDefinition.attributes = {} ); | ||
37 | ( this.multiSelect = !!blockDefinition.multiSelect ) && ( attribs[ 'aria-multiselectable' ] = true ); | ||
38 | // Provide default role of 'listbox'. | ||
39 | !attribs.role && ( attribs.role = 'listbox' ); | ||
40 | |||
41 | // Call the base contructor. | ||
42 | this.base.apply( this, arguments ); | ||
43 | |||
44 | // Set the proper a11y attributes. | ||
45 | this.element.setAttribute( 'role', attribs.role ); | ||
46 | |||
47 | var keys = this.keys; | ||
48 | keys[ 40 ] = 'next'; // ARROW-DOWN | ||
49 | keys[ 9 ] = 'next'; // TAB | ||
50 | keys[ 38 ] = 'prev'; // ARROW-UP | ||
51 | keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB | ||
52 | keys[ 32 ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // SPACE | ||
53 | CKEDITOR.env.ie && ( keys[ 13 ] = 'mouseup' ); // Manage ENTER, since onclick is blocked in IE (#8041). | ||
54 | |||
55 | this._.pendingHtml = []; | ||
56 | this._.pendingList = []; | ||
57 | this._.items = {}; | ||
58 | this._.groups = {}; | ||
59 | }, | ||
60 | |||
61 | _: { | ||
62 | close: function() { | ||
63 | if ( this._.started ) { | ||
64 | var output = list.output( { items: this._.pendingList.join( '' ) } ); | ||
65 | this._.pendingList = []; | ||
66 | this._.pendingHtml.push( output ); | ||
67 | delete this._.started; | ||
68 | } | ||
69 | }, | ||
70 | |||
71 | getClick: function() { | ||
72 | if ( !this._.click ) { | ||
73 | this._.click = CKEDITOR.tools.addFunction( function( value ) { | ||
74 | var marked = this.toggle( value ); | ||
75 | if ( this.onClick ) | ||
76 | this.onClick( value, marked ); | ||
77 | }, this ); | ||
78 | } | ||
79 | return this._.click; | ||
80 | } | ||
81 | }, | ||
82 | |||
83 | proto: { | ||
84 | add: function( value, html, title ) { | ||
85 | var id = CKEDITOR.tools.getNextId(); | ||
86 | |||
87 | if ( !this._.started ) { | ||
88 | this._.started = 1; | ||
89 | this._.size = this._.size || 0; | ||
90 | } | ||
91 | |||
92 | this._.items[ value ] = id; | ||
93 | |||
94 | var data = { | ||
95 | id: id, | ||
96 | val: escapeSingleQuotes( CKEDITOR.tools.htmlEncodeAttr( value ) ), | ||
97 | onclick: CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick', | ||
98 | clickFn: this._.getClick(), | ||
99 | title: CKEDITOR.tools.htmlEncodeAttr( title || value ), | ||
100 | text: html || value | ||
101 | }; | ||
102 | |||
103 | this._.pendingList.push( listItem.output( data ) ); | ||
104 | }, | ||
105 | |||
106 | startGroup: function( title ) { | ||
107 | this._.close(); | ||
108 | |||
109 | var id = CKEDITOR.tools.getNextId(); | ||
110 | |||
111 | this._.groups[ title ] = id; | ||
112 | |||
113 | this._.pendingHtml.push( listGroup.output( { id: id, label: title } ) ); | ||
114 | }, | ||
115 | |||
116 | commit: function() { | ||
117 | this._.close(); | ||
118 | this.element.appendHtml( this._.pendingHtml.join( '' ) ); | ||
119 | delete this._.size; | ||
120 | |||
121 | this._.pendingHtml = []; | ||
122 | }, | ||
123 | |||
124 | toggle: function( value ) { | ||
125 | var isMarked = this.isMarked( value ); | ||
126 | |||
127 | if ( isMarked ) | ||
128 | this.unmark( value ); | ||
129 | else | ||
130 | this.mark( value ); | ||
131 | |||
132 | return !isMarked; | ||
133 | }, | ||
134 | |||
135 | hideGroup: function( groupTitle ) { | ||
136 | var group = this.element.getDocument().getById( this._.groups[ groupTitle ] ), | ||
137 | list = group && group.getNext(); | ||
138 | |||
139 | if ( group ) { | ||
140 | group.setStyle( 'display', 'none' ); | ||
141 | |||
142 | if ( list && list.getName() == 'ul' ) | ||
143 | list.setStyle( 'display', 'none' ); | ||
144 | } | ||
145 | }, | ||
146 | |||
147 | hideItem: function( value ) { | ||
148 | this.element.getDocument().getById( this._.items[ value ] ).setStyle( 'display', 'none' ); | ||
149 | }, | ||
150 | |||
151 | showAll: function() { | ||
152 | var items = this._.items, | ||
153 | groups = this._.groups, | ||
154 | doc = this.element.getDocument(); | ||
155 | |||
156 | for ( var value in items ) { | ||
157 | doc.getById( items[ value ] ).setStyle( 'display', '' ); | ||
158 | } | ||
159 | |||
160 | for ( var title in groups ) { | ||
161 | var group = doc.getById( groups[ title ] ), | ||
162 | list = group.getNext(); | ||
163 | |||
164 | group.setStyle( 'display', '' ); | ||
165 | |||
166 | if ( list && list.getName() == 'ul' ) | ||
167 | list.setStyle( 'display', '' ); | ||
168 | } | ||
169 | }, | ||
170 | |||
171 | mark: function( value ) { | ||
172 | if ( !this.multiSelect ) | ||
173 | this.unmarkAll(); | ||
174 | |||
175 | var itemId = this._.items[ value ], | ||
176 | item = this.element.getDocument().getById( itemId ); | ||
177 | item.addClass( 'cke_selected' ); | ||
178 | |||
179 | this.element.getDocument().getById( itemId + '_option' ).setAttribute( 'aria-selected', true ); | ||
180 | this.onMark && this.onMark( item ); | ||
181 | }, | ||
182 | |||
183 | unmark: function( value ) { | ||
184 | var doc = this.element.getDocument(), | ||
185 | itemId = this._.items[ value ], | ||
186 | item = doc.getById( itemId ); | ||
187 | |||
188 | item.removeClass( 'cke_selected' ); | ||
189 | doc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' ); | ||
190 | |||
191 | this.onUnmark && this.onUnmark( item ); | ||
192 | }, | ||
193 | |||
194 | unmarkAll: function() { | ||
195 | var items = this._.items, | ||
196 | doc = this.element.getDocument(); | ||
197 | |||
198 | for ( var value in items ) { | ||
199 | var itemId = items[ value ]; | ||
200 | |||
201 | doc.getById( itemId ).removeClass( 'cke_selected' ); | ||
202 | doc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' ); | ||
203 | } | ||
204 | |||
205 | this.onUnmark && this.onUnmark(); | ||
206 | }, | ||
207 | |||
208 | isMarked: function( value ) { | ||
209 | return this.element.getDocument().getById( this._.items[ value ] ).hasClass( 'cke_selected' ); | ||
210 | }, | ||
211 | |||
212 | focus: function( value ) { | ||
213 | this._.focusIndex = -1; | ||
214 | |||
215 | var links = this.element.getElementsByTag( 'a' ), | ||
216 | link, | ||
217 | selected, | ||
218 | i = -1; | ||
219 | |||
220 | if ( value ) { | ||
221 | selected = this.element.getDocument().getById( this._.items[ value ] ).getFirst(); | ||
222 | |||
223 | while ( ( link = links.getItem( ++i ) ) ) { | ||
224 | if ( link.equals( selected ) ) { | ||
225 | this._.focusIndex = i; | ||
226 | break; | ||
227 | } | ||
228 | } | ||
229 | } | ||
230 | else { | ||
231 | this.element.focus(); | ||
232 | } | ||
233 | |||
234 | selected && setTimeout( function() { | ||
235 | selected.focus(); | ||
236 | }, 0 ); | ||
237 | } | ||
238 | } | ||
239 | } ); | ||
240 | } | ||
241 | } ); | ||
diff --git a/sources/plugins/liststyle/dialogs/liststyle.js b/sources/plugins/liststyle/dialogs/liststyle.js new file mode 100644 index 0000000..c9f3430 --- /dev/null +++ b/sources/plugins/liststyle/dialogs/liststyle.js | |||
@@ -0,0 +1,189 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | function getListElement( editor, listTag ) { | ||
8 | var range; | ||
9 | try { | ||
10 | range = editor.getSelection().getRanges()[ 0 ]; | ||
11 | } catch ( e ) { | ||
12 | return null; | ||
13 | } | ||
14 | |||
15 | range.shrink( CKEDITOR.SHRINK_TEXT ); | ||
16 | return editor.elementPath( range.getCommonAncestor() ).contains( listTag, 1 ); | ||
17 | } | ||
18 | |||
19 | var listItem = function( node ) { | ||
20 | return node.type == CKEDITOR.NODE_ELEMENT && node.is( 'li' ); | ||
21 | }; | ||
22 | |||
23 | var mapListStyle = { | ||
24 | 'a': 'lower-alpha', | ||
25 | 'A': 'upper-alpha', | ||
26 | 'i': 'lower-roman', | ||
27 | 'I': 'upper-roman', | ||
28 | '1': 'decimal', | ||
29 | 'disc': 'disc', | ||
30 | 'circle': 'circle', | ||
31 | 'square': 'square' | ||
32 | }; | ||
33 | |||
34 | function listStyle( editor, startupPage ) { | ||
35 | var lang = editor.lang.liststyle; | ||
36 | if ( startupPage == 'bulletedListStyle' ) { | ||
37 | return { | ||
38 | title: lang.bulletedTitle, | ||
39 | minWidth: 300, | ||
40 | minHeight: 50, | ||
41 | contents: [ { | ||
42 | id: 'info', | ||
43 | accessKey: 'I', | ||
44 | elements: [ { | ||
45 | type: 'select', | ||
46 | label: lang.type, | ||
47 | id: 'type', | ||
48 | align: 'center', | ||
49 | style: 'width:150px', | ||
50 | items: [ | ||
51 | [ lang.notset, '' ], | ||
52 | [ lang.circle, 'circle' ], | ||
53 | [ lang.disc, 'disc' ], | ||
54 | [ lang.square, 'square' ] | ||
55 | ], | ||
56 | setup: function( element ) { | ||
57 | var value = element.getStyle( 'list-style-type' ) || mapListStyle[ element.getAttribute( 'type' ) ] || element.getAttribute( 'type' ) || ''; | ||
58 | |||
59 | this.setValue( value ); | ||
60 | }, | ||
61 | commit: function( element ) { | ||
62 | var value = this.getValue(); | ||
63 | if ( value ) | ||
64 | element.setStyle( 'list-style-type', value ); | ||
65 | else | ||
66 | element.removeStyle( 'list-style-type' ); | ||
67 | } | ||
68 | } ] | ||
69 | } ], | ||
70 | onShow: function() { | ||
71 | var editor = this.getParentEditor(), | ||
72 | element = getListElement( editor, 'ul' ); | ||
73 | |||
74 | element && this.setupContent( element ); | ||
75 | }, | ||
76 | onOk: function() { | ||
77 | var editor = this.getParentEditor(), | ||
78 | element = getListElement( editor, 'ul' ); | ||
79 | |||
80 | element && this.commitContent( element ); | ||
81 | } | ||
82 | }; | ||
83 | } else if ( startupPage == 'numberedListStyle' ) { | ||
84 | |||
85 | var listStyleOptions = [ | ||
86 | [ lang.notset, '' ], | ||
87 | [ lang.lowerRoman, 'lower-roman' ], | ||
88 | [ lang.upperRoman, 'upper-roman' ], | ||
89 | [ lang.lowerAlpha, 'lower-alpha' ], | ||
90 | [ lang.upperAlpha, 'upper-alpha' ], | ||
91 | [ lang.decimal, 'decimal' ] | ||
92 | ]; | ||
93 | |||
94 | if ( !CKEDITOR.env.ie || CKEDITOR.env.version > 7 ) { | ||
95 | listStyleOptions.concat( [ | ||
96 | [ lang.armenian, 'armenian' ], | ||
97 | [ lang.decimalLeadingZero, 'decimal-leading-zero' ], | ||
98 | [ lang.georgian, 'georgian' ], | ||
99 | [ lang.lowerGreek, 'lower-greek' ] | ||
100 | ] ); | ||
101 | } | ||
102 | |||
103 | return { | ||
104 | title: lang.numberedTitle, | ||
105 | minWidth: 300, | ||
106 | minHeight: 50, | ||
107 | contents: [ { | ||
108 | id: 'info', | ||
109 | accessKey: 'I', | ||
110 | elements: [ { | ||
111 | type: 'hbox', | ||
112 | widths: [ '25%', '75%' ], | ||
113 | children: [ { | ||
114 | label: lang.start, | ||
115 | type: 'text', | ||
116 | id: 'start', | ||
117 | validate: CKEDITOR.dialog.validate.integer( lang.validateStartNumber ), | ||
118 | setup: function( element ) { | ||
119 | // List item start number dominates. | ||
120 | var value = element.getFirst( listItem ).getAttribute( 'value' ) || element.getAttribute( 'start' ) || 1; | ||
121 | value && this.setValue( value ); | ||
122 | }, | ||
123 | commit: function( element ) { | ||
124 | var firstItem = element.getFirst( listItem ); | ||
125 | var oldStart = firstItem.getAttribute( 'value' ) || element.getAttribute( 'start' ) || 1; | ||
126 | |||
127 | // Force start number on list root. | ||
128 | element.getFirst( listItem ).removeAttribute( 'value' ); | ||
129 | var val = parseInt( this.getValue(), 10 ); | ||
130 | if ( isNaN( val ) ) | ||
131 | element.removeAttribute( 'start' ); | ||
132 | else | ||
133 | element.setAttribute( 'start', val ); | ||
134 | |||
135 | // Update consequent list item numbering. | ||
136 | var nextItem = firstItem, | ||
137 | conseq = oldStart, | ||
138 | startNumber = isNaN( val ) ? 1 : val; | ||
139 | while ( ( nextItem = nextItem.getNext( listItem ) ) && conseq++ ) { | ||
140 | if ( nextItem.getAttribute( 'value' ) == conseq ) | ||
141 | nextItem.setAttribute( 'value', startNumber + conseq - oldStart ); | ||
142 | } | ||
143 | } | ||
144 | }, | ||
145 | { | ||
146 | type: 'select', | ||
147 | label: lang.type, | ||
148 | id: 'type', | ||
149 | style: 'width: 100%;', | ||
150 | items: listStyleOptions, | ||
151 | setup: function( element ) { | ||
152 | var value = element.getStyle( 'list-style-type' ) || mapListStyle[ element.getAttribute( 'type' ) ] || element.getAttribute( 'type' ) || ''; | ||
153 | |||
154 | this.setValue( value ); | ||
155 | }, | ||
156 | commit: function( element ) { | ||
157 | var value = this.getValue(); | ||
158 | if ( value ) | ||
159 | element.setStyle( 'list-style-type', value ); | ||
160 | else | ||
161 | element.removeStyle( 'list-style-type' ); | ||
162 | } | ||
163 | } ] | ||
164 | } ] | ||
165 | } ], | ||
166 | onShow: function() { | ||
167 | var editor = this.getParentEditor(), | ||
168 | element = getListElement( editor, 'ol' ); | ||
169 | |||
170 | element && this.setupContent( element ); | ||
171 | }, | ||
172 | onOk: function() { | ||
173 | var editor = this.getParentEditor(), | ||
174 | element = getListElement( editor, 'ol' ); | ||
175 | |||
176 | element && this.commitContent( element ); | ||
177 | } | ||
178 | }; | ||
179 | } | ||
180 | } | ||
181 | |||
182 | CKEDITOR.dialog.add( 'numberedListStyle', function( editor ) { | ||
183 | return listStyle( editor, 'numberedListStyle' ); | ||
184 | } ); | ||
185 | |||
186 | CKEDITOR.dialog.add( 'bulletedListStyle', function( editor ) { | ||
187 | return listStyle( editor, 'bulletedListStyle' ); | ||
188 | } ); | ||
189 | } )(); | ||
diff --git a/sources/plugins/liststyle/lang/af.js b/sources/plugins/liststyle/lang/af.js new file mode 100644 index 0000000..6e1f287 --- /dev/null +++ b/sources/plugins/liststyle/lang/af.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'af', { | ||
6 | armenian: 'Armeense nommering', | ||
7 | bulletedTitle: 'Eienskappe van ongenommerde lys', | ||
8 | circle: 'Sirkel', | ||
9 | decimal: 'Desimale syfers (1, 2, 3, ens.)', | ||
10 | decimalLeadingZero: 'Desimale syfers met voorloopnul (01, 02, 03, ens.)', | ||
11 | disc: 'Skyf', | ||
12 | georgian: 'Georgiese nommering (an, ban, gan, ens.)', | ||
13 | lowerAlpha: 'Kleinletters (a, b, c, d, e, ens.)', | ||
14 | lowerGreek: 'Griekse kleinletters (alpha, beta, gamma, ens.)', | ||
15 | lowerRoman: 'Romeinse kleinletters (i, ii, iii, iv, v, ens.)', | ||
16 | none: 'Geen', | ||
17 | notset: '<nie ingestel nie>', | ||
18 | numberedTitle: 'Eienskappe van genommerde lys', | ||
19 | square: 'Vierkant', | ||
20 | start: 'Begin', | ||
21 | type: 'Tipe', | ||
22 | upperAlpha: 'Hoofletters (A, B, C, D, E, ens.)', | ||
23 | upperRoman: 'Romeinse hoofletters (I, II, III, IV, V, ens.)', | ||
24 | validateStartNumber: 'Beginnommer van lys moet \'n heelgetal wees.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/ar.js b/sources/plugins/liststyle/lang/ar.js new file mode 100644 index 0000000..39ba5b1 --- /dev/null +++ b/sources/plugins/liststyle/lang/ar.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'ar', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/bg.js b/sources/plugins/liststyle/lang/bg.js new file mode 100644 index 0000000..99b3535 --- /dev/null +++ b/sources/plugins/liststyle/lang/bg.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'bg', { | ||
6 | armenian: 'Арменско номериране', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Кръг', | ||
9 | decimal: 'Числа (1, 2, 3 и др.)', | ||
10 | decimalLeadingZero: 'Числа с водеща нула (01, 02, 03 и т.н.)', | ||
11 | disc: 'Диск', | ||
12 | georgian: 'Грузинско номериране (an, ban, gan, и т.н.)', | ||
13 | lowerAlpha: 'Малки букви (а, б, в, г, д и т.н.)', | ||
14 | lowerGreek: 'Малки гръцки букви (алфа, бета, гама и т.н.)', | ||
15 | lowerRoman: 'Малки римски числа (i, ii, iii, iv, v и т.н.)', | ||
16 | none: 'Няма', | ||
17 | notset: '<не е указано>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Квадрат', | ||
20 | start: 'Старт', | ||
21 | type: 'Тип', | ||
22 | upperAlpha: 'Големи букви (А, Б, В, Г, Д и т.н.)', | ||
23 | upperRoman: 'Големи римски числа (I, II, III, IV, V и т.н.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/bn.js b/sources/plugins/liststyle/lang/bn.js new file mode 100644 index 0000000..67081fe --- /dev/null +++ b/sources/plugins/liststyle/lang/bn.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'bn', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/bs.js b/sources/plugins/liststyle/lang/bs.js new file mode 100644 index 0000000..1cf4a07 --- /dev/null +++ b/sources/plugins/liststyle/lang/bs.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'bs', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/ca.js b/sources/plugins/liststyle/lang/ca.js new file mode 100644 index 0000000..4f99f3c --- /dev/null +++ b/sources/plugins/liststyle/lang/ca.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'ca', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/cs.js b/sources/plugins/liststyle/lang/cs.js new file mode 100644 index 0000000..9fa682d --- /dev/null +++ b/sources/plugins/liststyle/lang/cs.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'cs', { | ||
6 | armenian: 'Arménské', | ||
7 | bulletedTitle: 'Vlastnosti odrážek', | ||
8 | circle: 'Kroužky', | ||
9 | decimal: 'Arabská čísla (1, 2, 3, atd.)', | ||
10 | decimalLeadingZero: 'Arabská čísla uvozená nulou (01, 02, 03, atd.)', | ||
11 | disc: 'Kolečka', | ||
12 | georgian: 'Gruzínské (an, ban, gan, atd.)', | ||
13 | lowerAlpha: 'Malá latinka (a, b, c, d, e, atd.)', | ||
14 | lowerGreek: 'Malé řecké (alpha, beta, gamma, atd.)', | ||
15 | lowerRoman: 'Malé římské (i, ii, iii, iv, v, atd.)', | ||
16 | none: 'Nic', | ||
17 | notset: '<nenastaveno>', | ||
18 | numberedTitle: 'Vlastnosti číslování', | ||
19 | square: 'Čtverce', | ||
20 | start: 'Počátek', | ||
21 | type: 'Typ', | ||
22 | upperAlpha: 'Velká latinka (A, B, C, D, E, atd.)', | ||
23 | upperRoman: 'Velké římské (I, II, III, IV, V, atd.)', | ||
24 | validateStartNumber: 'Číslování musí začínat celým číslem.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/cy.js b/sources/plugins/liststyle/lang/cy.js new file mode 100644 index 0000000..d19bafb --- /dev/null +++ b/sources/plugins/liststyle/lang/cy.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'cy', { | ||
6 | armenian: 'Rhifo Armeneg', | ||
7 | bulletedTitle: 'Priodweddau Rhestr Fwled', | ||
8 | circle: 'Cylch', | ||
9 | decimal: 'Degol (1, 2, 3, ayyb.)', | ||
10 | decimalLeadingZero: 'Degol â sero arweiniol (01, 02, 03, ayyb.)', | ||
11 | disc: 'Disg', | ||
12 | georgian: 'Rhifau Sioraidd (an, ban, gan, ayyb.)', | ||
13 | lowerAlpha: 'Alffa Is (a, b, c, d, e, ayyb.)', | ||
14 | lowerGreek: 'Groeg Is (alpha, beta, gamma, ayyb.)', | ||
15 | lowerRoman: 'Rhufeinig Is (i, ii, iii, iv, v, ayyb.)', | ||
16 | none: 'Dim', | ||
17 | notset: '<heb osod>', | ||
18 | numberedTitle: 'Priodweddau Rhestr Rifol', | ||
19 | square: 'Sgwâr', | ||
20 | start: 'Dechrau', | ||
21 | type: 'Math', | ||
22 | upperAlpha: 'Alffa Uwch (A, B, C, D, E, ayyb.)', | ||
23 | upperRoman: 'Rhufeinig Uwch (I, II, III, IV, V, ayyb.)', | ||
24 | validateStartNumber: 'Rhaid bod y rhif cychwynnol yn gyfanrif.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/da.js b/sources/plugins/liststyle/lang/da.js new file mode 100644 index 0000000..3bbdfbf --- /dev/null +++ b/sources/plugins/liststyle/lang/da.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'da', { | ||
6 | armenian: 'Armensk nummering', | ||
7 | bulletedTitle: 'Værdier for cirkelpunktopstilling', | ||
8 | circle: 'Cirkel', | ||
9 | decimal: 'Decimal (1, 2, 3, osv.)', | ||
10 | decimalLeadingZero: 'Decimaler med 0 først (01, 02, 03, etc.)', | ||
11 | disc: 'Værdier for diskpunktopstilling', | ||
12 | georgian: 'Georgiansk nummering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Små alfabet (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Små græsk (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Små romerske (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'Ingen', | ||
17 | notset: '<ikke defineret>', | ||
18 | numberedTitle: 'Egenskaber for nummereret liste', | ||
19 | square: 'Firkant', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Store alfabet (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Store romerske (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'Den nummererede liste skal starte med et rundt nummer' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/de-ch.js b/sources/plugins/liststyle/lang/de-ch.js new file mode 100644 index 0000000..13bf8c9 --- /dev/null +++ b/sources/plugins/liststyle/lang/de-ch.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'de-ch', { | ||
6 | armenian: 'Armenische Nummerierung', | ||
7 | bulletedTitle: 'Aufzählungslisteneigenschaften', | ||
8 | circle: 'Ring', | ||
9 | decimal: 'Dezimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Dezimal mit führender Null (01, 02, 03, usw.)', | ||
11 | disc: 'Kreis', | ||
12 | georgian: 'Georgische Nummerierung (an, ban, gan, usw.)', | ||
13 | lowerAlpha: 'Klein Alpha (a, b, c, d, e, usw.)', | ||
14 | lowerGreek: 'Klein griechisch (alpha, beta, gamma, usw.)', | ||
15 | lowerRoman: 'Klein römisch (i, ii, iii, iv, v, usw.)', | ||
16 | none: 'Keine', | ||
17 | notset: '<nicht festgelegt>', | ||
18 | numberedTitle: 'Nummerierte Listeneigenschaften', | ||
19 | square: 'Quadrat', | ||
20 | start: 'Start', | ||
21 | type: 'Typ', | ||
22 | upperAlpha: 'Gross alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Gross römisch (I, II, III, IV, V, usw.)', | ||
24 | validateStartNumber: 'Listenstartnummer muss eine ganze Zahl sein.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/de.js b/sources/plugins/liststyle/lang/de.js new file mode 100644 index 0000000..5117015 --- /dev/null +++ b/sources/plugins/liststyle/lang/de.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'de', { | ||
6 | armenian: 'Armenische Nummerierung', | ||
7 | bulletedTitle: 'Aufzählungslisteneigenschaften', | ||
8 | circle: 'Ring', | ||
9 | decimal: 'Dezimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Dezimal mit führender Null (01, 02, 03, usw.)', | ||
11 | disc: 'Kreis', | ||
12 | georgian: 'Georgische Nummerierung (an, ban, gan, usw.)', | ||
13 | lowerAlpha: 'Klein Alpha (a, b, c, d, e, usw.)', | ||
14 | lowerGreek: 'Klein griechisch (alpha, beta, gamma, usw.)', | ||
15 | lowerRoman: 'Klein römisch (i, ii, iii, iv, v, usw.)', | ||
16 | none: 'Keine', | ||
17 | notset: '<nicht festgelegt>', | ||
18 | numberedTitle: 'Nummerierte Listeneigenschaften', | ||
19 | square: 'Quadrat', | ||
20 | start: 'Start', | ||
21 | type: 'Typ', | ||
22 | upperAlpha: 'Groß alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Groß römisch (I, II, III, IV, V, usw.)', | ||
24 | validateStartNumber: 'Listenstartnummer muss eine ganze Zahl sein.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/el.js b/sources/plugins/liststyle/lang/el.js new file mode 100644 index 0000000..6965694 --- /dev/null +++ b/sources/plugins/liststyle/lang/el.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'el', { | ||
6 | armenian: 'Αρμενική αρίθμηση', | ||
7 | bulletedTitle: 'Ιδιότητες Λίστας Σημείων', | ||
8 | circle: 'Κύκλος', | ||
9 | decimal: 'Δεκαδική (1, 2, 3, κτλ)', | ||
10 | decimalLeadingZero: 'Δεκαδική με αρχικό μηδεν (01, 02, 03, κτλ)', | ||
11 | disc: 'Δίσκος', | ||
12 | georgian: 'Γεωργιανή αρίθμηση (ა, ბ, გ, κτλ)', | ||
13 | lowerAlpha: 'Μικρά Λατινικά (a, b, c, d, e, κτλ.)', | ||
14 | lowerGreek: 'Μικρά Ελληνικά (α, β, γ, κτλ)', | ||
15 | lowerRoman: 'Μικρά Ρωμαϊκά (i, ii, iii, iv, v, κτλ)', | ||
16 | none: 'Καμία', | ||
17 | notset: '<δεν έχει οριστεί>', | ||
18 | numberedTitle: 'Ιδιότητες Αριθμημένης Λίστας ', | ||
19 | square: 'Τετράγωνο', | ||
20 | start: 'Εκκίνηση', | ||
21 | type: 'Τύπος', | ||
22 | upperAlpha: 'Κεφαλαία Λατινικά (A, B, C, D, E, κτλ)', | ||
23 | upperRoman: 'Κεφαλαία Ρωμαϊκά (I, II, III, IV, V, κτλ)', | ||
24 | validateStartNumber: 'Ο αριθμός εκκίνησης της αρίθμησης πρέπει να είναι ακέραιος αριθμός.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/en-au.js b/sources/plugins/liststyle/lang/en-au.js new file mode 100644 index 0000000..2ad0e28 --- /dev/null +++ b/sources/plugins/liststyle/lang/en-au.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'en-au', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/en-ca.js b/sources/plugins/liststyle/lang/en-ca.js new file mode 100644 index 0000000..55c674a --- /dev/null +++ b/sources/plugins/liststyle/lang/en-ca.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'en-ca', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/en-gb.js b/sources/plugins/liststyle/lang/en-gb.js new file mode 100644 index 0000000..522112c --- /dev/null +++ b/sources/plugins/liststyle/lang/en-gb.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'en-gb', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/en.js b/sources/plugins/liststyle/lang/en.js new file mode 100644 index 0000000..aebe65e --- /dev/null +++ b/sources/plugins/liststyle/lang/en.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'en', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/eo.js b/sources/plugins/liststyle/lang/eo.js new file mode 100644 index 0000000..151e47e --- /dev/null +++ b/sources/plugins/liststyle/lang/eo.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'eo', { | ||
6 | armenian: 'Armena nombrado', | ||
7 | bulletedTitle: 'Atributoj de Bula Listo', | ||
8 | circle: 'Cirklo', | ||
9 | decimal: 'Dekumaj Nombroj (1, 2, 3, ktp.)', | ||
10 | decimalLeadingZero: 'Dekumaj Nombroj malantaŭ nulo (01, 02, 03, ktp.)', | ||
11 | disc: 'Disko', | ||
12 | georgian: 'Gruza nombrado (an, ban, gan, ktp.)', | ||
13 | lowerAlpha: 'Minusklaj Literoj (a, b, c, d, e, ktp.)', | ||
14 | lowerGreek: 'Grekaj Minusklaj Literoj (alpha, beta, gamma, ktp.)', | ||
15 | lowerRoman: 'Minusklaj Romanaj Nombroj (i, ii, iii, iv, v, ktp.)', | ||
16 | none: 'Neniu', | ||
17 | notset: '<Defaŭlta>', | ||
18 | numberedTitle: 'Atributoj de Numera Listo', | ||
19 | square: 'kvadrato', | ||
20 | start: 'Komenco', | ||
21 | type: 'Tipo', | ||
22 | upperAlpha: 'Majusklaj Literoj (A, B, C, D, E, ktp.)', | ||
23 | upperRoman: 'Majusklaj Romanaj Nombroj (I, II, III, IV, V, ktp.)', | ||
24 | validateStartNumber: 'La unua listero devas esti entjera nombro.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/es.js b/sources/plugins/liststyle/lang/es.js new file mode 100644 index 0000000..67f5a0e --- /dev/null +++ b/sources/plugins/liststyle/lang/es.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'es', { | ||
6 | armenian: 'Numeración armenia', | ||
7 | bulletedTitle: 'Propiedades de viñetas', | ||
8 | circle: 'Círculo', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal con cero inicial (01, 02, 03, etc.)', | ||
11 | disc: 'Disco', | ||
12 | georgian: 'Numeración georgiana (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Alfabeto en minúsculas (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Letras griegas (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Números romanos en minúsculas (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'Ninguno', | ||
17 | notset: '<sin establecer>', | ||
18 | numberedTitle: 'Propiedades de lista numerada', | ||
19 | square: 'Cuadrado', | ||
20 | start: 'Inicio', | ||
21 | type: 'Tipo', | ||
22 | upperAlpha: 'Alfabeto en mayúsculas (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Números romanos en mayúsculas (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'El Inicio debe ser un número entero.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/et.js b/sources/plugins/liststyle/lang/et.js new file mode 100644 index 0000000..38273f2 --- /dev/null +++ b/sources/plugins/liststyle/lang/et.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'et', { | ||
6 | armenian: 'Armeenia numbrid', | ||
7 | bulletedTitle: 'Punktloendi omadused', | ||
8 | circle: 'Ring', | ||
9 | decimal: 'Numbrid (1, 2, 3, jne)', | ||
10 | decimalLeadingZero: 'Numbrid algusnulliga (01, 02, 03, jne)', | ||
11 | disc: 'Täpp', | ||
12 | georgian: 'Gruusia numbrid (an, ban, gan, jne)', | ||
13 | lowerAlpha: 'Väiketähed (a, b, c, d, e, jne)', | ||
14 | lowerGreek: 'Kreeka väiketähed (alpha, beta, gamma, jne)', | ||
15 | lowerRoman: 'Väiksed rooma numbrid (i, ii, iii, iv, v, jne)', | ||
16 | none: 'Puudub', | ||
17 | notset: '<pole määratud>', | ||
18 | numberedTitle: 'Numberloendi omadused', | ||
19 | square: 'Ruut', | ||
20 | start: 'Algus', | ||
21 | type: 'Liik', | ||
22 | upperAlpha: 'Suurtähed (A, B, C, D, E, jne)', | ||
23 | upperRoman: 'Suured rooma numbrid (I, II, III, IV, V, jne)', | ||
24 | validateStartNumber: 'Loendi algusnumber peab olema täisarv.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/eu.js b/sources/plugins/liststyle/lang/eu.js new file mode 100644 index 0000000..dca69fc --- /dev/null +++ b/sources/plugins/liststyle/lang/eu.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'eu', { | ||
6 | armenian: 'Zenbakitze armeniarra', | ||
7 | bulletedTitle: 'Buletadun zerrendaren propietateak', | ||
8 | circle: 'Zirkulua', | ||
9 | decimal: 'Hamartarra (1, 2, 3...)', | ||
10 | decimalLeadingZero: 'Aurretik zeroa duen hamartarra (01, 02, 03...)', | ||
11 | disc: 'Diskoa', | ||
12 | georgian: 'Zenbakitze georgiarra (an, ban, gan...)', | ||
13 | lowerAlpha: 'Alfabetoa minuskulaz (a, b, c, d, e...)', | ||
14 | lowerGreek: 'Greziera minuskulaz (alpha, beta, gamma...)', | ||
15 | lowerRoman: 'Erromatarra minuskulaz (i, ii, iii, iv, v...)', | ||
16 | none: 'Bat ere ez', | ||
17 | notset: '<ezarri gabea>', | ||
18 | numberedTitle: 'Zenbakidun zerrendaren propietateak', | ||
19 | square: 'Karratua', | ||
20 | start: 'Hasi', | ||
21 | type: 'Mota', | ||
22 | upperAlpha: 'Alfabetoa maiuskulaz (A, B, C, D, E...)', | ||
23 | upperRoman: 'Erromatarra maiuskulaz (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'Zerrendaren hasierako zenbakiak zenbaki osoa izan behar du.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/fa.js b/sources/plugins/liststyle/lang/fa.js new file mode 100644 index 0000000..e5f3505 --- /dev/null +++ b/sources/plugins/liststyle/lang/fa.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'fa', { | ||
6 | armenian: 'شمارهگذاری ارمنی', | ||
7 | bulletedTitle: 'خصوصیات فهرست نقطهای', | ||
8 | circle: 'دایره', | ||
9 | decimal: 'دهدهی (۱، ۲، ۳، ...)', | ||
10 | decimalLeadingZero: 'دهدهی همراه با صفر (۰۱، ۰۲، ۰۳، ...)', | ||
11 | disc: 'صفحه گرد', | ||
12 | georgian: 'شمارهگذاری گریگورین (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'پانویس الفبایی (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'پانویس یونانی (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'پانویس رومی (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'هیچ', | ||
17 | notset: '<تنظیم نشده>', | ||
18 | numberedTitle: 'ویژگیهای فهرست شمارهدار', | ||
19 | square: 'چهارگوش', | ||
20 | start: 'شروع', | ||
21 | type: 'نوع', | ||
22 | upperAlpha: 'بالانویس الفبایی (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'بالانویس رومی (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'فهرست شماره شروع باید یک عدد صحیح باشد.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/fi.js b/sources/plugins/liststyle/lang/fi.js new file mode 100644 index 0000000..83eb343 --- /dev/null +++ b/sources/plugins/liststyle/lang/fi.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'fi', { | ||
6 | armenian: 'Armeenialainen numerointi', | ||
7 | bulletedTitle: 'Numeroimattoman listan ominaisuudet', | ||
8 | circle: 'Ympyrä', | ||
9 | decimal: 'Desimaalit (1, 2, 3, jne.)', | ||
10 | decimalLeadingZero: 'Desimaalit, alussa nolla (01, 02, 03, jne.)', | ||
11 | disc: 'Levy', | ||
12 | georgian: 'Georgialainen numerointi (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Pienet aakkoset (a, b, c, d, e, jne.)', | ||
14 | lowerGreek: 'Pienet kreikkalaiset (alpha, beta, gamma, jne.)', | ||
15 | lowerRoman: 'Pienet roomalaiset (i, ii, iii, iv, v, jne.)', | ||
16 | none: 'Ei mikään', | ||
17 | notset: '<ei asetettu>', | ||
18 | numberedTitle: 'Numeroidun listan ominaisuudet', | ||
19 | square: 'Neliö', | ||
20 | start: 'Alku', | ||
21 | type: 'Tyyppi', | ||
22 | upperAlpha: 'Isot aakkoset (A, B, C, D, E, jne.)', | ||
23 | upperRoman: 'Isot roomalaiset (I, II, III, IV, V, jne.)', | ||
24 | validateStartNumber: 'Listan ensimmäisen numeron tulee olla kokonaisluku.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/fo.js b/sources/plugins/liststyle/lang/fo.js new file mode 100644 index 0000000..537ec6f --- /dev/null +++ b/sources/plugins/liststyle/lang/fo.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'fo', { | ||
6 | armenian: 'Armensk talskipan', | ||
7 | bulletedTitle: 'Eginleikar fyri lista við prikkum', | ||
8 | circle: 'Sirkul', | ||
9 | decimal: 'Vanlig tøl (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Tøl við null frammanfyri (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgisk talskipan (an, ban, gan, osv.)', | ||
13 | lowerAlpha: 'Lítlir bókstavir (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Grikskt við lítlum (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lítil rómaratøl (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'Einki', | ||
17 | notset: '<ikki sett>', | ||
18 | numberedTitle: 'Eginleikar fyri lista við tølum', | ||
19 | square: 'Fýrkantur', | ||
20 | start: 'Byrjan', | ||
21 | type: 'Slag', | ||
22 | upperAlpha: 'Stórir bókstavir (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Stór rómaratøl (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'Byrjunartalið fyri lista má vera eitt heiltal.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/fr-ca.js b/sources/plugins/liststyle/lang/fr-ca.js new file mode 100644 index 0000000..fa78407 --- /dev/null +++ b/sources/plugins/liststyle/lang/fr-ca.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'fr-ca', { | ||
6 | armenian: 'Numération arménienne', | ||
7 | bulletedTitle: 'Propriété de liste à puce', | ||
8 | circle: 'Cercle', | ||
9 | decimal: 'Décimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Décimal avec zéro (01, 02, 03, etc.)', | ||
11 | disc: 'Disque', | ||
12 | georgian: 'Numération géorgienne (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Alphabétique minuscule (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Grecque minuscule (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Romain minuscule (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'Aucun', | ||
17 | notset: '<non défini>', | ||
18 | numberedTitle: 'Propriété de la liste numérotée', | ||
19 | square: 'Carré', | ||
20 | start: 'Début', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Alphabétique majuscule (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Romain Majuscule (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'Le numéro de début de liste doit être un entier.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/fr.js b/sources/plugins/liststyle/lang/fr.js new file mode 100644 index 0000000..af7b112 --- /dev/null +++ b/sources/plugins/liststyle/lang/fr.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'fr', { | ||
6 | armenian: 'Numération arménienne', | ||
7 | bulletedTitle: 'Propriétés de la liste à puces', | ||
8 | circle: 'Cercle', | ||
9 | decimal: 'Décimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Décimal précédé par un 0 (01, 02, 03, etc.)', | ||
11 | disc: 'Disque', | ||
12 | georgian: 'Numération géorgienne (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Alphabétique minuscules (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Grec minuscule (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Nombres romains minuscules (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'Aucun', | ||
17 | notset: '<Non défini>', | ||
18 | numberedTitle: 'Propriétés de la liste numérotée', | ||
19 | square: 'Carré', | ||
20 | start: 'Début', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Alphabétique majuscules (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Nombres romains majuscules (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'Le premier élément de la liste doit être un nombre entier.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/gl.js b/sources/plugins/liststyle/lang/gl.js new file mode 100644 index 0000000..d3511ed --- /dev/null +++ b/sources/plugins/liststyle/lang/gl.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'gl', { | ||
6 | armenian: 'Numeración armenia', | ||
7 | bulletedTitle: 'Propiedades da lista viñeteada', | ||
8 | circle: 'Circulo', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal con cero á esquerda (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Numeración xeorxiana (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Alfabeto en minúsculas (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Grego en minúsculas (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Números romanos en minúsculas (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'Ningún', | ||
17 | notset: '<sen estabelecer>', | ||
18 | numberedTitle: 'Propiedades da lista numerada', | ||
19 | square: 'Cadrado', | ||
20 | start: 'Inicio', | ||
21 | type: 'Tipo', | ||
22 | upperAlpha: 'Alfabeto en maiúsculas (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Números romanos en maiúsculas (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'O número de inicio da lista debe ser un número enteiro.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/gu.js b/sources/plugins/liststyle/lang/gu.js new file mode 100644 index 0000000..dc18140 --- /dev/null +++ b/sources/plugins/liststyle/lang/gu.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'gu', { | ||
6 | armenian: 'અરમેનિયન આંકડા પદ્ધતિ', | ||
7 | bulletedTitle: 'બુલેટેડ લીસ્ટના ગુણ', | ||
8 | circle: 'વર્તુળ', | ||
9 | decimal: 'આંકડા (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'સુન્ય આગળ આંકડા (01, 02, 03, etc.)', | ||
11 | disc: 'ડિસ્ક', | ||
12 | georgian: 'ગેઓર્ગિયન આંકડા પદ્ધતિ (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'આલ્ફા નાના (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'ગ્રીક નાના (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'રોમન નાના (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'કસુ ', | ||
17 | notset: '<સેટ નથી>', | ||
18 | numberedTitle: 'આંકડાના લીસ્ટના ગુણ', | ||
19 | square: 'ચોરસ', | ||
20 | start: 'શરુ કરવું', | ||
21 | type: 'પ્રકાર', | ||
22 | upperAlpha: 'આલ્ફા મોટા (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'રોમન મોટા (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'લીસ્ટના સરુઆતનો આંકડો પુરો હોવો જોઈએ.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/he.js b/sources/plugins/liststyle/lang/he.js new file mode 100644 index 0000000..0ad2282 --- /dev/null +++ b/sources/plugins/liststyle/lang/he.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'he', { | ||
6 | armenian: 'ספרות ארמניות', | ||
7 | bulletedTitle: 'תכונות רשימת תבליטים', | ||
8 | circle: 'עיגול ריק', | ||
9 | decimal: 'ספרות (1, 2, 3 וכו\')', | ||
10 | decimalLeadingZero: 'ספרות עם 0 בהתחלה (01, 02, 03 וכו\')', | ||
11 | disc: 'עיגול מלא', | ||
12 | georgian: 'ספרות גיאורגיות (an, ban, gan וכו\')', | ||
13 | lowerAlpha: 'אותיות אנגליות קטנות (a, b, c, d, e וכו\')', | ||
14 | lowerGreek: 'אותיות יווניות קטנות (alpha, beta, gamma וכו\')', | ||
15 | lowerRoman: 'ספירה רומית באותיות קטנות (i, ii, iii, iv, v וכו\')', | ||
16 | none: 'ללא', | ||
17 | notset: '<לא נקבע>', | ||
18 | numberedTitle: 'תכונות רשימה ממוספרת', | ||
19 | square: 'ריבוע', | ||
20 | start: 'תחילת מספור', | ||
21 | type: 'סוג', | ||
22 | upperAlpha: 'אותיות אנגליות גדולות (A, B, C, D, E וכו\')', | ||
23 | upperRoman: 'ספירה רומיות באותיות גדולות (I, II, III, IV, V וכו\')', | ||
24 | validateStartNumber: 'שדה תחילת המספור חייב להכיל מספר שלם.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/hi.js b/sources/plugins/liststyle/lang/hi.js new file mode 100644 index 0000000..74333bd --- /dev/null +++ b/sources/plugins/liststyle/lang/hi.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'hi', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/hr.js b/sources/plugins/liststyle/lang/hr.js new file mode 100644 index 0000000..6f16bc7 --- /dev/null +++ b/sources/plugins/liststyle/lang/hr.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'hr', { | ||
6 | armenian: 'Armenijska numeracija', | ||
7 | bulletedTitle: 'Svojstva liste', | ||
8 | circle: 'Krug', | ||
9 | decimal: 'Decimalna numeracija (1, 2, 3, itd.)', | ||
10 | decimalLeadingZero: 'Decimalna s vodećom nulom (01, 02, 03, itd)', | ||
11 | disc: 'Disk', | ||
12 | georgian: 'Gruzijska numeracija(an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Znakovi mala slova (a, b, c, d, e, itd.)', | ||
14 | lowerGreek: 'Grčka numeracija mala slova (alfa, beta, gama, itd).', | ||
15 | lowerRoman: 'Romanska numeracija mala slova (i, ii, iii, iv, v, itd.)', | ||
16 | none: 'Bez', | ||
17 | notset: '<nije određen>', | ||
18 | numberedTitle: 'Svojstva brojčane liste', | ||
19 | square: 'Kvadrat', | ||
20 | start: 'Početak', | ||
21 | type: 'Vrsta', | ||
22 | upperAlpha: 'Znakovi velika slova (A, B, C, D, E, itd.)', | ||
23 | upperRoman: 'Romanska numeracija velika slova (I, II, III, IV, V, itd.)', | ||
24 | validateStartNumber: 'Početak brojčane liste mora biti cijeli broj.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/hu.js b/sources/plugins/liststyle/lang/hu.js new file mode 100644 index 0000000..ca62ff7 --- /dev/null +++ b/sources/plugins/liststyle/lang/hu.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'hu', { | ||
6 | armenian: 'Örmény számozás', | ||
7 | bulletedTitle: 'Pontozott lista tulajdonságai', | ||
8 | circle: 'Kör', | ||
9 | decimal: 'Arab számozás (1, 2, 3, stb.)', | ||
10 | decimalLeadingZero: 'Számozás bevezető nullákkal (01, 02, 03, stb.)', | ||
11 | disc: 'Korong', | ||
12 | georgian: 'Grúz számozás (an, ban, gan, stb.)', | ||
13 | lowerAlpha: 'Kisbetűs (a, b, c, d, e, stb.)', | ||
14 | lowerGreek: 'Görög (alpha, beta, gamma, stb.)', | ||
15 | lowerRoman: 'Római kisbetűs (i, ii, iii, iv, v, stb.)', | ||
16 | none: 'Nincs', | ||
17 | notset: '<Nincs beállítva>', | ||
18 | numberedTitle: 'Sorszámozott lista tulajdonságai', | ||
19 | square: 'Négyzet', | ||
20 | start: 'Kezdőszám', | ||
21 | type: 'Típus', | ||
22 | upperAlpha: 'Nagybetűs (A, B, C, D, E, stb.)', | ||
23 | upperRoman: 'Római nagybetűs (I, II, III, IV, V, stb.)', | ||
24 | validateStartNumber: 'A kezdőszám nem lehet tört érték.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/id.js b/sources/plugins/liststyle/lang/id.js new file mode 100644 index 0000000..d0a5524 --- /dev/null +++ b/sources/plugins/liststyle/lang/id.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'id', { | ||
6 | armenian: 'Armenian numbering', // MISSING | ||
7 | bulletedTitle: 'Bulleted List Properties', // MISSING | ||
8 | circle: 'Lingkaran', | ||
9 | decimal: 'Desimal (1, 2, 3, dst.)', | ||
10 | decimalLeadingZero: 'Desimal diawali angka nol (01, 02, 03, dst.)', | ||
11 | disc: 'Cakram', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', // MISSING | ||
13 | lowerAlpha: 'Huruf Kecil (a, b, c, d, e, dst.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING | ||
15 | lowerRoman: 'Angka Romawi (i, ii, iii, iv, v, dst.)', | ||
16 | none: 'Tidak ada', | ||
17 | notset: '<tidak diatur>', | ||
18 | numberedTitle: 'Numbered List Properties', // MISSING | ||
19 | square: 'Persegi', | ||
20 | start: 'Mulai', | ||
21 | type: 'Tipe', | ||
22 | upperAlpha: 'Huruf Besar (A, B, C, D, E, dst.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING | ||
24 | validateStartNumber: 'List start number must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/is.js b/sources/plugins/liststyle/lang/is.js new file mode 100644 index 0000000..b6ad69f --- /dev/null +++ b/sources/plugins/liststyle/lang/is.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'is', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/it.js b/sources/plugins/liststyle/lang/it.js new file mode 100644 index 0000000..7d376a4 --- /dev/null +++ b/sources/plugins/liststyle/lang/it.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'it', { | ||
6 | armenian: 'Numerazione Armena', | ||
7 | bulletedTitle: 'Proprietà liste puntate', | ||
8 | circle: 'Cerchio', | ||
9 | decimal: 'Decimale (1, 2, 3, ecc.)', | ||
10 | decimalLeadingZero: 'Decimale preceduto da 0 (01, 02, 03, ecc.)', | ||
11 | disc: 'Disco', | ||
12 | georgian: 'Numerazione Georgiana (an, ban, gan, ecc.)', | ||
13 | lowerAlpha: 'Alfabetico minuscolo (a, b, c, d, e, ecc.)', | ||
14 | lowerGreek: 'Greco minuscolo (alpha, beta, gamma, ecc.)', | ||
15 | lowerRoman: 'Numerazione Romana minuscola (i, ii, iii, iv, v, ecc.)', | ||
16 | none: 'Nessuno', | ||
17 | notset: '<non impostato>', | ||
18 | numberedTitle: 'Proprietà liste numerate', | ||
19 | square: 'Quadrato', | ||
20 | start: 'Inizio', | ||
21 | type: 'Tipo', | ||
22 | upperAlpha: 'Alfabetico maiuscolo (A, B, C, D, E, ecc.)', | ||
23 | upperRoman: 'Numerazione Romana maiuscola (I, II, III, IV, V, ecc.)', | ||
24 | validateStartNumber: 'Il numero di inizio di una lista numerata deve essere un numero intero.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/ja.js b/sources/plugins/liststyle/lang/ja.js new file mode 100644 index 0000000..da735ab --- /dev/null +++ b/sources/plugins/liststyle/lang/ja.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'ja', { | ||
6 | armenian: 'アルメニア数字', | ||
7 | bulletedTitle: '箇条書きのプロパティ', | ||
8 | circle: '白丸', | ||
9 | decimal: '数字 (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: '0付きの数字 (01, 02, 03, etc.)', | ||
11 | disc: '黒丸', | ||
12 | georgian: 'グルジア数字 (an, ban, gan, etc.)', | ||
13 | lowerAlpha: '小文字アルファベット (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: '小文字ギリシャ文字 (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: '小文字ローマ数字 (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'なし', | ||
17 | notset: '<なし>', | ||
18 | numberedTitle: '番号付きリストのプロパティ', | ||
19 | square: '四角', | ||
20 | start: '開始', | ||
21 | type: '種類', | ||
22 | upperAlpha: '大文字アルファベット (A, B, C, D, E, etc.)', | ||
23 | upperRoman: '大文字ローマ数字 (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'リストの開始番号は数値で入力してください。' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/ka.js b/sources/plugins/liststyle/lang/ka.js new file mode 100644 index 0000000..8adcd16 --- /dev/null +++ b/sources/plugins/liststyle/lang/ka.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'ka', { | ||
6 | armenian: 'სომხური გადანომრვა', | ||
7 | bulletedTitle: 'ღილებიანი სიის პარამეტრები', | ||
8 | circle: 'წრეწირი', | ||
9 | decimal: 'რიცხვებით (1, 2, 3, ..)', | ||
10 | decimalLeadingZero: 'ნულით დაწყებული რიცხვებით (01, 02, 03, ..)', | ||
11 | disc: 'წრე', | ||
12 | georgian: 'ქართული გადანომრვა (ან, ბან, გან, ..)', | ||
13 | lowerAlpha: 'პატარა ლათინური ასოებით (a, b, c, d, e, ..)', | ||
14 | lowerGreek: 'პატარა ბერძნული ასოებით (ალფა, ბეტა, გამა, ..)', | ||
15 | lowerRoman: 'რომაული გადანომრვცა პატარა ციფრებით (i, ii, iii, iv, v, ..)', | ||
16 | none: 'არაფერი', | ||
17 | notset: '<არაფერი>', | ||
18 | numberedTitle: 'გადანომრილი სიის პარამეტრები', | ||
19 | square: 'კვადრატი', | ||
20 | start: 'საწყისი', | ||
21 | type: 'ტიპი', | ||
22 | upperAlpha: 'დიდი ლათინური ასოებით (A, B, C, D, E, ..)', | ||
23 | upperRoman: 'რომაული გადანომრვა დიდი ციფრებით (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'სიის საწყისი მთელი რიცხვი უნდა იყოს.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/km.js b/sources/plugins/liststyle/lang/km.js new file mode 100644 index 0000000..6313931 --- /dev/null +++ b/sources/plugins/liststyle/lang/km.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'km', { | ||
6 | armenian: 'លេខអារមេនី', | ||
7 | bulletedTitle: 'លក្ខណៈសម្បត្តិបញ្ជីជាចំណុច', | ||
8 | circle: 'រង្វង់មូល', | ||
9 | decimal: 'លេខទសភាគ (1, 2, 3, ...)', | ||
10 | decimalLeadingZero: 'ទសភាគចាប់ផ្ដើមពីសូន្យ (01, 02, 03, ...)', | ||
11 | disc: 'ថាស', | ||
12 | georgian: 'លេខចចជា (an, ban, gan, ...)', | ||
13 | lowerAlpha: 'ព្យញ្ជនៈតូច (a, b, c, d, e, ...)', | ||
14 | lowerGreek: 'លេខក្រិកតូច (alpha, beta, gamma, ...)', | ||
15 | lowerRoman: 'លេខរ៉ូម៉ាំងតូច (i, ii, iii, iv, v, ...)', | ||
16 | none: 'គ្មាន', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'លក្ខណៈសម្បត្តិបញ្ជីជាលេខ', | ||
19 | square: 'ការេ', | ||
20 | start: 'ចាប់ផ្ដើម', | ||
21 | type: 'ប្រភេទ', | ||
22 | upperAlpha: 'អក្សរធំ (A, B, C, D, E, ...)', | ||
23 | upperRoman: 'លេខរ៉ូម៉ាំងធំ (I, II, III, IV, V, ...)', | ||
24 | validateStartNumber: 'លេខចាប់ផ្ដើមបញ្ជី ត្រូវតែជាតួលេខពិតប្រាកដ។' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/ko.js b/sources/plugins/liststyle/lang/ko.js new file mode 100644 index 0000000..f3f7669 --- /dev/null +++ b/sources/plugins/liststyle/lang/ko.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'ko', { | ||
6 | armenian: '아르메니아 숫자', | ||
7 | bulletedTitle: '순서 없는 목록 속성', | ||
8 | circle: '원', | ||
9 | decimal: '수 (1, 2, 3, 등)', | ||
10 | decimalLeadingZero: '0이 붙은 수 (01, 02, 03, 등)', | ||
11 | disc: '내림차순', | ||
12 | georgian: '그루지야 숫자 (an, ban, gan, 등)', | ||
13 | lowerAlpha: '영소문자 (a, b, c, d, e, 등)', | ||
14 | lowerGreek: '그리스 소문자 (alpha, beta, gamma, 등)', | ||
15 | lowerRoman: '로마 소문자 (i, ii, iii, iv, v, 등)', | ||
16 | none: '없음', | ||
17 | notset: '<설정 없음>', | ||
18 | numberedTitle: '순서 있는 목록 속성', | ||
19 | square: '사각', | ||
20 | start: '시작', | ||
21 | type: '유형', | ||
22 | upperAlpha: '영대문자 (A, B, C, D, E, 등)', | ||
23 | upperRoman: '로마 대문자 (I, II, III, IV, V, 등)', | ||
24 | validateStartNumber: '목록 시작 숫자는 정수여야 합니다.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/ku.js b/sources/plugins/liststyle/lang/ku.js new file mode 100644 index 0000000..3656bef --- /dev/null +++ b/sources/plugins/liststyle/lang/ku.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'ku', { | ||
6 | armenian: 'ئاراستەی ژمارەی ئەرمەنی', | ||
7 | bulletedTitle: 'خاسیەتی لیستی خاڵی', | ||
8 | circle: 'بازنه', | ||
9 | decimal: 'ژمارە (1, 2, 3, وە هیتر.)', | ||
10 | decimalLeadingZero: 'ژمارە سفڕی لەپێشەوه (01, 02, 03, وە هیتر.)', | ||
11 | disc: 'پەپکە', | ||
12 | georgian: 'ئاراستەی ژمارەی جۆڕجی (an, ban, gan, وە هیتر.)', | ||
13 | lowerAlpha: 'ئەلفابێی بچووك (a, b, c, d, e, وە هیتر.)', | ||
14 | lowerGreek: 'یۆنانی بچووك (alpha, beta, gamma, وە هیتر.)', | ||
15 | lowerRoman: 'ژمارەی ڕۆمی بچووك (i, ii, iii, iv, v, وە هیتر.)', | ||
16 | none: 'هیچ', | ||
17 | notset: '<دانەندراوه>', | ||
18 | numberedTitle: 'خاسیەتی لیستی ژمارەیی', | ||
19 | square: 'چووراگۆشە', | ||
20 | start: 'دەستپێکردن', | ||
21 | type: 'جۆر', | ||
22 | upperAlpha: 'ئەلفابێی گەوره (A, B, C, D, E, وە هیتر.)', | ||
23 | upperRoman: 'ژمارەی ڕۆمی گەوره (I, II, III, IV, V, وە هیتر.)', | ||
24 | validateStartNumber: 'دەستپێکەری لیستی ژمارەیی دەبێت تەنها ژمارە بێت.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/lt.js b/sources/plugins/liststyle/lang/lt.js new file mode 100644 index 0000000..444ee89 --- /dev/null +++ b/sources/plugins/liststyle/lang/lt.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'lt', { | ||
6 | armenian: 'Armėniški skaitmenys', | ||
7 | bulletedTitle: 'Ženklelinio sąrašo nustatymai', | ||
8 | circle: 'Apskritimas', | ||
9 | decimal: 'Dešimtainis (1, 2, 3, t.t)', | ||
10 | decimalLeadingZero: 'Dešimtainis su nuliu priekyje (01, 02, 03, t.t)', | ||
11 | disc: 'Diskas', | ||
12 | georgian: 'Gruziniški skaitmenys (an, ban, gan, t.t)', | ||
13 | lowerAlpha: 'Mažosios Alpha (a, b, c, d, e, t.t)', | ||
14 | lowerGreek: 'Mažosios Graikų (alpha, beta, gamma, t.t)', | ||
15 | lowerRoman: 'Mažosios Romėnų (i, ii, iii, iv, v, t.t)', | ||
16 | none: 'Niekas', | ||
17 | notset: '<nenurodytas>', | ||
18 | numberedTitle: 'Skaitmeninio sąrašo nustatymai', | ||
19 | square: 'Kvadratas', | ||
20 | start: 'Pradžia', | ||
21 | type: 'Rūšis', | ||
22 | upperAlpha: 'Didžiosios Alpha (A, B, C, D, E, t.t)', | ||
23 | upperRoman: 'Didžiosios Romėnų (I, II, III, IV, V, t.t)', | ||
24 | validateStartNumber: 'Sąrašo pradžios skaitmuo turi būti sveikas skaičius.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/lv.js b/sources/plugins/liststyle/lang/lv.js new file mode 100644 index 0000000..62d5577 --- /dev/null +++ b/sources/plugins/liststyle/lang/lv.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'lv', { | ||
6 | armenian: 'Armēņu skaitļi', | ||
7 | bulletedTitle: 'Vienkārša saraksta uzstādījumi', | ||
8 | circle: 'Aplis', | ||
9 | decimal: 'Decimālie (1, 2, 3, utt)', | ||
10 | decimalLeadingZero: 'Decimālie ar nulli (01, 02, 03, utt)', | ||
11 | disc: 'Disks', | ||
12 | georgian: 'Gruzīņu skaitļi (an, ban, gan, utt)', | ||
13 | lowerAlpha: 'Mazie alfabēta (a, b, c, d, e, utt)', | ||
14 | lowerGreek: 'Mazie grieķu (alfa, beta, gamma, utt)', | ||
15 | lowerRoman: 'Mazie romāņu (i, ii, iii, iv, v, utt)', | ||
16 | none: 'Nekas', | ||
17 | notset: '<nav norādīts>', | ||
18 | numberedTitle: 'Numurēta saraksta uzstādījumi', | ||
19 | square: 'Kvadrāts', | ||
20 | start: 'Sākt', | ||
21 | type: 'Tips', | ||
22 | upperAlpha: 'Lielie alfabēta (A, B, C, D, E, utt)', | ||
23 | upperRoman: 'Lielie romāņu (I, II, III, IV, V, utt)', | ||
24 | validateStartNumber: 'Saraksta sākuma numuram jābūt veselam skaitlim' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/mk.js b/sources/plugins/liststyle/lang/mk.js new file mode 100644 index 0000000..0d0a5aa --- /dev/null +++ b/sources/plugins/liststyle/lang/mk.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'mk', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/mn.js b/sources/plugins/liststyle/lang/mn.js new file mode 100644 index 0000000..6ce43d6 --- /dev/null +++ b/sources/plugins/liststyle/lang/mn.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'mn', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Төрөл', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/ms.js b/sources/plugins/liststyle/lang/ms.js new file mode 100644 index 0000000..e916f66 --- /dev/null +++ b/sources/plugins/liststyle/lang/ms.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'ms', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/nb.js b/sources/plugins/liststyle/lang/nb.js new file mode 100644 index 0000000..7daf0c5 --- /dev/null +++ b/sources/plugins/liststyle/lang/nb.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'nb', { | ||
6 | armenian: 'Armensk nummerering', | ||
7 | bulletedTitle: 'Egenskaper for punktmerket liste', | ||
8 | circle: 'Sirkel', | ||
9 | decimal: 'Tall (1, 2, 3, osv.)', | ||
10 | decimalLeadingZero: 'Tall, med førstesiffer null (01, 02, 03, osv.)', | ||
11 | disc: 'Disk', | ||
12 | georgian: 'Georgisk nummerering (an, ban, gan, osv.)', | ||
13 | lowerAlpha: 'Alfabetisk, små (a, b, c, d, e, osv.)', | ||
14 | lowerGreek: 'Gresk, små (alpha, beta, gamma, osv.)', | ||
15 | lowerRoman: 'Romertall, små (i, ii, iii, iv, v, osv.)', | ||
16 | none: 'Ingen', | ||
17 | notset: '<ikke satt>', | ||
18 | numberedTitle: 'Egenskaper for nummerert liste', | ||
19 | square: 'Firkant', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Alfabetisk, store (A, B, C, D, E, osv.)', | ||
23 | upperRoman: 'Romertall, store (I, II, III, IV, V, osv.)', | ||
24 | validateStartNumber: 'Starten på listen må være et heltall.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/nl.js b/sources/plugins/liststyle/lang/nl.js new file mode 100644 index 0000000..22eafc8 --- /dev/null +++ b/sources/plugins/liststyle/lang/nl.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'nl', { | ||
6 | armenian: 'Armeense nummering', | ||
7 | bulletedTitle: 'Eigenschappen lijst met opsommingstekens', | ||
8 | circle: 'Cirkel', | ||
9 | decimal: 'Cijfers (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Cijfers beginnen met nul (01, 02, 03, etc.)', | ||
11 | disc: 'Schijf', | ||
12 | georgian: 'Georgische nummering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Kleine letters (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Grieks kleine letters (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Romeins kleine letters (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'Geen', | ||
17 | notset: '<niet gezet>', | ||
18 | numberedTitle: 'Eigenschappen genummerde lijst', | ||
19 | square: 'Vierkant', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Hoofdletters (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Romeinse hoofdletters (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'Startnummer van de lijst moet een heel nummer zijn.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/no.js b/sources/plugins/liststyle/lang/no.js new file mode 100644 index 0000000..6fe25f7 --- /dev/null +++ b/sources/plugins/liststyle/lang/no.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'no', { | ||
6 | armenian: 'Armensk nummerering', | ||
7 | bulletedTitle: 'Egenskaper for punktmerket liste', | ||
8 | circle: 'Sirkel', | ||
9 | decimal: 'Tall (1, 2, 3, osv.)', | ||
10 | decimalLeadingZero: 'Tall, med førstesiffer null (01, 02, 03, osv.)', | ||
11 | disc: 'Disk', | ||
12 | georgian: 'Georgisk nummerering (an, ban, gan, osv.)', | ||
13 | lowerAlpha: 'Alfabetisk, små (a, b, c, d, e, osv.)', | ||
14 | lowerGreek: 'Gresk, små (alpha, beta, gamma, osv.)', | ||
15 | lowerRoman: 'Romertall, små (i, ii, iii, iv, v, osv.)', | ||
16 | none: 'Ingen', | ||
17 | notset: '<ikke satt>', | ||
18 | numberedTitle: 'Egenskaper for nummerert liste', | ||
19 | square: 'Firkant', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Alfabetisk, store (A, B, C, D, E, osv.)', | ||
23 | upperRoman: 'Romertall, store (I, II, III, IV, V, osv.)', | ||
24 | validateStartNumber: 'Starten på listen må være et heltall.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/pl.js b/sources/plugins/liststyle/lang/pl.js new file mode 100644 index 0000000..b119bf2 --- /dev/null +++ b/sources/plugins/liststyle/lang/pl.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'pl', { | ||
6 | armenian: 'Numerowanie armeńskie', | ||
7 | bulletedTitle: 'Właściwości list wypunktowanych', | ||
8 | circle: 'Koło', | ||
9 | decimal: 'Liczby (1, 2, 3 itd.)', | ||
10 | decimalLeadingZero: 'Liczby z początkowym zerem (01, 02, 03 itd.)', | ||
11 | disc: 'Okrąg', | ||
12 | georgian: 'Numerowanie gruzińskie (an, ban, gan itd.)', | ||
13 | lowerAlpha: 'Małe litery (a, b, c, d, e itd.)', | ||
14 | lowerGreek: 'Małe litery greckie (alpha, beta, gamma itd.)', | ||
15 | lowerRoman: 'Małe cyfry rzymskie (i, ii, iii, iv, v itd.)', | ||
16 | none: 'Brak', | ||
17 | notset: '<nie ustawiono>', | ||
18 | numberedTitle: 'Właściwości list numerowanych', | ||
19 | square: 'Kwadrat', | ||
20 | start: 'Początek', | ||
21 | type: 'Typ punktora', | ||
22 | upperAlpha: 'Duże litery (A, B, C, D, E itd.)', | ||
23 | upperRoman: 'Duże cyfry rzymskie (I, II, III, IV, V itd.)', | ||
24 | validateStartNumber: 'Listę musi rozpoczynać liczba całkowita.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/pt-br.js b/sources/plugins/liststyle/lang/pt-br.js new file mode 100644 index 0000000..603f10d --- /dev/null +++ b/sources/plugins/liststyle/lang/pt-br.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'pt-br', { | ||
6 | armenian: 'Numeração Armêna', | ||
7 | bulletedTitle: 'Propriedades da Lista sem Numeros', | ||
8 | circle: 'Círculo', | ||
9 | decimal: 'Numeração Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Numeração Decimal com zeros (01, 02, 03, etc.)', | ||
11 | disc: 'Disco', | ||
12 | georgian: 'Numeração da Geórgia (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Numeração Alfabética minúscula (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Numeração Grega minúscula (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Numeração Romana minúscula (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'Nenhum', | ||
17 | notset: '<não definido>', | ||
18 | numberedTitle: 'Propriedades da Lista Numerada', | ||
19 | square: 'Quadrado', | ||
20 | start: 'Início', | ||
21 | type: 'Tipo', | ||
22 | upperAlpha: 'Numeração Alfabética Maiúscula (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Numeração Romana maiúscula (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'O número inicial da lista deve ser um número inteiro.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/pt.js b/sources/plugins/liststyle/lang/pt.js new file mode 100644 index 0000000..1d8fd1f --- /dev/null +++ b/sources/plugins/liststyle/lang/pt.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'pt', { | ||
6 | armenian: 'Numeração armênia', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Círculo', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disco', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'Nenhum', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Quadrado', | ||
20 | start: 'Iniciar', | ||
21 | type: 'Tipo', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/ro.js b/sources/plugins/liststyle/lang/ro.js new file mode 100644 index 0000000..926d2aa --- /dev/null +++ b/sources/plugins/liststyle/lang/ro.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'ro', { | ||
6 | armenian: 'Numerotare armeniană', | ||
7 | bulletedTitle: 'Proprietățile listei cu simboluri', | ||
8 | circle: 'Cerc', | ||
9 | decimal: 'Decimale (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimale cu zero în față (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Numerotare georgiană (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Litere mici (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Litere grecești mici (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Cifre romane mici (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'Nimic', | ||
17 | notset: '<nesetat>', | ||
18 | numberedTitle: 'Proprietățile listei numerotate', | ||
19 | square: 'Pătrat', | ||
20 | start: 'Start', | ||
21 | type: 'Tip', | ||
22 | upperAlpha: 'Litere mari (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Cifre romane mari (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'Începutul listei trebuie să fie un număr întreg.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/ru.js b/sources/plugins/liststyle/lang/ru.js new file mode 100644 index 0000000..27abea0 --- /dev/null +++ b/sources/plugins/liststyle/lang/ru.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'ru', { | ||
6 | armenian: 'Армянская нумерация', | ||
7 | bulletedTitle: 'Свойства маркированного списка', | ||
8 | circle: 'Круг', | ||
9 | decimal: 'Десятичные (1, 2, 3, и т.д.)', | ||
10 | decimalLeadingZero: 'Десятичные с ведущим нулём (01, 02, 03, и т.д.)', | ||
11 | disc: 'Окружность', | ||
12 | georgian: 'Грузинская нумерация (ани, бани, гани, и т.д.)', | ||
13 | lowerAlpha: 'Строчные латинские (a, b, c, d, e, и т.д.)', | ||
14 | lowerGreek: 'Строчные греческие (альфа, бета, гамма, и т.д.)', | ||
15 | lowerRoman: 'Строчные римские (i, ii, iii, iv, v, и т.д.)', | ||
16 | none: 'Нет', | ||
17 | notset: '<не указано>', | ||
18 | numberedTitle: 'Свойства нумерованного списка', | ||
19 | square: 'Квадрат', | ||
20 | start: 'Начиная с', | ||
21 | type: 'Тип', | ||
22 | upperAlpha: 'Заглавные латинские (A, B, C, D, E, и т.д.)', | ||
23 | upperRoman: 'Заглавные римские (I, II, III, IV, V, и т.д.)', | ||
24 | validateStartNumber: 'Первый номер списка должен быть задан обычным целым числом.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/si.js b/sources/plugins/liststyle/lang/si.js new file mode 100644 index 0000000..f8699df --- /dev/null +++ b/sources/plugins/liststyle/lang/si.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'si', { | ||
6 | armenian: 'Armenian numbering', // MISSING | ||
7 | bulletedTitle: 'Bulleted List Properties', // MISSING | ||
8 | circle: 'Circle', // MISSING | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', // MISSING | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', // MISSING | ||
11 | disc: 'Disc', // MISSING | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', // MISSING | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING | ||
16 | none: 'කිසිවක්ම නොවේ', | ||
17 | notset: '<යොදා >', | ||
18 | numberedTitle: 'Numbered List Properties', // MISSING | ||
19 | square: 'Square', // MISSING | ||
20 | start: 'Start', // MISSING | ||
21 | type: 'වර්ගය', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING | ||
24 | validateStartNumber: 'List start number must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/sk.js b/sources/plugins/liststyle/lang/sk.js new file mode 100644 index 0000000..443f41e --- /dev/null +++ b/sources/plugins/liststyle/lang/sk.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'sk', { | ||
6 | armenian: 'Arménske číslovanie', | ||
7 | bulletedTitle: 'Vlastnosti odrážkového zoznamu', | ||
8 | circle: 'Kruh', | ||
9 | decimal: 'Číselné (1, 2, 3, atď.)', | ||
10 | decimalLeadingZero: 'Číselné s nulou (01, 02, 03, atď.)', | ||
11 | disc: 'Disk', | ||
12 | georgian: 'Gruzínske číslovanie (an, ban, gan, atď.)', | ||
13 | lowerAlpha: 'Malé latinské (a, b, c, d, e, atď.)', | ||
14 | lowerGreek: 'Malé grécke (alfa, beta, gama, atď.)', | ||
15 | lowerRoman: 'Malé rímske (i, ii, iii, iv, v, atď.)', | ||
16 | none: 'Nič', | ||
17 | notset: '<nenastavené>', | ||
18 | numberedTitle: 'Vlastnosti číselného zoznamu', | ||
19 | square: 'Štvorec', | ||
20 | start: 'Začiatok', | ||
21 | type: 'Typ', | ||
22 | upperAlpha: 'Veľké latinské (A, B, C, D, E, atď.)', | ||
23 | upperRoman: 'Veľké rímske (I, II, III, IV, V, atď.)', | ||
24 | validateStartNumber: 'Začiatočné číslo číselného zoznamu musí byť celé číslo.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/sl.js b/sources/plugins/liststyle/lang/sl.js new file mode 100644 index 0000000..99a3bf7 --- /dev/null +++ b/sources/plugins/liststyle/lang/sl.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'sl', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/sq.js b/sources/plugins/liststyle/lang/sq.js new file mode 100644 index 0000000..18c77d2 --- /dev/null +++ b/sources/plugins/liststyle/lang/sq.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'sq', { | ||
6 | armenian: 'Numërim armenian', | ||
7 | bulletedTitle: 'Karakteristikat e Listës me Pulla', | ||
8 | circle: 'Rreth', | ||
9 | decimal: 'Decimal (1, 2, 3, etj.)', | ||
10 | decimalLeadingZero: 'Decimal me zerro udhëheqëse (01, 02, 03, etj.)', | ||
11 | disc: 'Disk', | ||
12 | georgian: 'Numërim gjeorgjian (an, ban, gan, etj.)', | ||
13 | lowerAlpha: 'Të vogla alfa (a, b, c, d, e, etj.)', | ||
14 | lowerGreek: 'Të vogla greke (alpha, beta, gamma, etj.)', | ||
15 | lowerRoman: 'Të vogla romake (i, ii, iii, iv, v, etj.)', | ||
16 | none: 'Asnjë', | ||
17 | notset: '<e pazgjedhur>', | ||
18 | numberedTitle: 'Karakteristikat e Listës me Numra', | ||
19 | square: 'Katror', | ||
20 | start: 'Fillimi', | ||
21 | type: 'LLoji', | ||
22 | upperAlpha: 'Të mëdha alfa (A, B, C, D, E, etj.)', | ||
23 | upperRoman: 'Të mëdha romake (I, II, III, IV, V, etj.)', | ||
24 | validateStartNumber: 'Numri i fillimit të listës duhet të është numër i plotë.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/sr-latn.js b/sources/plugins/liststyle/lang/sr-latn.js new file mode 100644 index 0000000..dad8611 --- /dev/null +++ b/sources/plugins/liststyle/lang/sr-latn.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'sr-latn', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/sr.js b/sources/plugins/liststyle/lang/sr.js new file mode 100644 index 0000000..8b10fef --- /dev/null +++ b/sources/plugins/liststyle/lang/sr.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'sr', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/sv.js b/sources/plugins/liststyle/lang/sv.js new file mode 100644 index 0000000..c2208bf --- /dev/null +++ b/sources/plugins/liststyle/lang/sv.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'sv', { | ||
6 | armenian: 'Armenisk numrering', | ||
7 | bulletedTitle: 'Egenskaper för punktlista', | ||
8 | circle: 'Cirkel', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal nolla (01, 02, 03, etc.)', | ||
11 | disc: 'Disk', | ||
12 | georgian: 'Georgisk numrering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Alpha gemener (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Grekiska gemener (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Romerska gemener (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'Ingen', | ||
17 | notset: '<ej angiven>', | ||
18 | numberedTitle: 'Egenskaper för punktlista', | ||
19 | square: 'Fyrkant', | ||
20 | start: 'Start', | ||
21 | type: 'Typ', | ||
22 | upperAlpha: 'Alpha versaler (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Romerska versaler (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'Listans startnummer måste vara ett heltal.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/th.js b/sources/plugins/liststyle/lang/th.js new file mode 100644 index 0000000..d85ecae --- /dev/null +++ b/sources/plugins/liststyle/lang/th.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'th', { | ||
6 | armenian: 'Armenian numbering', | ||
7 | bulletedTitle: 'Bulleted List Properties', | ||
8 | circle: 'Circle', | ||
9 | decimal: 'Decimal (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: 'Decimal leading zero (01, 02, 03, etc.)', | ||
11 | disc: 'Disc', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', | ||
16 | none: 'None', | ||
17 | notset: '<not set>', | ||
18 | numberedTitle: 'Numbered List Properties', | ||
19 | square: 'Square', | ||
20 | start: 'Start', | ||
21 | type: 'Type', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', | ||
24 | validateStartNumber: 'List start number must be a whole number.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/tr.js b/sources/plugins/liststyle/lang/tr.js new file mode 100644 index 0000000..a0f918b --- /dev/null +++ b/sources/plugins/liststyle/lang/tr.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'tr', { | ||
6 | armenian: 'Ermenice sayılandırma', | ||
7 | bulletedTitle: 'Simgeli Liste Özellikleri', | ||
8 | circle: 'Daire', | ||
9 | decimal: 'Ondalık (1, 2, 3, vs.)', | ||
10 | decimalLeadingZero: 'Başı sıfırlı ondalık (01, 02, 03, vs.)', | ||
11 | disc: 'Disk', | ||
12 | georgian: 'Gürcüce numaralandırma (an, ban, gan, vs.)', | ||
13 | lowerAlpha: 'Küçük Alpha (a, b, c, d, e, vs.)', | ||
14 | lowerGreek: 'Küçük Greek (alpha, beta, gamma, vs.)', | ||
15 | lowerRoman: 'Küçük Roman (i, ii, iii, iv, v, vs.)', | ||
16 | none: 'Yok', | ||
17 | notset: '<ayarlanmamış>', | ||
18 | numberedTitle: 'Sayılandırılmış Liste Özellikleri', | ||
19 | square: 'Kare', | ||
20 | start: 'Başla', | ||
21 | type: 'Tipi', | ||
22 | upperAlpha: 'Büyük Alpha (A, B, C, D, E, vs.)', | ||
23 | upperRoman: 'Büyük Roman (I, II, III, IV, V, vs.)', | ||
24 | validateStartNumber: 'Liste başlangıcı tam sayı olmalıdır.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/tt.js b/sources/plugins/liststyle/lang/tt.js new file mode 100644 index 0000000..8f79082 --- /dev/null +++ b/sources/plugins/liststyle/lang/tt.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'tt', { | ||
6 | armenian: 'Әрмән номерлавы', | ||
7 | bulletedTitle: 'Маркерлы тезмә үзлекләре', | ||
8 | circle: 'Түгәрәк', | ||
9 | decimal: 'Унарлы (1, 2, 3, ...)', | ||
10 | decimalLeadingZero: 'Ноль белән башланган унарлы (01, 02, 03, ...)', | ||
11 | disc: 'Диск', | ||
12 | georgian: 'Georgian numbering (an, ban, gan, etc.)', // MISSING | ||
13 | lowerAlpha: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING | ||
14 | lowerGreek: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING | ||
15 | lowerRoman: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING | ||
16 | none: 'Һичбер', | ||
17 | notset: '<билгеләнмәгән>', | ||
18 | numberedTitle: 'Номерлы тезмә үзлекләре', | ||
19 | square: 'Шакмак', | ||
20 | start: 'Башлау', | ||
21 | type: 'Төр', | ||
22 | upperAlpha: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING | ||
23 | upperRoman: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING | ||
24 | validateStartNumber: 'List start number must be a whole number.' // MISSING | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/ug.js b/sources/plugins/liststyle/lang/ug.js new file mode 100644 index 0000000..f232fa3 --- /dev/null +++ b/sources/plugins/liststyle/lang/ug.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'ug', { | ||
6 | armenian: 'قەدىمكى ئەرمىنىيە تەرتىپ نومۇرى شەكلى', | ||
7 | bulletedTitle: 'تۈر بەلگە تىزىم خاسلىقى', | ||
8 | circle: 'بوش چەمبەر', | ||
9 | decimal: 'سان (1, 2, 3 قاتارلىق)', | ||
10 | decimalLeadingZero: 'نۆلدىن باشلانغان سان بەلگە (01, 02, 03 قاتارلىق)', | ||
11 | disc: 'تولدۇرۇلغان چەمبەر', | ||
12 | georgian: 'قەدىمكى جورجىيە تەرتىپ نومۇرى شەكلى (an, ban, gan قاتارلىق)', | ||
13 | lowerAlpha: 'ئىنگلىزچە كىچىك ھەرپ (a, b, c, d, e قاتارلىق)', | ||
14 | lowerGreek: 'گرېكچە كىچىك ھەرپ (alpha, beta, gamma قاتارلىق)', | ||
15 | lowerRoman: 'كىچىك ھەرپلىك رىم رەقىمى (i, ii, iii, iv, v قاتارلىق)', | ||
16 | none: 'بەلگە يوق', | ||
17 | notset: '‹تەڭشەلمىگەن›', | ||
18 | numberedTitle: 'تەرتىپ نومۇر تىزىم خاسلىقى', | ||
19 | square: 'تولدۇرۇلغان تۆت چاسا', | ||
20 | start: 'باشلىنىش نومۇرى', | ||
21 | type: 'بەلگە تىپى', | ||
22 | upperAlpha: 'ئىنگلىزچە چوڭ ھەرپ (A, B, C, D, E قاتارلىق)', | ||
23 | upperRoman: 'چوڭ ھەرپلىك رىم رەقىمى (I, II, III, IV, V قاتارلىق)', | ||
24 | validateStartNumber: 'تىزىم باشلىنىش تەرتىپ نومۇرى چوقۇم پۈتۈن سان پىچىمىدا بولۇشى لازىم' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/uk.js b/sources/plugins/liststyle/lang/uk.js new file mode 100644 index 0000000..ece540e --- /dev/null +++ b/sources/plugins/liststyle/lang/uk.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'uk', { | ||
6 | armenian: 'Вірменська нумерація', | ||
7 | bulletedTitle: 'Опції маркованого списку', | ||
8 | circle: 'Кільце', | ||
9 | decimal: 'Десяткові (1, 2, 3 і т.д.)', | ||
10 | decimalLeadingZero: 'Десяткові з нулем (01, 02, 03 і т.д.)', | ||
11 | disc: 'Кружечок', | ||
12 | georgian: 'Грузинська нумерація (an, ban, gan і т.д.)', | ||
13 | lowerAlpha: 'Малі лат. букви (a, b, c, d, e і т.д.)', | ||
14 | lowerGreek: 'Малі гр. букви (альфа, бета, гамма і т.д.)', | ||
15 | lowerRoman: 'Малі римські (i, ii, iii, iv, v і т.д.)', | ||
16 | none: 'Нема', | ||
17 | notset: '<не вказано>', | ||
18 | numberedTitle: 'Опції нумерованого списку', | ||
19 | square: 'Квадратик', | ||
20 | start: 'Почати з...', | ||
21 | type: 'Тип', | ||
22 | upperAlpha: 'Великі лат. букви (A, B, C, D, E і т.д.)', | ||
23 | upperRoman: 'Великі римські (I, II, III, IV, V і т.д.)', | ||
24 | validateStartNumber: 'Початковий номер списку повинен бути цілим числом.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/vi.js b/sources/plugins/liststyle/lang/vi.js new file mode 100644 index 0000000..4e395da --- /dev/null +++ b/sources/plugins/liststyle/lang/vi.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'vi', { | ||
6 | armenian: 'Số theo kiểu Armenian', | ||
7 | bulletedTitle: 'Thuộc tính danh sách không thứ tự', | ||
8 | circle: 'Khuyên tròn', | ||
9 | decimal: 'Kiểu số (1, 2, 3 ...)', | ||
10 | decimalLeadingZero: 'Kiểu số (01, 02, 03...)', | ||
11 | disc: 'Hình đĩa', | ||
12 | georgian: 'Số theo kiểu Georgian (an, ban, gan...)', | ||
13 | lowerAlpha: 'Kiểu abc thường (a, b, c, d, e...)', | ||
14 | lowerGreek: 'Kiểu Hy Lạp (alpha, beta, gamma...)', | ||
15 | lowerRoman: 'Số La Mã kiểu thường (i, ii, iii, iv, v...)', | ||
16 | none: 'Không gì cả', | ||
17 | notset: '<không thiết lập>', | ||
18 | numberedTitle: 'Thuộc tính danh sách có thứ tự', | ||
19 | square: 'Hình vuông', | ||
20 | start: 'Bắt đầu', | ||
21 | type: 'Kiểu loại', | ||
22 | upperAlpha: 'Kiểu ABC HOA (A, B, C, D, E...)', | ||
23 | upperRoman: 'Số La Mã kiểu HOA (I, II, III, IV, V...)', | ||
24 | validateStartNumber: 'Số bắt đầu danh sách phải là một số nguyên.' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/zh-cn.js b/sources/plugins/liststyle/lang/zh-cn.js new file mode 100644 index 0000000..b0a2765 --- /dev/null +++ b/sources/plugins/liststyle/lang/zh-cn.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'zh-cn', { | ||
6 | armenian: '传统的亚美尼亚编号方式', | ||
7 | bulletedTitle: '项目列表属性', | ||
8 | circle: '空心圆', | ||
9 | decimal: '数字 (1, 2, 3, 等)', | ||
10 | decimalLeadingZero: '0开头的数字标记(01, 02, 03, 等)', | ||
11 | disc: '实心圆', | ||
12 | georgian: '传统的乔治亚编号方式(an, ban, gan, 等)', | ||
13 | lowerAlpha: '小写英文字母(a, b, c, d, e, 等)', | ||
14 | lowerGreek: '小写希腊字母(alpha, beta, gamma, 等)', | ||
15 | lowerRoman: '小写罗马数字(i, ii, iii, iv, v, 等)', | ||
16 | none: '无标记', | ||
17 | notset: '<没有设置>', | ||
18 | numberedTitle: '编号列表属性', | ||
19 | square: '实心方块', | ||
20 | start: '开始序号', | ||
21 | type: '标记类型', | ||
22 | upperAlpha: '大写英文字母(A, B, C, D, E, 等)', | ||
23 | upperRoman: '大写罗马数字(I, II, III, IV, V, 等)', | ||
24 | validateStartNumber: '列表开始序号必须为整数格式' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/lang/zh.js b/sources/plugins/liststyle/lang/zh.js new file mode 100644 index 0000000..4cfc3da --- /dev/null +++ b/sources/plugins/liststyle/lang/zh.js | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'liststyle', 'zh', { | ||
6 | armenian: '亞美尼亞數字', | ||
7 | bulletedTitle: '項目符號清單屬性', | ||
8 | circle: '圓圈', | ||
9 | decimal: '小數點 (1, 2, 3, etc.)', | ||
10 | decimalLeadingZero: '前綴 0 十位數字 (01, 02, 03, 等)', | ||
11 | disc: '圓點', | ||
12 | georgian: '喬治王時代數字 (an, ban, gan, 等)', | ||
13 | lowerAlpha: '小寫字母 (a, b, c, d, e 等)', | ||
14 | lowerGreek: '小寫希臘字母 (alpha, beta, gamma, 等)', | ||
15 | lowerRoman: '小寫羅馬數字 (i, ii, iii, iv, v 等)', | ||
16 | none: '無', | ||
17 | notset: '<未設定>', | ||
18 | numberedTitle: '編號清單屬性', | ||
19 | square: '方塊', | ||
20 | start: '開始', | ||
21 | type: '類型', | ||
22 | upperAlpha: '大寫字母 (A, B, C, D, E 等)', | ||
23 | upperRoman: '大寫羅馬數字 (I, II, III, IV, V 等)', | ||
24 | validateStartNumber: '清單起始號碼須為一完整數字。' | ||
25 | } ); | ||
diff --git a/sources/plugins/liststyle/plugin.js b/sources/plugins/liststyle/plugin.js new file mode 100644 index 0000000..1394996 --- /dev/null +++ b/sources/plugins/liststyle/plugin.js | |||
@@ -0,0 +1,69 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | CKEDITOR.plugins.liststyle = { | ||
8 | requires: 'dialog,contextmenu', | ||
9 | // jscs:disable maximumLineLength | ||
10 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
11 | // jscs:enable maximumLineLength | ||
12 | init: function( editor ) { | ||
13 | if ( editor.blockless ) | ||
14 | return; | ||
15 | |||
16 | var def, cmd; | ||
17 | |||
18 | def = new CKEDITOR.dialogCommand( 'numberedListStyle', { | ||
19 | requiredContent: 'ol', | ||
20 | allowedContent: 'ol{list-style-type}[start]' | ||
21 | } ); | ||
22 | cmd = editor.addCommand( 'numberedListStyle', def ); | ||
23 | editor.addFeature( cmd ); | ||
24 | CKEDITOR.dialog.add( 'numberedListStyle', this.path + 'dialogs/liststyle.js' ); | ||
25 | |||
26 | def = new CKEDITOR.dialogCommand( 'bulletedListStyle', { | ||
27 | requiredContent: 'ul', | ||
28 | allowedContent: 'ul{list-style-type}' | ||
29 | } ); | ||
30 | cmd = editor.addCommand( 'bulletedListStyle', def ); | ||
31 | editor.addFeature( cmd ); | ||
32 | CKEDITOR.dialog.add( 'bulletedListStyle', this.path + 'dialogs/liststyle.js' ); | ||
33 | |||
34 | //Register map group; | ||
35 | editor.addMenuGroup( 'list', 108 ); | ||
36 | |||
37 | editor.addMenuItems( { | ||
38 | numberedlist: { | ||
39 | label: editor.lang.liststyle.numberedTitle, | ||
40 | group: 'list', | ||
41 | command: 'numberedListStyle' | ||
42 | }, | ||
43 | bulletedlist: { | ||
44 | label: editor.lang.liststyle.bulletedTitle, | ||
45 | group: 'list', | ||
46 | command: 'bulletedListStyle' | ||
47 | } | ||
48 | } ); | ||
49 | |||
50 | editor.contextMenu.addListener( function( element ) { | ||
51 | if ( !element || element.isReadOnly() ) | ||
52 | return null; | ||
53 | |||
54 | while ( element ) { | ||
55 | var name = element.getName(); | ||
56 | if ( name == 'ol' ) | ||
57 | return { numberedlist: CKEDITOR.TRISTATE_OFF }; | ||
58 | else if ( name == 'ul' ) | ||
59 | return { bulletedlist: CKEDITOR.TRISTATE_OFF }; | ||
60 | |||
61 | element = element.getParent(); | ||
62 | } | ||
63 | return null; | ||
64 | } ); | ||
65 | } | ||
66 | }; | ||
67 | |||
68 | CKEDITOR.plugins.add( 'liststyle', CKEDITOR.plugins.liststyle ); | ||
69 | } )(); | ||
diff --git a/sources/plugins/magicline/dev/magicline.html b/sources/plugins/magicline/dev/magicline.html new file mode 100644 index 0000000..09f0c47 --- /dev/null +++ b/sources/plugins/magicline/dev/magicline.html | |||
@@ -0,0 +1,594 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <!-- | ||
3 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
4 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
5 | --> | ||
6 | <html> | ||
7 | <head> | ||
8 | <meta charset="utf-8"> | ||
9 | <title>Magicline muddy trenches – CKEditor Sample</title> | ||
10 | <script src="../../../ckeditor.js"></script> | ||
11 | <link href="../../../samples/old/sample.css" rel="stylesheet"> | ||
12 | <style> | ||
13 | body { | ||
14 | margin: 0 0 130px; | ||
15 | } | ||
16 | #dev { | ||
17 | border-top: 1px solid #555; | ||
18 | position: fixed; | ||
19 | bottom: 0px; | ||
20 | left: 0px; | ||
21 | right: 0px; | ||
22 | height: 110px; | ||
23 | background: #B5E5EE; | ||
24 | font-size: 15px; | ||
25 | } | ||
26 | #dev .hl { | ||
27 | color: red; | ||
28 | } | ||
29 | #tr_upper, #tr_lower { | ||
30 | padding: 3px 6px; | ||
31 | } | ||
32 | #tr_upper { | ||
33 | background: rgba(255,0,0,.3); | ||
34 | } | ||
35 | #tr_lower { | ||
36 | background: rgba(0,255,0,.3); | ||
37 | } | ||
38 | |||
39 | #dev p { | ||
40 | margin: 0; | ||
41 | padding: 0; | ||
42 | } | ||
43 | |||
44 | #timeData, | ||
45 | #triggerData, | ||
46 | #mouseData, | ||
47 | #hiddenData { | ||
48 | position: absolute; | ||
49 | } | ||
50 | #timeData { | ||
51 | right: 10px; | ||
52 | top: 10px; | ||
53 | } | ||
54 | #hiddenData { | ||
55 | right: 10px; | ||
56 | top: 40px; | ||
57 | } | ||
58 | #mouseData { | ||
59 | left: 10px; | ||
60 | top: 10px; | ||
61 | } | ||
62 | #dev h2 { | ||
63 | top: 10px; | ||
64 | left: 10px; | ||
65 | } | ||
66 | #triggerData { | ||
67 | bottom: 10px; | ||
68 | left: 10px; | ||
69 | } | ||
70 | </style> | ||
71 | </head> | ||
72 | <body> | ||
73 | <h1 class="samples"> | ||
74 | CKEditor Sample — magicline muddy trenches | ||
75 | </h1> | ||
76 | |||
77 | <h2>Various cases</h2> | ||
78 | <textarea cols="80" id="editor1" name="editor1" rows="10"> | ||
79 | <div style="padding: 20px; background: gray; width: 300px" class="1">Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies. Curabitur et ligula. Ut molestie a, ultricies porta urna. Vestibulum commodo volutpat a, convallis ac, laoreet enim.</div> | ||
80 | <div style="background: violet; padding: 30px" class="static">Position static</div> | ||
81 | <dl class="2"> | ||
82 | <dt>Key</dt><dd>Value</dd> | ||
83 | </dl> | ||
84 | <div>Whatever</div> | ||
85 | <hr id="hr"> | ||
86 | <div style=" | ||
87 | display: block; | ||
88 | cursor: pointer; | ||
89 | background: green; | ||
90 | height: 50px; width: 50px;" >aasd | ||
91 | </div> | ||
92 | <p>Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies</p> | ||
93 | <hr> | ||
94 | <hr> | ||
95 | <p>Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies</p> | ||
96 | <table border="1" class="first"> | ||
97 | <tbody><tr> | ||
98 | <td> | ||
99 | Table Cell 1 | ||
100 | </td> | ||
101 | </tr> | ||
102 | <tr> | ||
103 | <td> | ||
104 | Table Cell 2<br> | ||
105 | Table Cell 2<br> | ||
106 | </td> | ||
107 | </tr> | ||
108 | </tbody> | ||
109 | </table> | ||
110 | <div style="border: 1px solid red; padding: 50px"> | ||
111 | Parent | ||
112 | <div style="border: 10px solid green; padding: 10px">Child</div> | ||
113 | </div> | ||
114 | I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. | ||
115 | I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. I'm in a body. | ||
116 | <p>Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies</p> | ||
117 | <table border="1" style="margin: 15px 0 100px" class="outer"> | ||
118 | <tbody> | ||
119 | <tr> | ||
120 | <td>Table Cell 1</td> | ||
121 | <td>Table Cell 1</td> | ||
122 | </tr> | ||
123 | <tr> | ||
124 | <td> | ||
125 | <table border="10" class="inner"> | ||
126 | <tbody> | ||
127 | <tr> | ||
128 | <td>Table Cell 1</td> | ||
129 | </tr> | ||
130 | <tr> | ||
131 | <td>Table Cell 2<br> Table Cell 2<br></td> | ||
132 | </tr> | ||
133 | </tbody> | ||
134 | </table> | ||
135 | </td> | ||
136 | </tr> | ||
137 | </tbody> | ||
138 | </table> | ||
139 | <table border="1" style="margin: 15px" class="third"> | ||
140 | <tbody><tr> | ||
141 | <td> | ||
142 | Table Cell 1 | ||
143 | </td> | ||
144 | <td> | ||
145 | Table Cell 1 | ||
146 | </td> | ||
147 | <td> | ||
148 | Table Cell 1 | ||
149 | </td> | ||
150 | <td> | ||
151 | Table Cell 1 | ||
152 | </td> | ||
153 | </tr> | ||
154 | <tr> | ||
155 | <td> | ||
156 | Table Cell 2 | ||
157 | </td> | ||
158 | </tr> | ||
159 | </tbody> | ||
160 | </table> | ||
161 | <table border="1" style="margin: 15px" class="fourth"> | ||
162 | <tbody><tr> | ||
163 | <td> | ||
164 | Table Cell 1 | ||
165 | </td> | ||
166 | <td> | ||
167 | Table Cell 1 | ||
168 | </td> | ||
169 | <td> | ||
170 | Table Cell 1 | ||
171 | </td> | ||
172 | <td> | ||
173 | Table Cell 1 | ||
174 | </td> | ||
175 | </tr> | ||
176 | <tr> | ||
177 | <td> | ||
178 | Table Cell 2 | ||
179 | </td> | ||
180 | </tr> | ||
181 | </tbody> | ||
182 | </table> | ||
183 | <ul style="" class="fifth"> | ||
184 | <li name="ul_first">List item</li> | ||
185 | <li name="ul_second"> | ||
186 | <ol style=""> | ||
187 | <li name="ol_first">Nested item</li> | ||
188 | <li>Nested item</li> | ||
189 | <li>Nested item</li> | ||
190 | </ol> | ||
191 | </li> | ||
192 | <li>List item</li> | ||
193 | </ul> | ||
194 | <table border="1" class="table#123"> | ||
195 | <tbody> | ||
196 | <tr> | ||
197 | <td>Table Cell 1</td> | ||
198 | </tr> | ||
199 | <tr> | ||
200 | <td>Table Cell 2<br> Table Cell 2<br></td> | ||
201 | </tr> | ||
202 | </tbody> | ||
203 | </table> | ||
204 | <table border="1" align="right" class="aligned"> | ||
205 | <tbody> | ||
206 | <tr> | ||
207 | <td>Table Cell 1</td> | ||
208 | </tr> | ||
209 | <tr> | ||
210 | <td>Table Cell 2<br> Table Cell 2<br></td> | ||
211 | </tr> | ||
212 | </tbody> | ||
213 | </table> | ||
214 | <table border="1" style="float: right" class="floated"> | ||
215 | <tbody> | ||
216 | <tr> | ||
217 | <td>Table Cell 1</td> | ||
218 | </tr> | ||
219 | <tr> | ||
220 | <td>Table Cell 2<br> Table Cell 2<br></td> | ||
221 | </tr> | ||
222 | </tbody> | ||
223 | </table> | ||
224 | <table border="1" align=""class="table#124"> | ||
225 | <tbody> | ||
226 | <tr> | ||
227 | <td>Table Cell 1</td> | ||
228 | </tr> | ||
229 | <tr> | ||
230 | <td>Table Cell 2<br> Table Cell 2<br></td> | ||
231 | </tr> | ||
232 | </tbody> | ||
233 | </table> | ||
234 | <table border="1"class="table#125"> | ||
235 | <tbody> | ||
236 | <tr> | ||
237 | <td>Table Cell 1</td> | ||
238 | </tr> | ||
239 | <tr> | ||
240 | <td>Table Cell 2<br> Table Cell 2<br></td> | ||
241 | </tr> | ||
242 | </tbody> | ||
243 | </table> | ||
244 | <p> enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas male</p> | ||
245 | <table border="1"class="table#126"> | ||
246 | <tbody> | ||
247 | <tr> | ||
248 | <td>Table Cell 1</td> | ||
249 | </tr> | ||
250 | <tr> | ||
251 | <td>Table Cell 2<br> Table Cell 2<br></td> | ||
252 | </tr> | ||
253 | </tbody> | ||
254 | </table> | ||
255 | <div style="background: orange; margin: 20px">Upper div</div> | ||
256 | <table style="background: blue; margin: 20px"><tr><td>Lower table</td></tr></table> | ||
257 | <p>Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies</p> | ||
258 | <div><strong>I'm a div. Let me stay here.</strong></div><dl> | ||
259 | <dt>Key</dt> | ||
260 | <dd>pendisse a pellentesque dui, non felis</dd> | ||
261 | <dt>Key</dt> | ||
262 | <dd>pendisse a pellentesque dui, non felis</dd> | ||
263 | </dl> | ||
264 | <div class="11" style="padding: 20px; background: pink; width: 400px"> | ||
265 | Parent | ||
266 | <div class="12" style="padding: 20px; background: orange"> | ||
267 | <!-- comment --> | ||
268 | <!-- another comment --> | ||
269 | <div class="13" style="padding: 20px; background: green"> | ||
270 | Child#2 | ||
271 | </div> | ||
272 | </div> | ||
273 | </div> | ||
274 | </textarea> | ||
275 | |||
276 | <h2>Odd case: first (last) element at the very beginning, short editable</h2> | ||
277 | <textarea cols="80" id="editor2" name="editor1a" rows="10"> | ||
278 | <table border="1" style="width: 300px"> | ||
279 | <tbody> | ||
280 | <tr> | ||
281 | <td> | ||
282 | Test</td> | ||
283 | </tr> | ||
284 | </tbody> | ||
285 | </table> | ||
286 | </textarea> | ||
287 | |||
288 | <h2>Large document, put everywhere</h2> | ||
289 | <textarea id="editor3"> | ||
290 | <p><div class="navbar" align="center" style="color: rgb(0, 0, 0);font-family: sans-serif;font-size: medium;"><a accesskey="p" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">previous</a> <a accesskey="n" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/idl-definitions.html" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">next</a> <a accesskey="c" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/Overview.html#contents" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">contents</a> <a accesskey="i" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/def-index.html" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">index</a><hr title="Navigation area separator"></div><div class="noprint" style="color: rgb(0, 0, 0);font-family: sans-serif;font-size: medium;text-align: right;"><p style="font-family: monospace;font-size: small;">13 November, 2000</p></div><div class="div1" style="color: rgb(0, 0, 0);font-family: sans-serif;font-size: medium;"><a id="Range" name="Range"></a><h1 id="Range-h1" class="div1" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 27px;font-weight: normal; background-color: violet">2. Document Object Model Range</h1><dl style="background: green"><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><i>Editors</i></dt><dd style="margin-top: 0px;margin-bottom: 0px;">Peter Sharpe, SoftQuad Software Inc.</dd><dd style="margin-top: 0px;margin-bottom: 0px;">Vidur Apparao, Netscape Communications Corp.</dd><dd style="margin-top: 0px;margin-bottom: 0px;">Lauren Wood, SoftQuad Software Inc.</dd></dl><div class="noprint"><h2 id="table-of-contents" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">Table of contents</h2><ul class="toc" style="list-style-type: none;list-style-position: initial;list-style-image: initial;"><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-introduction" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.1. Introduction</a></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Definitions" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial; background: red">2.2. Definitions and Notation</a><ul class="toc" style="list-style-type: none;list-style-position: initial;list-style-image: initial;"><li class="tocline4" style="font-style: italic;"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Position" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.2.1. Position</a></li><li class="tocline4" style="font-style: italic;"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Containment" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.2.2. Selection and Partial Selection</a></li><li class="tocline4" style="font-style: italic;"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Notation" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.2.3. Notation</a></li></ul></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Creating" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.3. Creating a Range</a></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Changing" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.4. Changing a Range's Position</a></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Comparing" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.5. Comparing Range Boundary-Points</a></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Deleting-Content" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.6. Deleting Content with a Range</a></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Extracting" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.7. Extracting Content</a></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Cloning" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.8. Cloning Content</a></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Inserting" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.9. Inserting Content</a></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Surrounding" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.10. Surrounding Content</a></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Misc" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.11. Miscellaneous Members</a></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Mutation" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.12. Range modification under document mutation</a><ul class="toc" style="list-style-type: none;list-style-position: initial;list-style-image: initial;"><li class="tocline4" style="font-style: italic;"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Insertions" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.12.1. Insertions</a></li><li class="tocline4" style="font-style: italic;"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Deletions" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.12.2. Deletions</a></li></ul></li><li class="tocline3"><a class="tocxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Interface" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">2.13. Formal Description of the Range Interface</a><ul class="toc" style="list-style-type: none;list-style-position: initial;list-style-image: initial;"><li class="tocline4" style="font-style: italic;"><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-idl" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">Range</a>, <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-DocumentRange-idl" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">DocumentRange</a>, <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">RangeException</a>, <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeExceptionCode" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">RangeExceptionCode</a></li></ul></li></ul></div><div class="div2"><a id="Level-2-Range-introduction" name="Level-2-Range-introduction"></a><h2 id="Level-2-Range-introduction-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.1. Introduction</h2><p>A Range identifies a range of content in a Document, DocumentFragment or Attr. It is contiguous in the sense that it can be characterized as selecting all of the content between a pair of boundary-points.</p><p><b>Note:</b> In a text editor or a word processor, a user can make a selection by pressing down the mouse at one point in a document, moving the mouse to another point, and releasing the mouse. The resulting selection is contiguous and consists of the content between the two points.</p><p>The term 'selecting' does not mean that every Range corresponds to a selection made by a GUI user;however, such a selection can be returned to a DOM user as a Range.</p><p><b>Note:</b> In bidirectional writing (Arabic, Hebrew), a range may correspond to a logical selection that is not necessarily contiguous when displayed. A visually contiguous selection, also used in some cases, may not correspond to a single logical selection, and may therefore have to be represented by more than one range.</p><p>The Range interface provides methods for accessing and manipulating the document tree at a higher level than similar methods in the Node interface. The expectation is that each of the methods provided by the Range interface for the insertion, deletion and copying of content can be directly mapped to a series of Node editing operations enabled by DOM Core. In this sense, the Range operations can be viewed as convenience methods that also enable the implementation to optimize common editing patterns.</p><p>This chapter describes the Range interface, including methods for creating and moving a Range and methods for manipulating content with Ranges.</p><p>The interfaces found within this section are not mandatory. A DOM application may use the <code>hasFeature(feature, version)</code> method of the <code>DOMImplementation</code> interface with parameter values "Range" and "2.0" (respectively) to determine whether or not this module is supported by the implementation. In order to fully support this module, an implementation must also support the "Core" feature defined defined in the DOM Level 2 Core specification [<a class="noxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/references.html#DOMCore" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">DOM Level 2 Core</a>]. Please refer to additional information about <a href="http://www.w3.org/TR/DOM-Level-2-Core/introduction.html#ID-Conformance" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>conformance</em></a> in the DOM Level 2 Core specification [<a class="noxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/references.html#DOMCore" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">DOM Level 2 Core</a>].</p></div><div class="div2" style="background: blue;"><a id="Level-2-Range-Definitions" name="Level-2-Range-Definitions"></a><h2 id="Level-2-Range-Definitions-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal; background: red">2.2. Definitions and Notation</h2><div style="background: yellow" class="div3"><a id="Level-2-Range-Position" name="Level-2-Range-Position"></a><h3 id="Level-2-Range-Position-h3" class="div3" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 19px;font-weight: normal;">2.2.1. Position</h3><p>This chapter refers to two different representations of a document: the text or source form that includes the document markup and the tree representation similar to the one described in the introduction section of the DOM Level 2 Core [<a class="noxref" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/references.html#DOMCore" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">DOM Level 2 Core</a>].</p><p>A Range consists of two <i>boundary-points</i> corresponding to the start and the end of the Range. <a id="td-boundarypoint" name="td-boundarypoint"></a>A boundary-point's position in a Document or DocumentFragment tree can be characterized by a node and an offset. <a id="td-container" name="td-container"></a>The node is called the <i>container</i> of the boundary-point and of its position. <a id="td-ancestor-container" name="td-ancestor-container"></a>The container and its ancestors are the <i>ancestor container</i>s of the boundary-point and of its position.<a id="td-offset" name="td-offset"></a>The offset within the node is called the <i>offset</i> of the boundary-point and its position. If the container is an Attr, Document, DocumentFragment, Element or EntityReference node, the offset is between its <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-child" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>child</em></a> nodes. If the container is a CharacterData, Comment or ProcessingInstruction node, the offset is between the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-16-bit-unit" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>16-bit units</em></a> of the UTF-16 encoded string contained by it.</p><p>The <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-points</em></a> of a Range must have a common <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a> which is either a Document, DocumentFragment or Attr node. That is, the content of a Range must be entirely within the subtree rooted by a single Document, DocumentFragment or Attr Node. <a id="td-root-container" name="td-root-container"></a>This common <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a> is known as the <i>root container</i> of the Range. <a id="td-context-tree" name="td-context-tree"></a>The tree rooted by the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-root-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>root container</em></a> is known as the Range's <i>context tree</i>.</p><p>The <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of a <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> of a Range must be an Element, Comment, ProcessingInstruction, EntityReference, CDATASection, Document, DocumentFragment, Attr, or Text node. None of the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a>s of the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> of a Range can be a DocumentType, Entity or Notation node.</p><p>In terms of the text representation of a document, the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-points</em></a> of a Range can only be on token boundaries. That is, the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> of the text range cannot be in the middle of a start- or end-tag of an element or within the name of an entity or character reference. A Range locates a contiguous portion of the content of the structure model.</p><p>The relationship between locations in a text representation of the document and in the Node tree interface of the DOM is illustrated in the following diagram:<br></p><div align="center"><hr width="90%" size="2"><img src="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/images/RangeExample.gif" alt="Range Example"><hr width="90%" size="2"><b>Range Example</b><hr width="90%" size="2"></div><p>In this diagram, four different Ranges are illustrated. The <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-points</em></a> of each Range are labelled with <i>s#</i> (the start of the Range) and <i>e#</i> (the end of the Range), where # is the number of the Range. For Range 2, the start is in the BODY element and is immediately after the H1 element and immediately before the P element, so its position is between the H1 and P children of BODY. The <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of a <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> whose <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> is not a CharacterData node is 0 if it is before the first child, 1 if between the first and second child, and so on. So, for the start of the Range 2, the<a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> is BODY and the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> is 1. The <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of a <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> whose <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> is a CharacterData node is obtained similarly but using <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-16-bit-unit" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>16-bit unit</em></a> positions instead. For example, the<a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> labelled s1 of the Range 1 has a Text node (the one containing "Title") as its <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> and an <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of 2 since it is between the second and third <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-16-bit-unit" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>16-bit unit</em></a>.</p><p>Notice that the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a>s of Ranges 3 and 4 correspond to the same location in the text representation. An important feature of the Range is that a <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> of a Range can unambiguously represent every position within the document tree.</p><p>The <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a>s and <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a>s of the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a>s can be obtained through the following read-only Range attributes:</p><div class="eg"><pre style="margin-left: 2em;"> readonly attribute Node startContainer;readonly attribute long startOffset;readonly attribute Node endContainer;readonly attribute long endOffset;</pre></div><p><a id="td-collapsed" name="td-collapsed"></a>If the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a>s of a Range have the same <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a>s and <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a>s, the Range is said to be a <i>collapsed</i> Range. (This is often referred to as an insertion point in a user agent.)</p></div><div class="div3"><a id="Level-2-Range-Containment" name="Level-2-Range-Containment"></a><h3 id="Level-2-Range-Containment-h3" class="div3" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 19px;font-weight: normal;">2.2.2. Selection and Partial Selection</h3><p><a id="td-selected" name="td-selected"></a>A node or <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-16-bit-unit" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>16-bit unit</em></a> unit is said to be <i>selected</i> by a Range if it is between the two <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a>s of the Range, that is, if the position immediately before the node or 16-bit unit is before the end of the Range and the position immediately after the node or 16-bit unit is after the start of the range. For example, in terms of a text representation of the document, an element would be <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>selected</em></a>by a Range if its corresponding start-tag was located after the start of the Range and its end-tag was located before the end of the Range. In the examples in the above diagram, the Range 2<a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>selects</em></a> the P node and the Range 3 <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>selects</em></a> the text node containing the text "Blah xyz."</p><p><a id="td-partially-selected" name="td-partially-selected"></a>A node is said to be <i>partially selected</i> by a Range if it is an <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a> of exactly one <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> of the Range. For example, consider Range 1 in the above diagram. The element H1 is <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-partially-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>partially selected</em></a> by that Range since the start of the Range is within one of its children.</p></div><div class="div3"><a id="Level-2-Range-Notation" name="Level-2-Range-Notation"></a><h3 id="Level-2-Range-Notation-h3" class="div3" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 19px;font-weight: normal;">2.2.3. Notation</h3><p>Many of the examples in this chapter are illustrated using a text representation of a document. The <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a>s of a Range are indicated by displaying the characters (be they markup or data characters) between the two <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a>s in bold, as in</p><div class="eg"><pre style="margin-left: 2em;"> <FOO>A<b>BC<BAR>DE</b>F</BAR></FOO></pre></div><p>When both <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a>s are at the same position, they are indicated with a bold caret ('<b>^</b>'), as in</p><div class="eg"><pre style="margin-left: 2em;"> <FOO>A<b>^</b>BC<BAR>DEF</BAR></FOO></pre></div></div></div><div class="div2"><a id="Level-2-Range-Creating" name="Level-2-Range-Creating"></a><h2 id="Level-2-Range-Creating-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.3. Creating a Range</h2><p>A Range is created by calling the <code>createRange()</code> method on the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-DocumentRange-idl" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>DocumentRange</code></a> interface. This interface can be obtained from the object implementing the <code>Document</code> interface using binding-specific casting methods.</p><div class="eg"><pre style="margin-left: 2em;"> interface DocumentRange{Range createRange();}</pre></div><p>The initial state of the Range returned from this method is such that both of its <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a>s are positioned at the beginning of the corresponding Document, before any content. In other words, the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of each <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> is the Document node and the offset within that node is 0.</p><p>Like some objects created using methods in the Document interface (such as Nodes and DocumentFragments), Ranges created via a particular document instance can select only content associated with that Document, or with DocumentFragments and Attrs for which that Document is the <code>ownerDocument</code>. Such Ranges, then, can not be used with other Document instances.</p></div><div class="div2"><a id="Level-2-Range-Changing" name="Level-2-Range-Changing"></a><h2 id="Level-2-Range-Changing-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.4. Changing a Range's Position</h2><p>A Range's position can be specified by setting the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> and <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of each boundary-point with the <code>setStart</code> and <code>setEnd</code> methods.</p><div class="eg"><pre style="margin-left: 2em;"> void setStart(in Node parent, in long offset) raises(RangeException);void setEnd(in Node parent, in long offset) raises(RangeException);</pre></div><p>If one boundary-point of a Range is set to have a <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-root-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>root container</em></a> other than the current one for the Range, the Range is <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-collapsed" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>collapsed</em></a> to the new position. This enforces the restriction that both boundary-points of a Range must have the same <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-root-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>root container</em></a>.</p><p>The start position of a Range is guaranteed to never be after the end position. To enforce this restriction, if the start is set to be at a position after the end, the Range is <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-collapsed" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>collapsed</em></a> to that position. Similarly, if the end is set to be at a position before the start, the Range is <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-collapsed" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>collapsed</em></a> to that position.</p><p>It is also possible to set a Range's position relative to nodes in the tree:</p><div class="eg"><pre style="margin-left: 2em;"> void setStartBefore(in Node node);raises(RangeException);void setStartAfter(in Node node);raises(RangeException);void setEndBefore(in Node node);raises(RangeException);void setEndAfter(in Node node);raises(RangeException);</pre></div><p>The <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-parent" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>parent</em></a> of the node becomes the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> and the Range is subject to the same restrictions as given above in the description of <code>setStart()</code>and <code>setEnd()</code>.</p><p>A Range can be <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-collapsed" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>collapsed</em></a> to either boundary-point:</p><div class="eg"><pre style="margin-left: 2em;"> void collapse(in boolean toStart);</pre></div><p>Passing <code>TRUE</code> as the parameter <code>toStart</code> will <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-collapsed" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>collapse</em></a> the Range to its start, <code>FALSE</code> to its end.</p><p>Testing whether a Range is <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-collapsed" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>collapsed</em></a> can be done by examining the <code>collapsed</code> attribute:</p><div class="eg"><pre style="margin-left: 2em;"> readonly attribute boolean collapsed;</pre></div><p>The following methods can be used to make a Range select the contents of a node or the node itself.</p><div class="eg"><pre style="margin-left: 2em;"> void selectNode(in Node n);void selectNodeContents(in Node n);</pre></div><p>The following examples demonstrate the operation of the methods <code>selectNode</code> and <code>selectNodeContents</code>:</p><div class="eg"><pre style="margin-left: 2em;">Before: <b>^</b><BAR><FOO>A<MOO>B</MOO>C</FOO></BAR>After Range.selectNodeContents(FOO): <BAR><FOO><b>A<MOO>B</MOO>C</b></FOO></BAR>(In this case, FOO is the parent of both boundary-points)After Range.selectNode(FOO):<BAR><b><FOO>A<MOO>B</MOO>C</FOO></b></BAR></pre></div></div><div class="div2"><a id="Level-2-Range-Comparing" name="Level-2-Range-Comparing"></a><h2 id="Level-2-Range-Comparing-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.5. Comparing Range Boundary-Points</h2><p>It is possible to compare two Ranges by comparing their boundary-points:</p><div class="eg"><pre style="margin-left: 2em;"> short compareBoundaryPoints(in CompareHow how, in Range sourceRange) raises(RangeException);</pre></div><p>where <code>CompareHow</code> is one of four values: <code>START_TO_START</code>, <code>START_TO_END</code>, <code>END_TO_END</code> and <code>END_TO_START</code>. The return value is -1, 0 or 1 depending on whether the corresponding boundary-point of the Range is before, equal to, or after the corresponding boundary-point of <code>sourceRange</code>. An exception is thrown if the two Ranges have different <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-root-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>root container</em></a>s.</p><p>The result of comparing two boundary-points (or positions) is specified below. An informal but not always correct specification is that an boundary-point is before, equal to, or after another if it corresponds to a location in a text representation before, equal to, or after the other's corresponding location.</p><p><a id="td-comparison" name="td-comparison"></a>Let A and B be two boundary-points or positions. Then one of the following holds: A is <i>before</i> B, A is <i>equal to</i> B, or A is <i>after</i> B. Which one holds is specified in the following by examining four cases:</p><p>In the first case the boundary-points have the same <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a>. A is <i>before</i> B if its <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> is less than the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of B, A is <i>equal to</i> B if its <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> is equal to the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of B, and A is <i>after</i> B if its <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> is greater than the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of B.</p><p>In the second case a child node C of the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of A is an <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a> of B. In this case, A is <i>before</i> B if the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of A is less than or equal to the index of the child node C and A is <i>after</i>B otherwise.</p><p>In the third case a child node C of the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of B is an <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a> of A. In this case, A is <i>before</i> B if the index of the child node C is less than the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of B and A is <i>after</i> B otherwise.</p><p>In the fourth case, none of three other cases hold: the containers of A and B are <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-sibling" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>siblings</em></a> or <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-descendant" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>descendants</em></a> of sibling nodes. In this case, A is <i>before</i> B if the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of A is before the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of B in a pre-order traversal of the Ranges' <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-context-tree" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>context tree</em></a> and A is <i>after</i> B otherwise.</p><p>Note that because the same location in a text representation of the document can correspond to two different positions in the DOM tree, it is possible for two boundary-points to not compare equal even though they would be equal in the text representation. For this reason, the informal definition above can sometimes be incorrect.</p></div><div class="div2"><a id="Level-2-Range-Deleting-Content" name="Level-2-Range-Deleting-Content"></a><h2 id="Level-2-Range-Deleting-Content-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.6. Deleting Content with a Range</h2><p>One can delete the contents selected by a Range with:</p><div class="eg"><pre style="margin-left: 2em;"> void deleteContents();</pre></div><p><code>deleteContents()</code> deletes all nodes and characters selected by the Range. All other nodes and characters remain in the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-context-tree" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>context tree</em></a> of the Range. Some examples of this deletion operation are:</p><div class="eg"><pre style="margin-left: 2em;">(1) <FOO>A<b>B<MOO>CD</MOO></b>CD</FOO>--><FOO>A<b>^</b>CD</FOO></pre></div><div class="eg"><pre style="margin-left: 2em;">(2) <FOO>A<MOO>B<b>C</MOO>D</b>E</FOO>--><FOO>A<MOO>B</MOO><b>^</b>E</FOO></pre></div><div class="eg"><pre style="margin-left: 2em;">(3) <FOO>X<b>Y<BAR>Z</b>W</BAR>Q</FOO>--><FOO>X<b>^</b><BAR>W</BAR>Q</FOO></pre></div><div class="eg"><pre style="margin-left: 2em;">(4) <FOO><BAR1>A<b>B</BAR1><BAR2/><BAR3>C</b>D</BAR3></FOO>--><FOO><BAR1>A</BAR1><b>^</b><BAR3>D</BAR3></pre></div><p>After <code>deleteContents()</code> is invoked on a Range, the Range is <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-collapsed" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>collapsed</em></a>. If no node was <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-partially-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>partially selected</em></a> by the Range, then it is <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-collapsed" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>collapsed</em></a> to its original start point, as in example (1). If a node was <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-partially-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>partially selected</em></a> by the Range and was an <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a> of the start of the Range and no <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-ancestor" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor</em></a> of the node satisfies these two conditions, then the Range is collapsed to the position immediately after the node, as in examples (2) and (4). If a node was <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-partially-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>partially selected</em></a> by the Range and was an <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a> of the end of the Range and no ancestor of the node satisfies these two conditions, then the Range is collapsed to the position immediately before the node, as in examples (3) and (4).</p><p>Note that if deletion of a Range leaves adjacent Text nodes, they are not automatically merged, and empty Text nodes are not automatically removed. Two Text nodes should be joined only if each is the container of one of the boundary-points of a Range whose contents are deleted. To merge adjacent Text nodes, or remove empty text nodes, the <code>normalize()</code> method on the <code>Node</code>interface should be used.</p></div><div class="div2"><a id="Level-2-Range-Extracting" name="Level-2-Range-Extracting"></a><h2 id="Level-2-Range-Extracting-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.7. Extracting Content</h2><p>If the contents of a Range need to be extracted rather than deleted, the following method may be used:</p><div class="eg"><pre style="margin-left: 2em;"> DocumentFragment extractContents();</pre></div><p>The <code>extractContents()</code> method removes nodes from the Range's <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-context-tree" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>context tree</em></a> similarly to the <code>deleteContents()</code> method. In addition, it places the deleted contents in a new <code>DocumentFragment</code>. The following examples illustrate the contents of the returned DocumentFragment:</p><div class="eg"><pre style="margin-left: 2em;">(1) <FOO>A<b>B<MOO>CD</MOO></b>CD</FOO>-->B<MOO>CD</MOO></pre></div><div class="eg"><pre style="margin-left: 2em;">(2) <FOO>A<MOO>B<b>C</MOO>D</b>E</FOO>--><MOO>C<MOO>D</pre></div><div class="eg"><pre style="margin-left: 2em;">(3) <FOO>X<b>Y<BAR>Z</b>W</BAR>Q</FOO>-->Y<BAR>Z</BAR></pre></div><div class="eg"><pre style="margin-left: 2em;">(4)<FOO><BAR1>A<b>B</BAR1><BAR2/><BAR3>C</b>D</BAR3></FOO>--><BAR1>B</BAR1><BAR2/><BAR3>C</BAR3></pre></div><p>It is important to note that nodes that are <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-partially-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>partially selected</em></a> by the Range are cloned. Since part of such a node's contents must remain in the Range's <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-context-tree" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>context tree</em></a> and part of the contents must be moved to the new DocumentFragment, a clone of the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-partially-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>partially selected</em></a> node is included in the new DocumentFragment. Note that cloning does not take place for <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>selected</em></a> elements;these nodes are moved to the new DocumentFragment.</p></div><div class="div2"><a id="Level-2-Range-Cloning" name="Level-2-Range-Cloning"></a><h2 id="Level-2-Range-Cloning-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.8. Cloning Content</h2><p>The contents of a Range may be duplicated using the following method:</p><div class="eg"><pre style="margin-left: 2em;"> DocumentFragment cloneContents();</pre></div><p>This method returns a <code>DocumentFragment</code> that is similar to the one returned by the method <code>extractContents()</code>. However, in this case, the original nodes and character data in the Range are not removed from the Range's <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-context-tree" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>context tree</em></a>. Instead, all of the nodes and text content within the returned <code>DocumentFragment</code> are cloned.</p></div><div class="div2"><a id="Level-2-Range-Inserting" name="Level-2-Range-Inserting"></a><h2 id="Level-2-Range-Inserting-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.9. Inserting Content</h2><p>A node may be inserted into a Range using the following method:</p><div class="eg"><pre style="margin-left: 2em;"> void insertNode(in Node n) raises(RangeException);</pre></div><p>The <code>insertNode()</code> method inserts the specified node into the Range's <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-context-tree" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>context tree</em></a>. The node is inserted at the start <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> of the Range, without modifying it.</p><p>If the start boundary point of the Range is in a <code>Text</code> node, the <code>insertNode</code> operation splits the <code>Text</code> node at the boundary point. If the node to be inserted is also a <code>Text</code> node, the resulting adjacent<code>Text</code> nodes are not normalized automatically;this operation is left to the application.</p><p>The Node passed into this method can be a <code>DocumentFragment</code>. In that case, the contents of the <code>DocumentFragment</code> are inserted at the start <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-boundarypoint" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>boundary-point</em></a> of the Range, but the <code>DocumentFragment</code>itself is not. Note that if the Node represents the root of a sub-tree, the entire sub-tree is inserted.</p><p>The same rules that apply to the <code>insertBefore()</code> method on the Node interface apply here. Specifically, the Node passed in, if it already has a parent, will be removed from its existing position.</p></div><div class="div2"><a id="Level-2-Range-Surrounding" name="Level-2-Range-Surrounding"></a><h2 id="Level-2-Range-Surrounding-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.10. Surrounding Content</h2><p>The insertion of a single node to subsume the content selected by a Range can be performed with:</p><div class="eg"><pre style="margin-left: 2em;"> void surroundContents(in Node newParent);</pre></div><p>The <code>surroundContents()</code> method causes all of the content selected by the Range to be rooted by the specified node. The nodes may not be Attr, Entity, DocumentType, Notation, Document, or DocumentFragment nodes. Calling <code>surroundContents()</code> with the Element node FOO in the following examples yields:</p><div class="eg"><pre style="margin-left: 2em;"> Before: <BAR>A<b>B<MOO>C</MOO>D</b>E</BAR>After surroundContents(FOO):<BAR>A<b><FOO>B<MOO>C</MOO>D</FOO></b>E</BAR></pre></div><p>Another way of describing the effect of this method on the Range's <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-context-tree" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>context tree</em></a> is to decompose it in terms of other operations:</p><ol><li>Remove the contents selected by the Range with a call to <code>extractContents()</code>.</li><li>Insert the node <code>newParent</code> where the Range is collapsed (after the extraction) with <code>insertNode().</code></li><li>Insert the entire contents of the extracted DocumentFragment into <code>newParent</code>. Specifically, invoke the <code>appendChild()</code> on <code>newParent</code> passing in the DocumentFragment returned as a result of the call to <code>extractContents()</code></li><li>Select <code>newParent</code> and all of its contents with <code>selectNode()</code>.</li></ol><p>The <code>surroundContents()</code> method raises an exception if the Range <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-partially-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>partially selects</em></a> a non-Text node. An example of a Range for which <code>surroundContents()</code>raises an exception is:</p><div class="eg"><pre style="margin-left: 2em;"> <FOO>A<b>B<BAR>C</b>D</BAR>E</FOO></pre></div><p>If the node <code>newParent</code> has any children, those children are removed before its insertion. Also, if the node <code>newParent</code> already has a parent, it is removed from the original parent's <code>childNodes</code> list.</p></div><div class="div2"><a id="Level-2-Range-Misc" name="Level-2-Range-Misc"></a><h2 id="Level-2-Range-Misc-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.11. Miscellaneous Members</h2><p>One can clone a Range:</p><div class="eg"><pre style="margin-left: 2em;"> Range cloneRange();</pre></div><p>This creates a new Range which selects exactly the same content as that selected by the Range on which the method <code>cloneRange</code> was invoked. No content is affected by this operation.</p><p>Because the boundary-points of a Range do not necessarily have the same <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a>s, use:</p><div class="eg"><pre style="margin-left: 2em;"> readonly attribute Node commonAncestorContainer;</pre></div><p>to get the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a> of both boundary-points that is furthest down from the Range's <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-root-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>root container</em></a></p><p>One can get a copy of all the character data selected or partially selected by a Range with:</p><div class="eg"><pre style="margin-left: 2em;"> DOMString toString();</pre></div><p>This does nothing more than simply concatenate all the character data selected by the Range. This includes character data in both <code>Text</code> and <code>CDATASection</code> nodes.</p></div><div class="div2"><a id="Level-2-Range-Mutation" name="Level-2-Range-Mutation"></a><h2 id="Level-2-Range-Mutation-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.12. Range modification under document mutation</h2><p>As a document is modified, the Ranges within the document need to be updated. For example, if one boundary-point of a Range is within a node and that node is removed from the document, then the Range would be invalid unless it is fixed up in some way. This section describes how Ranges are modified under document mutations so that they remain valid.</p><p>There are two general principles which apply to Ranges under document mutation: The first is that all Ranges in a document will remain valid after any mutation operation and the second is that, as much as possible, all Ranges will select the same portion of the document after any mutation operation.</p><p>Any mutation of the document tree which affect Ranges can be considered to be a combination of basic deletion and insertion operations. In fact, it can be convenient to think of those operations as being accomplished using the <code>deleteContents()</code> and <code>insertNode()</code> Range methods and, in the case of Text mutations, the <code>splitText()</code> and <code>normalize()</code> methods.</p><div class="div3"><a id="Level-2-Range-Insertions" name="Level-2-Range-Insertions"></a><h3 id="Level-2-Range-Insertions-h3" class="div3" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 19px;font-weight: normal;">2.12.1. Insertions</h3><p>An insertion occurs at a single point, the insertion point, in the document. For any Range in the document tree, consider each boundary-point. The only case in which the boundary-point will be changed after the insertion is when the boundary-point and the insertion point have the same <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> and the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of the insertion point is strictly less than the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of the Range's boundary-point. In that case the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of the Range's boundary-point will be increased so that it is between the same nodes or characters as it was before the insertion.</p><p>Note that when content is inserted at a boundary-point, it is ambiguous as to where the boundary-point should be repositioned if its relative position is to be maintained. There are two possibilities: at the start or at the end of the newly inserted content. We have chosen that in this case neither the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> nor <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-offset" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>offset</em></a> of the boundary-point is changed. As a result, the boundary-point will be positioned at the start of the newly inserted content.</p><p><em>Examples:</em></p><p>Suppose the Range selects the following:</p><div class="eg"><pre style="margin-left: 2em;"><P>Abcd efgh X<b>Y blah i</b>jkl</P></pre></div><p>Consider the insertion of the text "<i>inserted text</i>" at the following positions:</p><div class="eg"><pre style="margin-left: 2em;">1. Before the 'X':<P>Abcd efgh <i>inserted text</i>X<b>Y blah i</b>jkl</P>2. After the 'X':<P>Abcd efgh X<b><i>inserted text</i>Y blah i</b>jkl</P>3. After the 'Y':<P>Abcd efgh X<b>Y<i>inserted text</i> blah i</b>jkl</P>4. After the 'h' in "Y blah":<P>Abcd efgh X<b>Y blah<i>inserted text</i> i</b>jkl</P></pre></div></div><div class="div3"><a id="Level-2-Range-Deletions" name="Level-2-Range-Deletions"></a><h3 id="Level-2-Range-Deletions-h3" class="div3" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 19px;font-weight: normal;">2.12.2. Deletions</h3><p>Any deletion from the document tree can be considered as a sequence of <code>deleteContents()</code> operations applied to a minimal set of disjoint Ranges. To specify how a Range is modified under deletions we need only consider what happens to a Range under a single <code>deleteContents()</code>operation of another Range. And, in fact, we need only consider what happens to a single boundary-point of the Range since both boundary-points are modified using the same algorithm.</p><p>If a boundary-point of the original Range is within the content being deleted, then after the deletion it will be at the same position as the resulting boundary-point of the (now <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-collapsed" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>collapsed</em></a>) Range used to delete the contents.</p><p>If a boundary-point is after the content being deleted then it is not affected by the deletion unless its <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> is also the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of one of the boundary-points of the Range being deleted. If there is such a common <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a>, then the index of the boundary-point is modified so that the boundary-point maintains its position relative to the content of the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a>.</p><p>If a boundary-point is before the content being deleted then it is not affected by the deletion at all.</p><p><em>Examples:</em></p><p>In these examples, the Range on which <code>deleteContents()</code>is invoked is indicated by the underline.</p><p><em>Example 1.</em></p><p>Before:</p><div class="eg"><pre style="margin-left: 2em;"><P>Abcd <u>efgh T</u><b><u>he</u> Range i</b>jkl</P></pre></div><p>After:</p><div class="eg"><pre style="margin-left: 2em;"><P>Abcd <b>Range i</b>jkl</P></pre></div><p><em>Example 2.</em></p><p>Before:</p><div class="eg"><pre style="margin-left: 2em;"><p>Abcd <u>efgh T<b>he Range i</b>j</u>kl</p></pre></div><p>After:</p><div class="eg"><pre style="margin-left: 2em;"><p>Abcd <b>^</b>kl</p></pre></div><p><em>Example 3.</em></p><p>Before:</p><div class="eg"><pre style="margin-left: 2em;"><P>ABCD <u>efgh T</u><b><u>he <EM>R</u>ange</b></EM>ijkl</P></pre></div><p>After:</p><div class="eg"><pre style="margin-left: 2em;"><P>ABCD <EM><b>ange</b></EM>ijkl</P></pre></div><p>In this example, the container of the start boundary-point after the deletion is the Text node holding the string "ange".</p><p><em>Example 4.</em></p><p>Before:</p><div class="eg"><pre style="margin-left: 2em;"><P>Abcd <u>efgh T</u><b>he Range i</b>jkl</P></pre></div><p>After:</p><div class="eg"><pre style="margin-left: 2em;"><P>Abcd <b>he Range i</b>jkl</P></pre></div><p><em>Example 5.</em></p><p>Before:</p><div class="eg"><pre style="margin-left: 2em;"><P>Abcd <u><EM>efgh T<b>he Range i</b>j</EM></u>kl</P></pre></div><p>After:</p><div class="eg"><pre style="margin-left: 2em;"><P>Abcd <b>^</b>kl</P></pre></div></div></div><div class="div2"><a id="Level-2-Range-Interface" name="Level-2-Range-Interface"></a><h2 id="Level-2-Range-Interface-h2" class="div2" style="text-align: left;color: rgb(0, 90, 156);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: white;font-size: 22px;font-weight: normal;">2.13. Formal Description of the Range Interface</h2><p>To summarize, the complete, formal description of the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-idl" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>Range</code></a> interface is given below:</p><dl ><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><b>Interface <i><a id="Level-2-Range-idl" name="Level-2-Range-idl">Range</a></i></b> (introduced in <b class="since">DOM Level 2</b>)</dt><dd style="margin-top: 0px;margin-bottom: 0px;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><br><b>IDL Definition</b></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="idl-code" style="font-family: monospace;border-top-width: 1px;border-right-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-top-style: solid;border-right-style: solid;border-bottom-style: solid;border-left-style: solid;border-top-color: black;border-right-color: black;border-bottom-color: black;border-left-color: black;border-image: initial;white-space: pre;background-color: rgb(223, 223, 223);"><pre style="margin-left: 2em;">// Introduced in DOM Level 2:interface Range{readonly attribute Node startContainer;// raises(DOMException) on retrieval readonly attribute long startOffset;// raises(DOMException) on retrieval readonly attribute Node endContainer;// raises(DOMException) on retrieval readonly attribute long endOffset;// raises(DOMException) on retrieval readonly attribute boolean collapsed;// raises(DOMException) on retrieval readonly attribute Node commonAncestorContainer;// raises(DOMException) on retrieval void setStart(in Node refNode, in long offset) raises(RangeException, DOMException);void setEnd(in Node refNode, in long offset) raises(RangeException, DOMException);void setStartBefore(in Node refNode) raises(RangeException, DOMException);void setStartAfter(in Node refNode) raises(RangeException, DOMException);void setEndBefore(in Node refNode) raises(RangeException, DOMException);void setEndAfter(in Node refNode) raises(RangeException, DOMException);void collapse(in boolean toStart) raises(DOMException);void selectNode(in Node refNode) raises(RangeException, DOMException);void selectNodeContents(in Node refNode) raises(RangeException, DOMException);// CompareHow const unsigned short START_TO_START=0;const unsigned short START_TO_END=1;const unsigned short END_TO_END=2;const unsigned short END_TO_START=3;short compareBoundaryPoints(in unsigned short how, in Range sourceRange) raises(DOMException);void deleteContents() raises(DOMException);DocumentFragment extractContents() raises(DOMException);DocumentFragment cloneContents() raises(DOMException);void insertNode(in Node newNode) raises(DOMException, RangeException);void surroundContents(in Node newParent) raises(DOMException, RangeException);Range cloneRange() raises(DOMException);DOMString toString() raises(DOMException);void detach() raises(DOMException);};</pre></div><br></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><b>Definition group <i><a id="Level2-Range-compareHow" name="Level2-Range-compareHow">CompareHow</a></i></b></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><p>Passed as a parameter to the <code>compareBoundaryPoints</code> method.</p><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><b>Defined Constants</b></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="constant-name" style="background-color: rgb(221, 255, 210);">END_TO_END</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">Compare end boundary-point of <code>sourceRange</code> to end boundary-point of Range on which <code>compareBoundaryPoints</code> is invoked.</dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="constant-name" style="background-color: rgb(221, 255, 210);">END_TO_START</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">Compare end boundary-point of <code>sourceRange</code> to start boundary-point of Range on which <code>compareBoundaryPoints</code> is invoked.</dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="constant-name" style="background-color: rgb(221, 255, 210);">START_TO_END</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">Compare start boundary-point of <code>sourceRange</code> to end boundary-point of Range on which <code>compareBoundaryPoints</code> is invoked.</dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="constant-name" style="background-color: rgb(221, 255, 210);">START_TO_START</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">Compare start boundary-point of <code>sourceRange</code> to start boundary-point of Range on which <code>compareBoundaryPoints</code> is invoked.</dd></dl></dd></dl></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><b>Attributes</b></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="attribute-name" style="background-color: rgb(255, 255, 210);"><a id="Level-2-Range-attr-collapsed" name="Level-2-Range-attr-collapsed">collapsed</a></code> of type <code>boolean</code>, readonly</dt><dd style="margin-top: 0px;margin-bottom: 0px;">TRUE if the Range is collapsed<br><div class="exceptions"><b>Exceptions on retrieval</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="attribute-name" style="background-color: rgb(255, 255, 210);"><a id="Level-2-Range-attr-commonParent" name="Level-2-Range-attr-commonParent">commonAncestorContainer</a></code> of type <code>Node</code>, readonly</dt><dd style="margin-top: 0px;margin-bottom: 0px;">The <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-deepest" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>deepest</em></a> common <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a> of the Range's two boundary-points.<br><div class="exceptions"><b>Exceptions on retrieval</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="attribute-name" style="background-color: rgb(255, 255, 210);"><a id="Level-2-Range-attr-endParent" name="Level-2-Range-attr-endParent">endContainer</a></code> of type <code>Node</code>, readonly</dt><dd style="margin-top: 0px;margin-bottom: 0px;">Node within which the Range ends<br><div class="exceptions"><b>Exceptions on retrieval</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="attribute-name" style="background-color: rgb(255, 255, 210);"><a id="Level-2-Range-attr-endOffset" name="Level-2-Range-attr-endOffset">endOffset</a></code> of type <code>long</code>, readonly</dt><dd style="margin-top: 0px;margin-bottom: 0px;">Offset within the ending node of the Range.<br><div class="exceptions"><b>Exceptions on retrieval</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="attribute-name" style="background-color: rgb(255, 255, 210);"><a id="Level-2-Range-attr-startParent" name="Level-2-Range-attr-startParent">startContainer</a></code> of type <code>Node</code>, readonly</dt><dd style="margin-top: 0px;margin-bottom: 0px;">Node within which the Range begins<br><div class="exceptions"><b>Exceptions on retrieval</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="attribute-name" style="background-color: rgb(255, 255, 210);"><a id="Level-2-Range-attr-startOffset" name="Level-2-Range-attr-startOffset">startOffset</a></code> of type <code>long</code>, readonly</dt><dd style="margin-top: 0px;margin-bottom: 0px;">Offset within the starting node of the Range.<br><div class="exceptions"><b>Exceptions on retrieval</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div></dd></dl></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><b>Methods</b></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-cloneContents" name="Level2-Range-method-cloneContents">cloneContents</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Duplicates the contents of a Range<div class="return"><b>Return Value</b><div class="returntable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the return value, the second contains a short description" border="0"><tbody><tr><td valign="top"><p><code>DocumentFragment</code></p></td><td><p>A DocumentFragment that contains content equivalent to this Range.</p></td></tr></tbody></table></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>HIERARCHY_REQUEST_ERR: Raised if a DocumentType node would be extracted into the new DocumentFragment.</p><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Parameters</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-clone" name="Level2-Range-method-clone">cloneRange</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Produces a new Range whose boundary-points are equal to the boundary-points of the Range.<div class="return"><b>Return Value</b><div class="returntable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the return value, the second contains a short description" border="0"><tbody><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-idl" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>Range</code></a></p></td><td><p>The duplicated Range.</p></td></tr></tbody></table></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Parameters</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-collapse" name="Level2-Range-method-collapse">collapse</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Collapse a Range onto one of its boundary-points<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">toStart</code> of type <code>boolean</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">If TRUE, collapses the Range onto its start;if FALSE, collapses it onto its end.<br></dd></dl></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-compareBoundaryPoints" name="Level2-Range-method-compareBoundaryPoints">compareBoundaryPoints</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Compare the boundary-points of two Ranges in a document.<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">how</code> of type <code>unsigned short</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">A code representing the type of comparison, as defined above.<br></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">sourceRange</code> of type <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-idl" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>Range</code></a></dt><dd style="margin-top: 0px;margin-bottom: 0px;">The <code>Range</code> on which this current <code>Range</code> is compared to.<br></dd></dl></div></div><div class="return"><b>Return Value</b><div class="returntable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the return value, the second contains a short description" border="0"><tbody><tr><td valign="top"><p><code>short</code></p></td><td><p>-1, 0 or 1 depending on whether the corresponding boundary-point of the Range is respectively before, equal to, or after the corresponding boundary-point of<code>sourceRange</code>.</p></td></tr></tbody></table></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>WRONG_DOCUMENT_ERR: Raised if the two Ranges are not in the same Document or DocumentFragment.</p><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-deleteContents" name="Level2-Range-method-deleteContents">deleteContents</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Removes the contents of a Range from the containing document or document fragment without returning a reference to the removed content.<div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>NO_MODIFICATION_ALLOWED_ERR: Raised if any portion of the content of the Range is read-only or any of the nodes that contain any of the content of the Range are read-only.</p><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Parameters</b></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-detach" name="Level2-Range-method-detach">detach</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Called to indicate that the Range is no longer in use and that the implementation may relinquish any resources associated with this Range. Subsequent calls to any methods or attribute getters on this Range will result in a <code>DOMException</code> being thrown with an error code of <code>INVALID_STATE_ERR</code>.<div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Parameters</b></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-extractContents" name="Level2-Range-method-extractContents">extractContents</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Moves the contents of a Range from the containing document or document fragment to a new DocumentFragment.<div class="return"><b>Return Value</b><div class="returntable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the return value, the second contains a short description" border="0"><tbody><tr><td valign="top"><p><code>DocumentFragment</code></p></td><td><p>A DocumentFragment containing the extracted contents.</p></td></tr></tbody></table></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>NO_MODIFICATION_ALLOWED_ERR: Raised if any portion of the content of the Range is read-only or any of the nodes which contain any of the content of the Range are read-only.</p><p>HIERARCHY_REQUEST_ERR: Raised if a DocumentType node would be extracted into the new DocumentFragment.</p><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Parameters</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-insertNode" name="Level2-Range-method-insertNode">insertNode</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Inserts a node into the Document or DocumentFragment at the start of the Range. If the container is a Text node, this will be split at the start of the Range (as if the Text node's splitText method was performed at the insertion point) and the insertion will occur between the two resulting Text nodes. Adjacent Text nodes will not be automatically merged. If the node to be inserted is a DocumentFragment node, the children will be inserted rather than the DocumentFragment node itself.<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">newNode</code> of type <code>Node</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">The node to insert at the start of the Range<br></dd></dl></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>NO_MODIFICATION_ALLOWED_ERR: Raised if an <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a> of the start of the Range is read-only.</p><p>WRONG_DOCUMENT_ERR: Raised if <code>newNode</code> and the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of the start of the Range were not created from the same document.</p><p>HIERARCHY_REQUEST_ERR: Raised if the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of the start of the Range is of a type that does not allow children of the type of <code>newNode</code> or if <code>newNode</code>is an ancestor of the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a>.</p><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>RangeException</code></a></p></td><td><p>INVALID_NODE_TYPE_ERR: Raised if <code>newNode</code> is an Attr, Entity, Notation, or Document node.</p></td></tr></tbody></table></div></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-selectNode" name="Level2-Range-method-selectNode">selectNode</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Select a node and its contents<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">refNode</code> of type <code>Node</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">The node to select.<br></dd></dl></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>RangeException</code></a></p></td><td><p>INVALID_NODE_TYPE_ERR: Raised if an ancestor of <code>refNode</code> is an Entity, Notation or DocumentType node or if <code>refNode</code> is a Document, DocumentFragment, Attr, Entity, or Notation node.</p></td></tr><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-selectNodeContents" name="Level2-Range-method-selectNodeContents">selectNodeContents</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Select the contents within a node<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">refNode</code> of type <code>Node</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">Node to select from<br></dd></dl></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>RangeException</code></a></p></td><td><p>INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor of <code>refNode</code> is an Entity, Notation or DocumentType node.</p></td></tr><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-setEnd" name="Level2-Range-method-setEnd">setEnd</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Sets the attributes describing the end of a Range.<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">refNode</code> of type <code>Node</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">The <code>refNode</code> value. This parameter must be different from <code>null</code>.<br></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">offset</code> of type <code>long</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">The <code>endOffset</code> value.<br></dd></dl></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>RangeException</code></a></p></td><td><p>INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor of <code>refNode</code> is an Entity, Notation, or DocumentType node.</p></td></tr><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INDEX_SIZE_ERR: Raised if <code>offset</code> is negative or greater than the number of child units in <code>refNode</code>. Child units are <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-16-bit-unit" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>16-bit units</em></a> if <code>refNode</code> is a type of CharacterData node (e.g., a Text or Comment node) or a ProcessingInstruction node. Child units are Nodes in all other cases.</p><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-setEndAfter" name="Level2-Range-method-setEndAfter">setEndAfter</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Sets the end of a Range to be after a node<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">refNode</code> of type <code>Node</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">Range ends after <code>refNode</code>.<br></dd></dl></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>RangeException</code></a></p></td><td><p>INVALID_NODE_TYPE_ERR: Raised if the root container of <code>refNode</code> is not an Attr, Document or DocumentFragment node or if <code>refNode</code> is a Document, DocumentFragment, Attr, Entity, or Notation node.</p></td></tr><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-setEndBefore" name="Level2-Range-method-setEndBefore">setEndBefore</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Sets the end position to be before a node.<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">refNode</code> of type <code>Node</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">Range ends before <code>refNode</code><br></dd></dl></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>RangeException</code></a></p></td><td><p>INVALID_NODE_TYPE_ERR: Raised if the root container of <code>refNode</code> is not an Attr, Document, or DocumentFragment node or if <code>refNode</code> is a Document, DocumentFragment, Attr, Entity, or Notation node.</p></td></tr><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-setStart" name="Level2-Range-method-setStart">setStart</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Sets the attributes describing the start of the Range.<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">refNode</code> of type <code>Node</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">The <code>refNode</code> value. This parameter must be different from <code>null</code>.<br></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">offset</code> of type <code>long</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">The <code>startOffset</code> value.<br></dd></dl></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>RangeException</code></a></p></td><td><p>INVALID_NODE_TYPE_ERR: Raised if <code>refNode</code> or an ancestor of <code>refNode</code> is an Entity, Notation, or DocumentType node.</p></td></tr><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INDEX_SIZE_ERR: Raised if <code>offset</code> is negative or greater than the number of child units in <code>refNode</code>. Child units are <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/glossary.html#dt-16-bit-unit" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>16-bit units</em></a> if <code>refNode</code> is a type of CharacterData node (e.g., a Text or Comment node) or a ProcessingInstruction node. Child units are Nodes in all other cases.</p><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-setStartAfter" name="Level2-Range-method-setStartAfter">setStartAfter</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Sets the start position to be after a node<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">refNode</code> of type <code>Node</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">Range starts after <code>refNode</code><br></dd></dl></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>RangeException</code></a></p></td><td><p>INVALID_NODE_TYPE_ERR: Raised if the root container of <code>refNode</code> is not an Attr, Document, or DocumentFragment node or if <code>refNode</code> is a Document, DocumentFragment, Attr, Entity, or Notation node.</p></td></tr><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-setStartBefore" name="Level2-Range-setStartBefore">setStartBefore</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Sets the start position to be before a node<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">refNode</code> of type <code>Node</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">Range starts before <code>refNode</code><br></dd></dl></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>RangeException</code></a></p></td><td><p>INVALID_NODE_TYPE_ERR: Raised if the root container of <code>refNode</code> is not an Attr, Document, or DocumentFragment node or if <code>refNode</code> is a Document, DocumentFragment, Attr, Entity, or Notation node.</p></td></tr><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-surroundContents" name="Level2-Range-method-surroundContents">surroundContents</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Reparents the contents of the Range to the given node and inserts the node at the position of the start of the Range.<div class="parameters"><b>Parameters</b><div class="paramtable" style="margin-left: 1em;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="parameter-name" style="background-color: rgb(254, 230, 248);">newParent</code> of type <code>Node</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">The node to surround the contents with.<br></dd></dl></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>NO_MODIFICATION_ALLOWED_ERR: Raised if an <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-ancestor-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>ancestor container</em></a> of either boundary-point of the Range is read-only.</p><p>WRONG_DOCUMENT_ERR: Raised if <code>newParent</code> and the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of the start of the Range were not created from the same document.</p><p>HIERARCHY_REQUEST_ERR: Raised if the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of the start of the Range is of a type that does not allow children of the type of <code>newParent</code> or if<code>newParent</code> is an ancestor of the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> or if <code>node</code> would end up with a child node of a type not allowed by the type of <code>node</code>.</p><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>RangeException</code></a></p></td><td><p>BAD_BOUNDARYPOINTS_ERR: Raised if the Range <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-partially-selected" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>partially selects</em></a> a non-text node.</p><p>INVALID_NODE_TYPE_ERR: Raised if <code>node</code> is an Attr, Entity, DocumentType, Notation, Document, or DocumentFragment node.</p></td></tr></tbody></table></div></div><div><b>No Return Value</b></div></div></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-Range-method-toString" name="Level2-Range-method-toString">toString</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">Returns the contents of a Range as a string. This string contains only the data characters, not any markup.<div class="return"><b>Return Value</b><div class="returntable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the return value, the second contains a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMString</code></p></td><td><p>The contents of the Range.</p></td></tr></tbody></table></div></div><div class="exceptions"><b>Exceptions</b><div class="exceptiontable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the exception, the second contains the specific error code and a short description" border="0"><tbody><tr><td valign="top"><p><code>DOMException</code></p></td><td><p>INVALID_STATE_ERR: Raised if <code>detach()</code> has already been invoked on this object.</p></td></tr></tbody></table></div></div><div><b>No Parameters</b></div></div></dd></dl></dd></dl></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><b>Interface <i><a id="Level-2-DocumentRange-idl" name="Level-2-DocumentRange-idl">DocumentRange</a></i></b> (introduced in <b class="since">DOM Level 2</b>)</dt><dd style="margin-top: 0px;margin-bottom: 0px;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><br><b>IDL Definition</b></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="idl-code" style="font-family: monospace;border-top-width: 1px;border-right-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-top-style: solid;border-right-style: solid;border-bottom-style: solid;border-left-style: solid;border-top-color: black;border-right-color: black;border-bottom-color: black;border-left-color: black;border-image: initial;white-space: pre;background-color: rgb(223, 223, 223);"><pre style="margin-left: 2em;">// Introduced in DOM Level 2:interface DocumentRange{Range createRange();};</pre></div><br></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><b>Methods</b></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="method-name" style="background-color: rgb(217, 230, 248);"><a id="Level2-DocumentRange-method-createRange" name="Level2-DocumentRange-method-createRange">createRange</a></code></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="method">This interface can be obtained from the object implementing the <code>Document</code> interface using binding-specific casting methods.<div class="return"><b>Return Value</b><div class="returntable" style="margin-left: 1em;"><table summary="Layout table: the first cell contains the type of the return value, the second contains a short description" border="0"><tbody><tr><td valign="top"><p><a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-idl" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>Range</code></a></p></td><td><p>The initial state of the Range returned from this method is such that both of its boundary-points are positioned at the beginning of the corresponding Document, before any content. The Range returned can only be used to select content associated with this Document, or with DocumentFragments and Attrs for which this Document is the <code>ownerDocument</code>.</p></td></tr></tbody></table></div></div><div><b>No Parameters</b></div><div><b>No Exceptions</b></div></div></dd></dl></dd></dl></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><b>Exception <i><a id="RangeException" name="RangeException">RangeException</a></i></b> introduced in <b class="version">DOM Level 2</b></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><p>Range operations may throw a <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#RangeException" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><code>RangeException</code></a> as specified in their method descriptions.</p><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><br><b>IDL Definition</b></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><div class="idl-code" style="font-family: monospace;border-top-width: 1px;border-right-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-top-style: solid;border-right-style: solid;border-bottom-style: solid;border-left-style: solid;border-top-color: black;border-right-color: black;border-bottom-color: black;border-left-color: black;border-image: initial;white-space: pre;background-color: rgb(223, 223, 223);"><pre style="margin-left: 2em;">// Introduced in DOM Level 2:exception RangeException{unsigned short code;};// RangeExceptionCodeconst unsigned short BAD_BOUNDARYPOINTS_ERR=1;const unsigned short INVALID_NODE_TYPE_ERR=2;</pre></div><br></dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><b>Definition group <i><a id="RangeExceptionCode" name="RangeExceptionCode">RangeExceptionCode</a></i></b></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><p>An integer indicating the type of error generated.</p><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><b>Defined Constants</b></dt><dd style="margin-top: 0px;margin-bottom: 0px;"><dl><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="constant-name" style="background-color: rgb(221, 255, 210);">BAD_BOUNDARYPOINTS_ERR</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">If the boundary-points of a Range do not meet specific requirements.</dd><dt style="margin-top: 0px;margin-bottom: 0px;font-weight: bold;"><code class="constant-name" style="background-color: rgb(221, 255, 210);">INVALID_NODE_TYPE_ERR</code></dt><dd style="margin-top: 0px;margin-bottom: 0px;">If the <a href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#td-container" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;"><em>container</em></a> of an boundary-point of a Range is being set to either a node of an invalid type or a node with an ancestor of an invalid type.</dd></dl></dd></dl></dd></dl></dd></dl></div></div><div class="navbar" align="center" style="color: rgb(0, 0, 0);font-family: sans-serif;font-size: medium;"><hr title="Navigation area separator"><a accesskey="p" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">previous</a> <a accesskey="n" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/idl-definitions.html" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">next</a> <a accesskey="c" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/Overview.html#contents" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">contents</a> <a accesskey="i" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/def-index.html" style="color: rgb(102, 0, 153);background-image: initial;background-attachment: initial;background-origin: initial;background-clip: initial;background-color: transparent;background-position: initial initial;background-repeat: initial initial;">index</a></div></p><dl></dl> | ||
291 | </textarea> | ||
292 | |||
293 | <h2>Deeply nested divs</h2> | ||
294 | <textarea name="editor4"> | ||
295 | <p> </p><h1 id="mainHeader" style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; font-weight: normal; font-size: 26px; color: rgb(7, 130, 193); font-family: Arial, Helvetica, sans-serif; background-color: rgb(226, 226, 226); ">Jobs</h1><div id="node-438" class="node node-type-page" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 18px; color: rgb(85, 85, 85); font-family: Arial, Helvetica, sans-serif; background-color: rgb(226, 226, 226); "><div class="node-inner" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; "><div class="meta" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; "> </div><div class="content" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; "><div class="contentBox" style="margin-top: 0px; margin-right: 0px; margin-bottom: 20px; margin-left: 0px; padding-top: 15px; padding-right: 15px; padding-bottom: 1px; padding-left: 15px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; background-color: rgb(239, 239, 239); border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(226, 226, 226); border-right-color: rgb(226, 226, 226); border-bottom-color: rgb(226, 226, 226); border-left-color: rgb(226, 226, 226); position: relative; "><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">CKSource is a successful company with thousands of customers all around the world, including top names like IBM and Oracle. Our company is growing fast, with impressive sales results. This strong growth expands our range of opportunities, followed by the growth of our team. Take this chance and <strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">join us!</strong></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Working in a <strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">successful Open Source project </strong>is certainly a lot of fun. CKEditor is one of the most frequently used text editors out there, and this success means new responsibilities. We are providing a key component for the software that is powering the Web today. It is downloaded daily by thousands of people all around the world and used by hundreds of thousands out there.</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">We are constantly looking for top-notch, creative, and enthusiastic professionals ready to join our international team.</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">We offer a work culture where ideas are free to fly and diversity is our everyday life.</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">There is no need to relocate. No matter where you are, as long as you love what you do, you are the right person for us!</p><div class="post joboffer" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; border-top-width: 1px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; border-top-style: solid; border-top-color: rgb(229, 230, 231); " id=""><h2 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; font-size: 15px; color: rgb(0, 0, 0); ">AJD - Advanced JavaScript Developer</h2><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Location: <strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Europe and Its Neighbourhood</strong> (from GMT 0 to GMT +2).</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Employment type: <strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Full time</strong>.</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">We are looking for talented people to join our team. Ideal candidates will have:</p><ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-right: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Several years of experience with professional JavaScript programming, which we consider is;<ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-right: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Writing pure, object-oriented JavaScript applications.</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Ability to create complex JavaScript applications based on your own skills only (excluding usage of external libraries such as jQuery, Prototype, Dojo, or MooTools).</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Being aware and able to solving asynchronous issues.</li></ul></li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">In-depth knowledge of core Web standards, like HTML, XML, DOM, and CSS — including their intrinsic implementation differences among browsers (with IE6 also);</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Ability to understand and fix complicated DOM manipulation problems.</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Good (enough) English speaking and writing skills. This is the language used in the company.</li></ul><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">"Wow" candidates will also have (not required though):</p><ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-right: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Experience with CKEditor or FCKeditor, having possibly collaborated with the project;</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Experience with rich text editors;</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Experience with HTML5, CSS3 development;</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Experience with Test Cases (like YUI Test);</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">A Bachelor's or Master's degree in Computer Science;</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Passion for Open Source.</li></ul></div><div class="post" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 30px; padding-left: 0px; border-top-width: 1px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; border-top-style: solid; border-top-color: rgb(229, 230, 231); " id=""><h3 style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; font-size: 14px; ">In return we offer:</h3><ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-right: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; "><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Permanent full time employment contract;</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Flexible working hours;</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Competitive salary;</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; "><strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Work </strong>from <strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">home</strong> (you will forget what a traffic jam is);</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Working with smart and motivated <strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">professionals</strong>;</li><li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 40px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Becoming a <strong style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">part of great team</strong> who delivers worldwide known software.</li></ul><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Let us start talking. Tell us about the projects you have worked on and your role in them; point to your experience and anything you think might make you a perfect candidate. Contact us with your CV at: <a href="" title="jobs at (spam protection) cksource dot com" id="jobmail1" style="color: rgb(24, 157, 225); ">jobs@cksource.com</a> now!</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">We are sure you will enjoy it!</p></div><div class="post" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 30px; padding-left: 0px; border-top-width: 1px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; border-top-style: solid; border-top-color: rgb(229, 230, 231); "><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">Please note we only accept CV's in English. Your application must include the following note:</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; border-image: initial; line-height: 1.5em; ">"I hereby authorize you to process my personal data included in my job application for the needs of the recruitment process (in accordance to the Personal Data Protection Act 29.08.1997 no 133 position 883).”</p></div></div></div></div></div><dl></dl> | ||
296 | </textarea> | ||
297 | |||
298 | <h2>Line custom look</h2> | ||
299 | <div id="hood"> | ||
300 | <h1> | ||
301 | <img alt="" src="http://a.cksource.com/c/1/inc/img/demo-little-red.jpg" style="margin-left: 10px; margin-right: 10px; float: left; width: 120px; height: 168px;" />Little Red Riding Hood</h1> | ||
302 | <p> | ||
303 | "<b>Little Red Riding Hood</b>" is a famous <a href="http://en.wikipedia.org/wiki/Fairy_tale" title="Fairy tale">fairy tale</a> about a young girl's encounter with a wolf. The story has been changed considerably in its history and subject to numerous modern adaptations and readings.</p> | ||
304 | <table align="right" border="1" cellpadding="1" cellspacing="1" style="width: 200px;"> | ||
305 | <caption> | ||
306 | <strong>International Names</strong></caption> | ||
307 | <tbody> | ||
308 | <tr> | ||
309 | <td> | ||
310 | Chinese</td> | ||
311 | <td> | ||
312 | <i>小紅帽</i></td> | ||
313 | </tr> | ||
314 | <tr> | ||
315 | <td> | ||
316 | Italian</td> | ||
317 | <td> | ||
318 | <i>Cappuccetto Rosso</i></td> | ||
319 | </tr> | ||
320 | <tr> | ||
321 | <td> | ||
322 | Spanish</td> | ||
323 | <td> | ||
324 | <i>Caperucita Roja</i></td> | ||
325 | </tr> | ||
326 | </tbody> | ||
327 | </table> | ||
328 | <hr> | ||
329 | <hr> | ||
330 | <p> | ||
331 | The version most widely known today is based on the <a href="http://en.wikipedia.org/wiki/Brothers_Grimm" title="Brothers Grimm">Brothers Grimm</a> variant. It is about a girl called Little Red Riding Hood, after the red <a href="http://en.wikipedia.org/wiki/Hood_%28headgear%29" title="Hood (headgear)">hooded</a> <a href="http://en.wikipedia.org/wiki/Cape" title="Cape">cape</a> or <a href="http://en.wikipedia.org/wiki/Cloak" title="Cloak">cloak</a> she wears. The girl walks through the woods to deliver food to her sick grandmother.</p> | ||
332 | <p> | ||
333 | A wolf wants to eat the girl but is afraid to do so in public. He approaches the girl, and she naïvely tells him where she is going. He suggests the girl pick some flowers, which she does. In the meantime, he goes to the grandmother's house and gains entry by pretending to be the girl. He swallows the grandmother whole, and waits for the girl, disguised as the grandmother.</p> | ||
334 | <p> | ||
335 | When the girl arrives, she notices he looks very strange to be her grandma. In most retellings, this eventually culminates with Little Red Riding Hood saying, "My, what big teeth you have!"<br /> | ||
336 | To which the wolf replies, "The better to eat you with," and swallows her whole, too.</p> | ||
337 | <p> | ||
338 | A <a href="http://en.wikipedia.org/wiki/Hunter" title="Hunter">hunter</a>, however, comes to the rescue and cuts the wolf open. Little Red Riding Hood and her grandmother emerge unharmed. They fill the wolf's body with heavy stones, which drown him when he falls into a well. Other versions of the story have had the grandmother shut in the closet instead of eaten, and some have Little Red Riding Hood saved by the hunter as the wolf advances on her rather than after she is eaten.</p> | ||
339 | <p> | ||
340 | The tale makes the clearest contrast between the safe world of the village and the dangers of the <a href="http://en.wikipedia.org/wiki/Enchanted_forest" title="Enchanted forest">forest</a>, conventional antitheses that are essentially medieval, though no written versions are as old as that.</p> | ||
341 | </div> | ||
342 | |||
343 | <h2>Extreme inline editing</h2> | ||
344 | <div id="interpret" contenteditable="true" style="left: 123px; outline: 1px solid red; border: 15px solid green; position: relative; top: 30; left: 30px;"> | ||
345 | <div style="padding: 20px; background: gray; width: 300px" class="1">Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies. Curabitur et ligula. Ut molestie a, ultricies porta urna. Vestibulum commodo volutpat a, convallis ac, laoreet enim.</div> | ||
346 | <div style="background: violet; padding: 30px;" class="static"> | ||
347 | Position static | ||
348 | <div style="background: green; padding: 30px; border: 14px solid orange">foo</div> | ||
349 | </div> | ||
350 | <dl class="2"> | ||
351 | <dt>Key</dt><dd>Value</dd> | ||
352 | </dl> | ||
353 | <div>Whatever</div> | ||
354 | <hr id="hr"> | ||
355 | <p>Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies</p> | ||
356 | <hr> | ||
357 | <hr> | ||
358 | <p>Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies</p> | ||
359 | <div style="background: green; padding: 30px; width: 200px">foo</div> | ||
360 | </div> | ||
361 | |||
362 | <h2>Enter mode: BR</h2> | ||
363 | <textarea cols="80" id="editor5" name="editor5" rows="10"> | ||
364 | Foo<br /> | ||
365 | <hr style="margin: 50px" /> | ||
366 | <hr style="margin: 50px" /> | ||
367 | Foo | ||
368 | </textarea> | ||
369 | |||
370 | <div id="dev"> | ||
371 | <p id="mouseData"> | ||
372 | <span>Mouse over: <strong id="over"></strong></span> | ||
373 | <span style="display: block">Mouse Y-pos.: <span id="my"></span></span> | ||
374 | </p> | ||
375 | <p id="triggerData"> | ||
376 | <span id="tr_type"></span> | ||
377 | <span id="tr_upper"></span> | ||
378 | <span id="tr_lower"></span> | ||
379 | <span id="tr_edge"></span> | ||
380 | </dl> | ||
381 | <p id="timeData">Time: <span id="time"></span></p> | ||
382 | <p id="hiddenData">Hidden state: <span id="hid"></span></p> | ||
383 | </div> | ||
384 | <script> | ||
385 | |||
386 | 'use strict'; | ||
387 | |||
388 | function fixedWidthNumber( text, chars ) { | ||
389 | return ( Array( chars ).join( 0 ) + text ).slice( -chars ); | ||
390 | } | ||
391 | |||
392 | var DEBUG = { | ||
393 | startTimer: function() { | ||
394 | DEBUG.timer = new Date().getTime(); | ||
395 | }, | ||
396 | |||
397 | stopTimer: (function() { | ||
398 | var label = CKEDITOR.document.getById( 'time' ), | ||
399 | max = 0, | ||
400 | count = 0, | ||
401 | values = [], | ||
402 | mean = 0, | ||
403 | time = 0; | ||
404 | |||
405 | return function() { | ||
406 | time = new Date().getTime() - DEBUG.timer; | ||
407 | max = Math.max( time, max ); | ||
408 | |||
409 | values.unshift( time ); | ||
410 | ( 20 in values ) && values.pop(); | ||
411 | mean = 0; | ||
412 | |||
413 | for( var i = 0 ; i < values.length ; i++ ) | ||
414 | mean += values[ i ]; | ||
415 | |||
416 | mean = mean / i; | ||
417 | |||
418 | label.setText( fixedWidthNumber( time, 3 ) + | ||
419 | ' ms, mean: ' + fixedWidthNumber( 0 | mean, 3 ) + | ||
420 | ' ms, max: ' + fixedWidthNumber( max, 3 ) + | ||
421 | ' ms' ) | ||
422 | count++; | ||
423 | } | ||
424 | })(), | ||
425 | |||
426 | mousePos: (function( y, element ) | ||
427 | { | ||
428 | var my = CKEDITOR.document.getById( 'my' ), | ||
429 | over = CKEDITOR.document.getById( 'over' ), | ||
430 | name; | ||
431 | |||
432 | return function( y, element ) { | ||
433 | my.setText( y ); | ||
434 | |||
435 | if( element && element.$ && element.type == CKEDITOR.NODE_ELEMENT ) { | ||
436 | try { | ||
437 | name = element.getName(); | ||
438 | over.setText( name + '.' + element.getAttribute( 'class' ) ); | ||
439 | } catch( e ) {} | ||
440 | } | ||
441 | else | ||
442 | over.setText( '-' ); | ||
443 | } | ||
444 | })(), | ||
445 | |||
446 | showTrigger: (function( trigger ) | ||
447 | { | ||
448 | var tr_type = CKEDITOR.document.getById( 'tr_type' ), | ||
449 | tr_upper = CKEDITOR.document.getById( 'tr_upper' ), | ||
450 | tr_lower = CKEDITOR.document.getById( 'tr_lower' ), | ||
451 | tr_edge = CKEDITOR.document.getById( 'tr_edge' ), | ||
452 | tup, tbo, upper, lower; | ||
453 | |||
454 | return function( trigger ) { | ||
455 | tup && tup.removeAttribute('id') && ( tup = null ); | ||
456 | tbo && tbo.removeAttribute('id') && ( tbo = null ); | ||
457 | |||
458 | if ( !trigger ) | ||
459 | return tr_type.setText( '-' ) && | ||
460 | tr_upper.setText( '-' ) && | ||
461 | tr_lower.setText( '-' ) && | ||
462 | tr_edge.setText( '-' ); | ||
463 | |||
464 | upper = trigger.upper, | ||
465 | lower = trigger.lower; | ||
466 | |||
467 | tr_type.setText( trigger.type == 2 ? 'EXPAND': 'EDGE' ); | ||
468 | tr_upper.setText( upper ? upper.getName() + '.' + upper.getAttribute( 'class' ): 'NULL' ); | ||
469 | tr_lower.setText( lower ? lower.getName() + '.' + lower.getAttribute( 'class' ): 'NULL' ); | ||
470 | tr_edge.setText( trigger.edge ? [ 'EDGE_TOP', 'EDGE_BOTTOM', 'EDGE_MIDDLE' ][ trigger.edge - 1 ]: 'NULL' ); | ||
471 | |||
472 | upper && ( tup = upper ) && tup.setAttribute( 'id', 'tup' ); | ||
473 | lower && ( tbo = lower ) && tbo.setAttribute( 'id', 'tbo' ); | ||
474 | } | ||
475 | })(), | ||
476 | |||
477 | showHidden: (function( state ) | ||
478 | { | ||
479 | var cnt = CKEDITOR.document.getById( 'hid' ); | ||
480 | |||
481 | return function( state ) { | ||
482 | cnt[ state ? 'addClass': 'removeClass' ]( 'hl' ); | ||
483 | cnt.setText( state ? 'enabled': 'disabled' ); | ||
484 | } | ||
485 | })(), | ||
486 | |||
487 | markElement: function( element ) { | ||
488 | if( !isHtml( element )) | ||
489 | return; | ||
490 | |||
491 | DEBUG.marked && DEBUG.marked.setStyles( { | ||
492 | 'outline': 'none' | ||
493 | } ); | ||
494 | |||
495 | DEBUG.marked = element; | ||
496 | |||
497 | element.setStyles( { | ||
498 | 'outline': 'red solid 2px' | ||
499 | } ); | ||
500 | }, | ||
501 | |||
502 | // Log functions. | ||
503 | log: function() {}, | ||
504 | logElements: function() {}, | ||
505 | groupStart: function() {}, | ||
506 | groupEnd: function() {}, | ||
507 | logEnd: function() {}, | ||
508 | logElementsEnd: function() {} | ||
509 | }; | ||
510 | |||
511 | var logEnable = { | ||
512 | log: function() { | ||
513 | var args = []; | ||
514 | for( var i = 0; i < arguments.length ; i++ ) | ||
515 | args.push( arguments[ i ] ); | ||
516 | |||
517 | console.log.apply( console, args ); | ||
518 | }, | ||
519 | |||
520 | logElements: function( elements, labels, info ) { | ||
521 | var log = {}, | ||
522 | label; | ||
523 | |||
524 | for ( var i = 0 ; i < elements.length; i++ ) { | ||
525 | label = labels ? labels [ i ] : i; | ||
526 | |||
527 | if( !elements[ i ] ) { | ||
528 | log[ label ] = { | ||
529 | 'name': 'null', | ||
530 | 'class': 'null' | ||
531 | } | ||
532 | } | ||
533 | else { | ||
534 | log[ labels ? labels [ i ]: i ] = { | ||
535 | 'name': elements[ i ].is ? elements[ i ].getName(): 'null', | ||
536 | 'class': elements[ i ].is ? elements[ i ].getAttribute( 'class' ): 'null' | ||
537 | } | ||
538 | } | ||
539 | } | ||
540 | |||
541 | typeof JSON != 'undefined' && DEBUG.log( ( info ? info.toUpperCase() + ' ': '' ) + JSON.stringify( log ) ); | ||
542 | }, | ||
543 | |||
544 | groupStart: function( label ) { | ||
545 | console.group( label ); | ||
546 | }, | ||
547 | |||
548 | groupEnd: function() { | ||
549 | console.groupEnd(); | ||
550 | }, | ||
551 | |||
552 | logEnd: function() { | ||
553 | DEBUG.log.apply( null, arguments ); | ||
554 | DEBUG.groupEnd(); | ||
555 | }, | ||
556 | |||
557 | logElementsEnd: function() { | ||
558 | DEBUG.logElements.apply( null, arguments ); | ||
559 | DEBUG.groupEnd(); | ||
560 | } | ||
561 | } | ||
562 | |||
563 | // Enable console.log debugging with ?debug address parameter. | ||
564 | window.location.href.match( /debug$/g ) ? CKEDITOR.tools.extend( DEBUG, logEnable, true ): null; | ||
565 | |||
566 | // CKEDITOR.addCss('\ | ||
567 | // #tup { outline: #FEB2B2 solid 2px; box-shadow: 3px 3px 0 #FEB2B2; } \ | ||
568 | // #tbo { outline: #B2FEB2 solid 2px; box-shadow: 3px 3px 0 #B2FEB2; } \ | ||
569 | // p { background: pink }\ | ||
570 | // '); | ||
571 | |||
572 | CKEDITOR.replace( 'editor1' ); | ||
573 | |||
574 | CKEDITOR.replace( 'editor2', { height: 150 } ); | ||
575 | |||
576 | CKEDITOR.replace( 'editor3', { | ||
577 | magicline_everywhere: 1, | ||
578 | magicline_holdDistance: .2, | ||
579 | language: 'pl' | ||
580 | }); | ||
581 | |||
582 | CKEDITOR.replace( 'editor4' ); | ||
583 | |||
584 | CKEDITOR.replace( 'hood', { | ||
585 | magicline_color: 'green' | ||
586 | }); | ||
587 | |||
588 | CKEDITOR.replace( 'editor5', { | ||
589 | enterMode : CKEDITOR.ENTER_BR | ||
590 | }); | ||
591 | |||
592 | </script> | ||
593 | </body> | ||
594 | </html> | ||
diff --git a/sources/plugins/magicline/images/hidpi/icon-rtl.png b/sources/plugins/magicline/images/hidpi/icon-rtl.png new file mode 100644 index 0000000..4a8d2bf --- /dev/null +++ b/sources/plugins/magicline/images/hidpi/icon-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/magicline/images/hidpi/icon.png b/sources/plugins/magicline/images/hidpi/icon.png new file mode 100644 index 0000000..b981bb5 --- /dev/null +++ b/sources/plugins/magicline/images/hidpi/icon.png | |||
Binary files differ | |||
diff --git a/sources/plugins/magicline/images/icon-rtl.png b/sources/plugins/magicline/images/icon-rtl.png new file mode 100644 index 0000000..55b5b5f --- /dev/null +++ b/sources/plugins/magicline/images/icon-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/magicline/images/icon.png b/sources/plugins/magicline/images/icon.png new file mode 100644 index 0000000..e063433 --- /dev/null +++ b/sources/plugins/magicline/images/icon.png | |||
Binary files differ | |||
diff --git a/sources/plugins/magicline/lang/af.js b/sources/plugins/magicline/lang/af.js new file mode 100644 index 0000000..ba29409 --- /dev/null +++ b/sources/plugins/magicline/lang/af.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'af', { | ||
7 | title: 'Voeg paragraaf hier in' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/ar.js b/sources/plugins/magicline/lang/ar.js new file mode 100644 index 0000000..b3baca7 --- /dev/null +++ b/sources/plugins/magicline/lang/ar.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'ar', { | ||
7 | title: 'إدراج فقرة هنا' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/bg.js b/sources/plugins/magicline/lang/bg.js new file mode 100644 index 0000000..ac4f09f --- /dev/null +++ b/sources/plugins/magicline/lang/bg.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'bg', { | ||
7 | title: 'Вмъкнете параграф тук' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/ca.js b/sources/plugins/magicline/lang/ca.js new file mode 100644 index 0000000..cf63144 --- /dev/null +++ b/sources/plugins/magicline/lang/ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'ca', { | ||
7 | title: 'Insereix el paràgraf aquí' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/cs.js b/sources/plugins/magicline/lang/cs.js new file mode 100644 index 0000000..6b1030f --- /dev/null +++ b/sources/plugins/magicline/lang/cs.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'cs', { | ||
7 | title: 'zde vložit odstavec' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/cy.js b/sources/plugins/magicline/lang/cy.js new file mode 100644 index 0000000..2a63dbb --- /dev/null +++ b/sources/plugins/magicline/lang/cy.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'cy', { | ||
7 | title: 'Mewnosod paragraff yma' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/da.js b/sources/plugins/magicline/lang/da.js new file mode 100644 index 0000000..90b036e --- /dev/null +++ b/sources/plugins/magicline/lang/da.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'da', { | ||
7 | title: 'Indsæt afsnit' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/de-ch.js b/sources/plugins/magicline/lang/de-ch.js new file mode 100644 index 0000000..3b53ef3 --- /dev/null +++ b/sources/plugins/magicline/lang/de-ch.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'de-ch', { | ||
7 | title: 'Absatz hier einfügen' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/de.js b/sources/plugins/magicline/lang/de.js new file mode 100644 index 0000000..0111f3b --- /dev/null +++ b/sources/plugins/magicline/lang/de.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'de', { | ||
7 | title: 'Absatz hier einfügen' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/el.js b/sources/plugins/magicline/lang/el.js new file mode 100644 index 0000000..d31441b --- /dev/null +++ b/sources/plugins/magicline/lang/el.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'el', { | ||
7 | title: 'Εισάγετε παράγραφο εδώ' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/en-gb.js b/sources/plugins/magicline/lang/en-gb.js new file mode 100644 index 0000000..88baa44 --- /dev/null +++ b/sources/plugins/magicline/lang/en-gb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'en-gb', { | ||
7 | title: 'Insert paragraph here' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/en.js b/sources/plugins/magicline/lang/en.js new file mode 100644 index 0000000..781de19 --- /dev/null +++ b/sources/plugins/magicline/lang/en.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'en', { | ||
7 | title: 'Insert paragraph here' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/eo.js b/sources/plugins/magicline/lang/eo.js new file mode 100644 index 0000000..7128788 --- /dev/null +++ b/sources/plugins/magicline/lang/eo.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'eo', { | ||
7 | title: 'Enmeti paragrafon ĉi-tien' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/es.js b/sources/plugins/magicline/lang/es.js new file mode 100644 index 0000000..ec0344c --- /dev/null +++ b/sources/plugins/magicline/lang/es.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'es', { | ||
7 | title: 'Insertar párrafo aquí' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/et.js b/sources/plugins/magicline/lang/et.js new file mode 100644 index 0000000..af2c5eb --- /dev/null +++ b/sources/plugins/magicline/lang/et.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'et', { | ||
7 | title: 'Sisesta siia lõigu tekst' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/eu.js b/sources/plugins/magicline/lang/eu.js new file mode 100644 index 0000000..3725647 --- /dev/null +++ b/sources/plugins/magicline/lang/eu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'eu', { | ||
7 | title: 'Txertatu paragrafoa hemen' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/fa.js b/sources/plugins/magicline/lang/fa.js new file mode 100644 index 0000000..02ea6bc --- /dev/null +++ b/sources/plugins/magicline/lang/fa.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'fa', { | ||
7 | title: 'قرار دادن بند در اینجا' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/fi.js b/sources/plugins/magicline/lang/fi.js new file mode 100644 index 0000000..8667eb2 --- /dev/null +++ b/sources/plugins/magicline/lang/fi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'fi', { | ||
7 | title: 'Lisää kappale tähän.' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/fr-ca.js b/sources/plugins/magicline/lang/fr-ca.js new file mode 100644 index 0000000..96d31ee --- /dev/null +++ b/sources/plugins/magicline/lang/fr-ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'fr-ca', { | ||
7 | title: 'Insérer le paragraphe ici' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/fr.js b/sources/plugins/magicline/lang/fr.js new file mode 100644 index 0000000..da3610b --- /dev/null +++ b/sources/plugins/magicline/lang/fr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'fr', { | ||
7 | title: 'Insérez un paragraphe ici' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/gl.js b/sources/plugins/magicline/lang/gl.js new file mode 100644 index 0000000..48f304f --- /dev/null +++ b/sources/plugins/magicline/lang/gl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'gl', { | ||
7 | title: 'Inserir aquí o parágrafo' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/he.js b/sources/plugins/magicline/lang/he.js new file mode 100644 index 0000000..cef83c7 --- /dev/null +++ b/sources/plugins/magicline/lang/he.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'he', { | ||
7 | title: 'הכנס פסקה כאן' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/hr.js b/sources/plugins/magicline/lang/hr.js new file mode 100644 index 0000000..e143e73 --- /dev/null +++ b/sources/plugins/magicline/lang/hr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'hr', { | ||
7 | title: 'Ubaci paragraf ovdje' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/hu.js b/sources/plugins/magicline/lang/hu.js new file mode 100644 index 0000000..2f3e831 --- /dev/null +++ b/sources/plugins/magicline/lang/hu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'hu', { | ||
7 | title: 'Szúrja be a bekezdést ide' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/id.js b/sources/plugins/magicline/lang/id.js new file mode 100644 index 0000000..9389c83 --- /dev/null +++ b/sources/plugins/magicline/lang/id.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'id', { | ||
7 | title: 'Masukkan paragraf disini' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/it.js b/sources/plugins/magicline/lang/it.js new file mode 100644 index 0000000..69e0946 --- /dev/null +++ b/sources/plugins/magicline/lang/it.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'it', { | ||
7 | title: 'Inserisci paragrafo qui' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/ja.js b/sources/plugins/magicline/lang/ja.js new file mode 100644 index 0000000..71ebfd1 --- /dev/null +++ b/sources/plugins/magicline/lang/ja.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'ja', { | ||
7 | title: 'ここに段落を挿入' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/km.js b/sources/plugins/magicline/lang/km.js new file mode 100644 index 0000000..9dd1865 --- /dev/null +++ b/sources/plugins/magicline/lang/km.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'km', { | ||
7 | title: 'បញ្ចូលកថាខណ្ឌនៅទីនេះ' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/ko.js b/sources/plugins/magicline/lang/ko.js new file mode 100644 index 0000000..a86363e --- /dev/null +++ b/sources/plugins/magicline/lang/ko.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'ko', { | ||
7 | title: '여기에 단락 삽입' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/ku.js b/sources/plugins/magicline/lang/ku.js new file mode 100644 index 0000000..72f7fa1 --- /dev/null +++ b/sources/plugins/magicline/lang/ku.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'ku', { | ||
7 | title: 'بڕگە لێرە دابنێ' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/lv.js b/sources/plugins/magicline/lang/lv.js new file mode 100644 index 0000000..e3124e9 --- /dev/null +++ b/sources/plugins/magicline/lang/lv.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'lv', { | ||
7 | title: 'Ievietot šeit rindkopu' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/nb.js b/sources/plugins/magicline/lang/nb.js new file mode 100644 index 0000000..6780c4d --- /dev/null +++ b/sources/plugins/magicline/lang/nb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'nb', { | ||
7 | title: 'Sett inn nytt avsnitt her' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/nl.js b/sources/plugins/magicline/lang/nl.js new file mode 100644 index 0000000..dccbf5d --- /dev/null +++ b/sources/plugins/magicline/lang/nl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'nl', { | ||
7 | title: 'Hier paragraaf invoeren' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/no.js b/sources/plugins/magicline/lang/no.js new file mode 100644 index 0000000..2af2e20 --- /dev/null +++ b/sources/plugins/magicline/lang/no.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'no', { | ||
7 | title: 'Sett inn nytt avsnitt her' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/pl.js b/sources/plugins/magicline/lang/pl.js new file mode 100644 index 0000000..b038f54 --- /dev/null +++ b/sources/plugins/magicline/lang/pl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'pl', { | ||
7 | title: 'Wstaw nowy akapit' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/pt-br.js b/sources/plugins/magicline/lang/pt-br.js new file mode 100644 index 0000000..54ca87f --- /dev/null +++ b/sources/plugins/magicline/lang/pt-br.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'pt-br', { | ||
7 | title: 'Insera um parágrafo aqui' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/pt.js b/sources/plugins/magicline/lang/pt.js new file mode 100644 index 0000000..ed653d7 --- /dev/null +++ b/sources/plugins/magicline/lang/pt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'pt', { | ||
7 | title: 'Insira aqui o parágrafo' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/ru.js b/sources/plugins/magicline/lang/ru.js new file mode 100644 index 0000000..8787768 --- /dev/null +++ b/sources/plugins/magicline/lang/ru.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'ru', { | ||
7 | title: 'Вставить здесь параграф' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/si.js b/sources/plugins/magicline/lang/si.js new file mode 100644 index 0000000..5a484a2 --- /dev/null +++ b/sources/plugins/magicline/lang/si.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'si', { | ||
7 | title: 'චේදය ඇතුලත් කරන්න' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/sk.js b/sources/plugins/magicline/lang/sk.js new file mode 100644 index 0000000..94ae4a4 --- /dev/null +++ b/sources/plugins/magicline/lang/sk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'sk', { | ||
7 | title: 'Odsek vložiť sem' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/sl.js b/sources/plugins/magicline/lang/sl.js new file mode 100644 index 0000000..6baf9e9 --- /dev/null +++ b/sources/plugins/magicline/lang/sl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'sl', { | ||
7 | title: 'Vstavite odstavek tukaj' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/sq.js b/sources/plugins/magicline/lang/sq.js new file mode 100644 index 0000000..00d458f --- /dev/null +++ b/sources/plugins/magicline/lang/sq.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'sq', { | ||
7 | title: 'Vendos paragraf këtu' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/sv.js b/sources/plugins/magicline/lang/sv.js new file mode 100644 index 0000000..0670ada --- /dev/null +++ b/sources/plugins/magicline/lang/sv.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'sv', { | ||
7 | title: 'Infoga paragraf här' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/tr.js b/sources/plugins/magicline/lang/tr.js new file mode 100644 index 0000000..e419e8d --- /dev/null +++ b/sources/plugins/magicline/lang/tr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'tr', { | ||
7 | title: 'Parağrafı buraya ekle' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/tt.js b/sources/plugins/magicline/lang/tt.js new file mode 100644 index 0000000..b94cefa --- /dev/null +++ b/sources/plugins/magicline/lang/tt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'tt', { | ||
7 | title: 'Бирегә параграф өстәү' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/ug.js b/sources/plugins/magicline/lang/ug.js new file mode 100644 index 0000000..8da9948 --- /dev/null +++ b/sources/plugins/magicline/lang/ug.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'ug', { | ||
7 | title: 'بۇ جايغا ئابزاس قىستۇر' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/uk.js b/sources/plugins/magicline/lang/uk.js new file mode 100644 index 0000000..57cdeb7 --- /dev/null +++ b/sources/plugins/magicline/lang/uk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'uk', { | ||
7 | title: 'Вставити абзац' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/vi.js b/sources/plugins/magicline/lang/vi.js new file mode 100644 index 0000000..ab925ae --- /dev/null +++ b/sources/plugins/magicline/lang/vi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'vi', { | ||
7 | title: 'Chèn đoạn vào đây' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/zh-cn.js b/sources/plugins/magicline/lang/zh-cn.js new file mode 100644 index 0000000..166e892 --- /dev/null +++ b/sources/plugins/magicline/lang/zh-cn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'zh-cn', { | ||
7 | title: '在这插入段落' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/lang/zh.js b/sources/plugins/magicline/lang/zh.js new file mode 100644 index 0000000..2fd4324 --- /dev/null +++ b/sources/plugins/magicline/lang/zh.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.setLang( 'magicline', 'zh', { | ||
7 | title: '在此插入段落' | ||
8 | } ); | ||
diff --git a/sources/plugins/magicline/plugin.js b/sources/plugins/magicline/plugin.js new file mode 100644 index 0000000..cdb1c23 --- /dev/null +++ b/sources/plugins/magicline/plugin.js | |||
@@ -0,0 +1,1874 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview The [Magic Line](http://ckeditor.com/addon/magicline) plugin that makes it easier to access some document areas that | ||
8 | * are difficult to focus. | ||
9 | */ | ||
10 | |||
11 | 'use strict'; | ||
12 | |||
13 | ( function() { | ||
14 | CKEDITOR.plugins.add( 'magicline', { | ||
15 | lang: 'af,ar,bg,ca,cs,cy,da,de,de-ch,el,en,en-gb,eo,es,et,eu,fa,fi,fr,fr-ca,gl,he,hr,hu,id,it,ja,km,ko,ku,lv,nb,nl,no,pl,pt,pt-br,ru,si,sk,sl,sq,sv,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
16 | init: initPlugin | ||
17 | } ); | ||
18 | |||
19 | // Activates the box inside of an editor. | ||
20 | function initPlugin( editor ) { | ||
21 | // Configurables | ||
22 | var config = editor.config, | ||
23 | triggerOffset = config.magicline_triggerOffset || 30, | ||
24 | enterMode = config.enterMode, | ||
25 | that = { | ||
26 | // Global stuff is being initialized here. | ||
27 | editor: editor, | ||
28 | enterMode: enterMode, | ||
29 | triggerOffset: triggerOffset, | ||
30 | holdDistance: 0 | triggerOffset * ( config.magicline_holdDistance || 0.5 ), | ||
31 | boxColor: config.magicline_color || '#ff0000', | ||
32 | rtl: config.contentsLangDirection == 'rtl', | ||
33 | tabuList: [ 'data-cke-hidden-sel' ].concat( config.magicline_tabuList || [] ), | ||
34 | triggers: config.magicline_everywhere ? DTD_BLOCK : { table: 1, hr: 1, div: 1, ul: 1, ol: 1, dl: 1, form: 1, blockquote: 1 } | ||
35 | }, | ||
36 | scrollTimeout, checkMouseTimeoutPending, checkMouseTimer; | ||
37 | |||
38 | // %REMOVE_START% | ||
39 | // Internal DEBUG uses tools located in the topmost window. | ||
40 | |||
41 | // (#9701) Due to security limitations some browsers may throw | ||
42 | // errors when accessing window.top object. Do it safely first then. | ||
43 | try { | ||
44 | that.debug = window.top.DEBUG; | ||
45 | } | ||
46 | catch ( e ) {} | ||
47 | |||
48 | that.debug = that.debug || { | ||
49 | groupEnd: function() {}, | ||
50 | groupStart: function() {}, | ||
51 | log: function() {}, | ||
52 | logElements: function() {}, | ||
53 | logElementsEnd: function() {}, | ||
54 | logEnd: function() {}, | ||
55 | mousePos: function() {}, | ||
56 | showHidden: function() {}, | ||
57 | showTrigger: function() {}, | ||
58 | startTimer: function() {}, | ||
59 | stopTimer: function() {} | ||
60 | }; | ||
61 | // %REMOVE_END% | ||
62 | |||
63 | // Simple irrelevant elements filter. | ||
64 | that.isRelevant = function( node ) { | ||
65 | return isHtml( node ) && // -> Node must be an existing HTML element. | ||
66 | !isLine( that, node ) && // -> Node can be neither the box nor its child. | ||
67 | !isFlowBreaker( node ); // -> Node can be neither floated nor positioned nor aligned. | ||
68 | }; | ||
69 | |||
70 | editor.on( 'contentDom', addListeners, this ); | ||
71 | |||
72 | function addListeners() { | ||
73 | var editable = editor.editable(), | ||
74 | doc = editor.document, | ||
75 | win = editor.window; | ||
76 | |||
77 | // Global stuff is being initialized here. | ||
78 | extend( that, { | ||
79 | editable: editable, | ||
80 | inInlineMode: editable.isInline(), | ||
81 | doc: doc, | ||
82 | win: win, | ||
83 | hotNode: null | ||
84 | }, true ); | ||
85 | |||
86 | // This is the boundary of the editor. For inline the boundary is editable itself. | ||
87 | // For classic (`iframe`-based) editor, the HTML element is a real boundary. | ||
88 | that.boundary = that.inInlineMode ? that.editable : that.doc.getDocumentElement(); | ||
89 | |||
90 | // Enabling the box inside of inline editable is pointless. | ||
91 | // There's no need to access spaces inside paragraphs, links, spans, etc. | ||
92 | if ( editable.is( dtd.$inline ) ) | ||
93 | return; | ||
94 | |||
95 | // Handle in-line editing by setting appropriate position. | ||
96 | // If current position is static, make it relative and clear top/left coordinates. | ||
97 | if ( that.inInlineMode && !isPositioned( editable ) ) { | ||
98 | editable.setStyles( { | ||
99 | position: 'relative', | ||
100 | top: null, | ||
101 | left: null | ||
102 | } ); | ||
103 | } | ||
104 | // Enable the box. Let it produce children elements, initialize | ||
105 | // event handlers and own methods. | ||
106 | initLine.call( this, that ); | ||
107 | |||
108 | // Get view dimensions and scroll positions. | ||
109 | // At this stage (before any checkMouse call) it is used mostly | ||
110 | // by tests. Nevertheless it a crucial thing. | ||
111 | updateWindowSize( that ); | ||
112 | |||
113 | // Remove the box before an undo image is created. | ||
114 | // This is important. If we didn't do that, the *undo thing* would revert the box into an editor. | ||
115 | // Thanks to that, undo doesn't even know about the existence of the box. | ||
116 | editable.attachListener( editor, 'beforeUndoImage', function() { | ||
117 | that.line.detach(); | ||
118 | } ); | ||
119 | |||
120 | // Removes the box HTML from editor data string if getData is called. | ||
121 | // Thanks to that, an editor never yields data polluted by the box. | ||
122 | // Listen with very high priority, so line will be removed before other | ||
123 | // listeners will see it. | ||
124 | editable.attachListener( editor, 'beforeGetData', function() { | ||
125 | // If the box is in editable, remove it. | ||
126 | if ( that.line.wrap.getParent() ) { | ||
127 | that.line.detach(); | ||
128 | |||
129 | // Restore line in the last listener for 'getData'. | ||
130 | editor.once( 'getData', function() { | ||
131 | that.line.attach(); | ||
132 | }, null, null, 1000 ); | ||
133 | } | ||
134 | }, null, null, 0 ); | ||
135 | |||
136 | // Hide the box on mouseout if mouse leaves document. | ||
137 | editable.attachListener( that.inInlineMode ? doc : doc.getWindow().getFrame(), 'mouseout', function( event ) { | ||
138 | if ( editor.mode != 'wysiwyg' ) | ||
139 | return; | ||
140 | |||
141 | // Check for inline-mode editor. If so, check mouse position | ||
142 | // and remove the box if mouse outside of an editor. | ||
143 | if ( that.inInlineMode ) { | ||
144 | var mouse = { | ||
145 | x: event.data.$.clientX, | ||
146 | y: event.data.$.clientY | ||
147 | }; | ||
148 | |||
149 | updateWindowSize( that ); | ||
150 | updateEditableSize( that, true ); | ||
151 | |||
152 | var size = that.view.editable, | ||
153 | scroll = that.view.scroll; | ||
154 | |||
155 | // If outside of an editor... | ||
156 | if ( !inBetween( mouse.x, size.left - scroll.x, size.right - scroll.x ) || !inBetween( mouse.y, size.top - scroll.y, size.bottom - scroll.y ) ) { | ||
157 | clearTimeout( checkMouseTimer ); | ||
158 | checkMouseTimer = null; | ||
159 | that.line.detach(); | ||
160 | } | ||
161 | } | ||
162 | |||
163 | else { | ||
164 | clearTimeout( checkMouseTimer ); | ||
165 | checkMouseTimer = null; | ||
166 | that.line.detach(); | ||
167 | } | ||
168 | } ); | ||
169 | |||
170 | // This one deactivates hidden mode of an editor which | ||
171 | // prevents the box from being shown. | ||
172 | editable.attachListener( editable, 'keyup', function() { | ||
173 | that.hiddenMode = 0; | ||
174 | that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% | ||
175 | } ); | ||
176 | |||
177 | editable.attachListener( editable, 'keydown', function( event ) { | ||
178 | if ( editor.mode != 'wysiwyg' ) | ||
179 | return; | ||
180 | |||
181 | var keyStroke = event.data.getKeystroke(); | ||
182 | |||
183 | switch ( keyStroke ) { | ||
184 | // Shift pressed | ||
185 | case 2228240: // IE | ||
186 | case 16: | ||
187 | that.hiddenMode = 1; | ||
188 | that.line.detach(); | ||
189 | } | ||
190 | |||
191 | that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% | ||
192 | } ); | ||
193 | |||
194 | // This method ensures that checkMouse aren't executed | ||
195 | // in parallel and no more frequently than specified in timeout function. | ||
196 | // In classic (`iframe`-based) editor, document is used as a trigger, to provide magicline | ||
197 | // functionality when mouse is below the body (short content, short body). | ||
198 | editable.attachListener( that.inInlineMode ? editable : doc, 'mousemove', function( event ) { | ||
199 | checkMouseTimeoutPending = true; | ||
200 | |||
201 | if ( editor.mode != 'wysiwyg' || editor.readOnly || checkMouseTimer ) | ||
202 | return; | ||
203 | |||
204 | // IE<9 requires this event-driven object to be created | ||
205 | // outside of the setTimeout statement. | ||
206 | // Otherwise it loses the event object with its properties. | ||
207 | var mouse = { | ||
208 | x: event.data.$.clientX, | ||
209 | y: event.data.$.clientY | ||
210 | }; | ||
211 | |||
212 | checkMouseTimer = setTimeout( function() { | ||
213 | checkMouse( mouse ); | ||
214 | }, 30 ); // balances performance and accessibility | ||
215 | } ); | ||
216 | |||
217 | // This one removes box on scroll event. | ||
218 | // It is to avoid box displacement. | ||
219 | editable.attachListener( win, 'scroll', function() { | ||
220 | if ( editor.mode != 'wysiwyg' ) | ||
221 | return; | ||
222 | |||
223 | that.line.detach(); | ||
224 | |||
225 | // To figure this out just look at the mouseup | ||
226 | // event handler below. | ||
227 | if ( env.webkit ) { | ||
228 | that.hiddenMode = 1; | ||
229 | |||
230 | clearTimeout( scrollTimeout ); | ||
231 | scrollTimeout = setTimeout( function() { | ||
232 | // Don't leave hidden mode until mouse remains pressed and | ||
233 | // scroll is being used, i.e. when dragging something. | ||
234 | if ( !that.mouseDown ) | ||
235 | that.hiddenMode = 0; | ||
236 | that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% | ||
237 | }, 50 ); | ||
238 | |||
239 | that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% | ||
240 | } | ||
241 | } ); | ||
242 | |||
243 | // Those event handlers remove the box on mousedown | ||
244 | // and don't reveal it until the mouse is released. | ||
245 | // It is to prevent box insertion e.g. while scrolling | ||
246 | // (w/ scrollbar), selecting and so on. | ||
247 | editable.attachListener( env_ie8 ? doc : win, 'mousedown', function() { | ||
248 | if ( editor.mode != 'wysiwyg' ) | ||
249 | return; | ||
250 | |||
251 | that.line.detach(); | ||
252 | that.hiddenMode = 1; | ||
253 | that.mouseDown = 1; | ||
254 | |||
255 | that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% | ||
256 | } ); | ||
257 | |||
258 | // Google Chrome doesn't trigger this on the scrollbar (since 2009...) | ||
259 | // so it is totally useless to check for scroll finish | ||
260 | // see: http://code.google.com/p/chromium/issues/detail?id=14204 | ||
261 | editable.attachListener( env_ie8 ? doc : win, 'mouseup', function() { | ||
262 | that.hiddenMode = 0; | ||
263 | that.mouseDown = 0; | ||
264 | that.debug.showHidden( that.hiddenMode ); // %REMOVE_LINE% | ||
265 | } ); | ||
266 | |||
267 | // Editor commands for accessing difficult focus spaces. | ||
268 | editor.addCommand( 'accessPreviousSpace', accessFocusSpaceCmd( that ) ); | ||
269 | editor.addCommand( 'accessNextSpace', accessFocusSpaceCmd( that, true ) ); | ||
270 | |||
271 | editor.setKeystroke( [ | ||
272 | [ config.magicline_keystrokePrevious, 'accessPreviousSpace' ], | ||
273 | [ config.magicline_keystrokeNext, 'accessNextSpace' ] | ||
274 | ] ); | ||
275 | |||
276 | // Revert magicline hot node on undo/redo. | ||
277 | editor.on( 'loadSnapshot', function() { | ||
278 | var elements, element, i; | ||
279 | |||
280 | for ( var t in { p: 1, br: 1, div: 1 } ) { | ||
281 | // document.find is not available in QM (#11149). | ||
282 | elements = editor.document.getElementsByTag( t ); | ||
283 | |||
284 | for ( i = elements.count(); i--; ) { | ||
285 | if ( ( element = elements.getItem( i ) ).data( 'cke-magicline-hot' ) ) { | ||
286 | // Restore hotNode | ||
287 | that.hotNode = element; | ||
288 | // Restore last access direction | ||
289 | that.lastCmdDirection = element.data( 'cke-magicline-dir' ) === 'true' ? true : false; | ||
290 | |||
291 | return; | ||
292 | } | ||
293 | } | ||
294 | } | ||
295 | } ); | ||
296 | |||
297 | // This method handles mousemove mouse for box toggling. | ||
298 | // It uses mouse position to determine underlying element, then | ||
299 | // it tries to use different trigger type in order to place the box | ||
300 | // in correct place. The following procedure is executed periodically. | ||
301 | function checkMouse( mouse ) { | ||
302 | that.debug.groupStart( 'CheckMouse' ); // %REMOVE_LINE% | ||
303 | that.debug.startTimer(); // %REMOVE_LINE% | ||
304 | |||
305 | that.mouse = mouse; | ||
306 | that.trigger = null; | ||
307 | |||
308 | checkMouseTimer = null; | ||
309 | updateWindowSize( that ); | ||
310 | |||
311 | if ( | ||
312 | checkMouseTimeoutPending && // There must be an event pending. | ||
313 | !that.hiddenMode && // Can't be in hidden mode. | ||
314 | editor.focusManager.hasFocus && // Editor must have focus. | ||
315 | !that.line.mouseNear() && // Mouse pointer can't be close to the box. | ||
316 | ( that.element = elementFromMouse( that, true ) ) // There must be valid element. | ||
317 | ) { | ||
318 | // If trigger exists, and trigger is correct -> show the box. | ||
319 | // Don't show the line if trigger is a descendant of some tabu-list element. | ||
320 | if ( ( that.trigger = triggerEditable( that ) || triggerEdge( that ) || triggerExpand( that ) ) && | ||
321 | !isInTabu( that, that.trigger.upper || that.trigger.lower ) ) { | ||
322 | that.line.attach().place(); | ||
323 | } | ||
324 | |||
325 | // Otherwise remove the box | ||
326 | else { | ||
327 | that.trigger = null; | ||
328 | that.line.detach(); | ||
329 | } | ||
330 | |||
331 | that.debug.showTrigger( that.trigger ); // %REMOVE_LINE% | ||
332 | that.debug.mousePos( mouse.y, that.element ); // %REMOVE_LINE% | ||
333 | |||
334 | checkMouseTimeoutPending = false; | ||
335 | } | ||
336 | |||
337 | that.debug.stopTimer(); // %REMOVE_LINE% | ||
338 | that.debug.groupEnd(); // %REMOVE_LINE% | ||
339 | } | ||
340 | |||
341 | // This one allows testing and debugging. It reveals some | ||
342 | // inner methods to the world. | ||
343 | this.backdoor = { | ||
344 | accessFocusSpace: accessFocusSpace, | ||
345 | boxTrigger: boxTrigger, | ||
346 | isLine: isLine, | ||
347 | getAscendantTrigger: getAscendantTrigger, | ||
348 | getNonEmptyNeighbour: getNonEmptyNeighbour, | ||
349 | getSize: getSize, | ||
350 | that: that, | ||
351 | triggerEdge: triggerEdge, | ||
352 | triggerEditable: triggerEditable, | ||
353 | triggerExpand: triggerExpand | ||
354 | }; | ||
355 | } | ||
356 | } | ||
357 | |||
358 | // Some shorthands for common methods to save bytes | ||
359 | var extend = CKEDITOR.tools.extend, | ||
360 | newElement = CKEDITOR.dom.element, | ||
361 | newElementFromHtml = newElement.createFromHtml, | ||
362 | env = CKEDITOR.env, | ||
363 | env_ie8 = CKEDITOR.env.ie && CKEDITOR.env.version < 9, | ||
364 | dtd = CKEDITOR.dtd, | ||
365 | |||
366 | // Global object associating enter modes with elements. | ||
367 | enterElements = {}, | ||
368 | |||
369 | // Constant values, types and so on. | ||
370 | EDGE_TOP = 128, | ||
371 | EDGE_BOTTOM = 64, | ||
372 | EDGE_MIDDLE = 32, | ||
373 | TYPE_EDGE = 16, | ||
374 | TYPE_EXPAND = 8, | ||
375 | LOOK_TOP = 4, | ||
376 | LOOK_BOTTOM = 2, | ||
377 | LOOK_NORMAL = 1, | ||
378 | WHITE_SPACE = '\u00A0', | ||
379 | DTD_LISTITEM = dtd.$listItem, | ||
380 | DTD_TABLECONTENT = dtd.$tableContent, | ||
381 | DTD_NONACCESSIBLE = extend( {}, dtd.$nonEditable, dtd.$empty ), | ||
382 | DTD_BLOCK = dtd.$block, | ||
383 | |||
384 | // Minimum time that must elapse between two update*Size calls. | ||
385 | // It prevents constant getComuptedStyle calls and improves performance. | ||
386 | CACHE_TIME = 100, | ||
387 | |||
388 | // Shared CSS stuff for box elements | ||
389 | CSS_COMMON = 'width:0px;height:0px;padding:0px;margin:0px;display:block;' + 'z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;', | ||
390 | CSS_TRIANGLE = CSS_COMMON + 'border-color:transparent;display:block;border-style:solid;', | ||
391 | TRIANGLE_HTML = '<span>' + WHITE_SPACE + '</span>'; | ||
392 | |||
393 | enterElements[ CKEDITOR.ENTER_BR ] = 'br'; | ||
394 | enterElements[ CKEDITOR.ENTER_P ] = 'p'; | ||
395 | enterElements[ CKEDITOR.ENTER_DIV ] = 'div'; | ||
396 | |||
397 | function areSiblings( that, upper, lower ) { | ||
398 | return isHtml( upper ) && isHtml( lower ) && lower.equals( upper.getNext( function( node ) { | ||
399 | return !( isEmptyTextNode( node ) || isComment( node ) || isFlowBreaker( node ) ); | ||
400 | } ) ); | ||
401 | } | ||
402 | |||
403 | // boxTrigger is an abstract type which describes | ||
404 | // the relationship between elements that may result | ||
405 | // in showing the box. | ||
406 | // | ||
407 | // The following type is used by numerous methods | ||
408 | // to share information about the hypothetical box placement | ||
409 | // and look by referring to boxTrigger properties. | ||
410 | function boxTrigger( triggerSetup ) { | ||
411 | this.upper = triggerSetup[ 0 ]; | ||
412 | this.lower = triggerSetup[ 1 ]; | ||
413 | this.set.apply( this, triggerSetup.slice( 2 ) ); | ||
414 | } | ||
415 | |||
416 | boxTrigger.prototype = { | ||
417 | set: function( edge, type, look ) { | ||
418 | this.properties = edge + type + ( look || LOOK_NORMAL ); | ||
419 | return this; | ||
420 | }, | ||
421 | |||
422 | is: function( property ) { | ||
423 | return ( this.properties & property ) == property; | ||
424 | } | ||
425 | }; | ||
426 | |||
427 | var elementFromMouse = ( function() { | ||
428 | function elementFromPoint( doc, mouse ) { | ||
429 | var pointedElement = doc.$.elementFromPoint( mouse.x, mouse.y ); | ||
430 | |||
431 | // IE9QM: from times to times it will return an empty object on scroll bar hover. (#12185) | ||
432 | return pointedElement && pointedElement.nodeType ? | ||
433 | new CKEDITOR.dom.element( pointedElement ) : | ||
434 | null; | ||
435 | } | ||
436 | |||
437 | return function( that, ignoreBox, forceMouse ) { | ||
438 | if ( !that.mouse ) | ||
439 | return null; | ||
440 | |||
441 | var doc = that.doc, | ||
442 | lineWrap = that.line.wrap, | ||
443 | mouse = forceMouse || that.mouse, | ||
444 | // Note: element might be null. | ||
445 | element = elementFromPoint( doc, mouse ); | ||
446 | |||
447 | // If ignoreBox is set and element is the box, it means that we | ||
448 | // need to hide the box for a while, repeat elementFromPoint | ||
449 | // and show it again. | ||
450 | if ( ignoreBox && isLine( that, element ) ) { | ||
451 | lineWrap.hide(); | ||
452 | element = elementFromPoint( doc, mouse ); | ||
453 | lineWrap.show(); | ||
454 | } | ||
455 | |||
456 | // Return nothing if: | ||
457 | // \-> Element is not HTML. | ||
458 | if ( !( element && element.type == CKEDITOR.NODE_ELEMENT && element.$ ) ) | ||
459 | return null; | ||
460 | |||
461 | // Also return nothing if: | ||
462 | // \-> We're IE<9 and element is out of the top-level element (editable for inline and HTML for classic (`iframe`-based)). | ||
463 | // This is due to the bug which allows IE<9 firing mouse events on element | ||
464 | // with contenteditable=true while doing selection out (far, away) of the element. | ||
465 | // Thus we must always be sure that we stay in editable or HTML. | ||
466 | if ( env.ie && env.version < 9 ) { | ||
467 | if ( !( that.boundary.equals( element ) || that.boundary.contains( element ) ) ) | ||
468 | return null; | ||
469 | } | ||
470 | |||
471 | return element; | ||
472 | }; | ||
473 | } )(); | ||
474 | |||
475 | // Gets the closest parent node that belongs to triggers group. | ||
476 | function getAscendantTrigger( that ) { | ||
477 | var node = that.element, | ||
478 | trigger; | ||
479 | |||
480 | if ( node && isHtml( node ) ) { | ||
481 | trigger = node.getAscendant( that.triggers, true ); | ||
482 | |||
483 | // If trigger is an element, neither editable nor editable's ascendant. | ||
484 | if ( trigger && that.editable.contains( trigger ) ) { | ||
485 | // Check for closest editable limit. | ||
486 | // Don't consider trigger as a limit as it may be nested editable (includeSelf=false) (#12009). | ||
487 | var limit = getClosestEditableLimit( trigger ); | ||
488 | |||
489 | // Trigger in nested editable area. | ||
490 | if ( limit.getAttribute( 'contenteditable' ) == 'true' ) | ||
491 | return trigger; | ||
492 | // Trigger in non-editable area. | ||
493 | else if ( limit.is( that.triggers ) ) | ||
494 | return limit; | ||
495 | else | ||
496 | return null; | ||
497 | } else { | ||
498 | return null; | ||
499 | } | ||
500 | } | ||
501 | |||
502 | return null; | ||
503 | } | ||
504 | |||
505 | function getMidpoint( that, upper, lower ) { | ||
506 | updateSize( that, upper ); | ||
507 | updateSize( that, lower ); | ||
508 | |||
509 | var upperSizeBottom = upper.size.bottom, | ||
510 | lowerSizeTop = lower.size.top; | ||
511 | |||
512 | return upperSizeBottom && lowerSizeTop ? 0 | ( upperSizeBottom + lowerSizeTop ) / 2 : upperSizeBottom || lowerSizeTop; | ||
513 | } | ||
514 | |||
515 | // Get nearest node (either text or HTML), but: | ||
516 | // \-> Omit all empty text nodes (containing white characters only). | ||
517 | // \-> Omit BR elements | ||
518 | // \-> Omit flow breakers. | ||
519 | function getNonEmptyNeighbour( that, node, goBack ) { | ||
520 | node = node[ goBack ? 'getPrevious' : 'getNext' ]( function( node ) { | ||
521 | return ( isTextNode( node ) && !isEmptyTextNode( node ) ) || | ||
522 | ( isHtml( node ) && !isFlowBreaker( node ) && !isLine( that, node ) ); | ||
523 | } ); | ||
524 | |||
525 | return node; | ||
526 | } | ||
527 | |||
528 | function inBetween( val, lower, upper ) { | ||
529 | return val > lower && val < upper; | ||
530 | } | ||
531 | |||
532 | // Returns the closest ancestor that has contenteditable attribute. | ||
533 | // Such ancestor is the limit of (non-)editable DOM branch that element | ||
534 | // belongs to. This method omits editor editable. | ||
535 | function getClosestEditableLimit( element, includeSelf ) { | ||
536 | if ( element.data( 'cke-editable' ) ) | ||
537 | return null; | ||
538 | |||
539 | if ( !includeSelf ) | ||
540 | element = element.getParent(); | ||
541 | |||
542 | while ( element ) { | ||
543 | if ( element.data( 'cke-editable' ) ) | ||
544 | return null; | ||
545 | |||
546 | if ( element.hasAttribute( 'contenteditable' ) ) | ||
547 | return element; | ||
548 | |||
549 | element = element.getParent(); | ||
550 | } | ||
551 | |||
552 | return null; | ||
553 | } | ||
554 | |||
555 | // Access space line consists of a few elements (spans): | ||
556 | // \-> Line wrapper. | ||
557 | // \-> Line. | ||
558 | // \-> Line triangles: left triangle (LT), right triangle (RT). | ||
559 | // \-> Button handler (BTN). | ||
560 | // | ||
561 | // +--------------------------------------------------- line.wrap (span) -----+ | ||
562 | // | +---------------------------------------------------- line (span) -----+ | | ||
563 | // | | +- LT \ +- BTN -+ / RT -+ | | | ||
564 | // | | | \ | | | / | | | | ||
565 | // | | | / | <__| | \ | | | | ||
566 | // | | +-----/ +-------+ \-----+ | | | ||
567 | // | +----------------------------------------------------------------------+ | | ||
568 | // +--------------------------------------------------------------------------+ | ||
569 | // | ||
570 | function initLine( that ) { | ||
571 | var doc = that.doc, | ||
572 | // This the main box element that holds triangles and the insertion button | ||
573 | line = newElementFromHtml( '<span contenteditable="false" style="' + CSS_COMMON + 'position:absolute;border-top:1px dashed ' + that.boxColor + '"></span>', doc ), | ||
574 | iconPath = CKEDITOR.getUrl( this.path + 'images/' + ( env.hidpi ? 'hidpi/' : '' ) + 'icon' + ( that.rtl ? '-rtl' : '' ) + '.png' ); | ||
575 | |||
576 | extend( line, { | ||
577 | |||
578 | attach: function() { | ||
579 | // Only if not already attached | ||
580 | if ( !this.wrap.getParent() ) | ||
581 | this.wrap.appendTo( that.editable, true ); | ||
582 | |||
583 | return this; | ||
584 | }, | ||
585 | |||
586 | // Looks are as follows: [ LOOK_TOP, LOOK_BOTTOM, LOOK_NORMAL ]. | ||
587 | lineChildren: [ | ||
588 | extend( | ||
589 | newElementFromHtml( | ||
590 | '<span title="' + that.editor.lang.magicline.title + | ||
591 | '" contenteditable="false">↵</span>', doc | ||
592 | ), { | ||
593 | base: CSS_COMMON + 'height:17px;width:17px;' + ( that.rtl ? 'left' : 'right' ) + ':17px;' + | ||
594 | 'background:url(' + iconPath + ') center no-repeat ' + that.boxColor + ';cursor:pointer;' + | ||
595 | ( env.hc ? 'font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;' : '' ) + | ||
596 | ( env.hidpi ? 'background-size: 9px 10px;' : '' ), | ||
597 | looks: [ | ||
598 | 'top:-8px; border-radius: 2px;', | ||
599 | 'top:-17px; border-radius: 2px 2px 0px 0px;', | ||
600 | 'top:-1px; border-radius: 0px 0px 2px 2px;' | ||
601 | ] | ||
602 | } | ||
603 | ), | ||
604 | extend( newElementFromHtml( TRIANGLE_HTML, doc ), { | ||
605 | base: CSS_TRIANGLE + 'left:0px;border-left-color:' + that.boxColor + ';', | ||
606 | looks: [ | ||
607 | 'border-width:8px 0 8px 8px;top:-8px', | ||
608 | 'border-width:8px 0 0 8px;top:-8px', | ||
609 | 'border-width:0 0 8px 8px;top:0px' | ||
610 | ] | ||
611 | } ), | ||
612 | extend( newElementFromHtml( TRIANGLE_HTML, doc ), { | ||
613 | base: CSS_TRIANGLE + 'right:0px;border-right-color:' + that.boxColor + ';', | ||
614 | looks: [ | ||
615 | 'border-width:8px 8px 8px 0;top:-8px', | ||
616 | 'border-width:8px 8px 0 0;top:-8px', | ||
617 | 'border-width:0 8px 8px 0;top:0px' | ||
618 | ] | ||
619 | } ) | ||
620 | ], | ||
621 | |||
622 | detach: function() { | ||
623 | // Detach only if already attached. | ||
624 | if ( this.wrap.getParent() ) | ||
625 | this.wrap.remove(); | ||
626 | |||
627 | return this; | ||
628 | }, | ||
629 | |||
630 | // Checks whether mouseY is around an element by comparing boundaries and considering | ||
631 | // an offset distance. | ||
632 | mouseNear: function() { | ||
633 | that.debug.groupStart( 'mouseNear' ); // %REMOVE_LINE% | ||
634 | |||
635 | updateSize( that, this ); | ||
636 | var offset = that.holdDistance, | ||
637 | size = this.size; | ||
638 | |||
639 | // Determine neighborhood by element dimensions and offsets. | ||
640 | if ( size && inBetween( that.mouse.y, size.top - offset, size.bottom + offset ) && inBetween( that.mouse.x, size.left - offset, size.right + offset ) ) { | ||
641 | that.debug.logEnd( 'Mouse is near.' ); // %REMOVE_LINE% | ||
642 | return true; | ||
643 | } | ||
644 | |||
645 | that.debug.logEnd( 'Mouse isn\'t near.' ); // %REMOVE_LINE% | ||
646 | return false; | ||
647 | }, | ||
648 | |||
649 | // Adjusts position of the box according to the trigger properties. | ||
650 | // If also affects look of the box depending on the type of the trigger. | ||
651 | place: function() { | ||
652 | var view = that.view, | ||
653 | editable = that.editable, | ||
654 | trigger = that.trigger, | ||
655 | upper = trigger.upper, | ||
656 | lower = trigger.lower, | ||
657 | any = upper || lower, | ||
658 | parent = any.getParent(), | ||
659 | styleSet = {}; | ||
660 | |||
661 | // Save recent trigger for further insertion. | ||
662 | // It is necessary due to the fact, that that.trigger may | ||
663 | // contain different boxTrigger at the moment of insertion | ||
664 | // or may be even null. | ||
665 | this.trigger = trigger; | ||
666 | |||
667 | upper && updateSize( that, upper, true ); | ||
668 | lower && updateSize( that, lower, true ); | ||
669 | updateSize( that, parent, true ); | ||
670 | |||
671 | // Yeah, that's gonna be useful in inline-mode case. | ||
672 | if ( that.inInlineMode ) | ||
673 | updateEditableSize( that, true ); | ||
674 | |||
675 | // Set X coordinate (left, right, width). | ||
676 | if ( parent.equals( editable ) ) { | ||
677 | styleSet.left = view.scroll.x; | ||
678 | styleSet.right = -view.scroll.x; | ||
679 | styleSet.width = ''; | ||
680 | } else { | ||
681 | styleSet.left = any.size.left - any.size.margin.left + view.scroll.x - ( that.inInlineMode ? view.editable.left + view.editable.border.left : 0 ); | ||
682 | styleSet.width = any.size.outerWidth + any.size.margin.left + any.size.margin.right + view.scroll.x; | ||
683 | styleSet.right = ''; | ||
684 | } | ||
685 | |||
686 | // Set Y coordinate (top) for trigger consisting of two elements. | ||
687 | if ( upper && lower ) { | ||
688 | // No margins at all or they're equal. Place box right between. | ||
689 | if ( upper.size.margin.bottom === lower.size.margin.top ) | ||
690 | styleSet.top = 0 | ( upper.size.bottom + upper.size.margin.bottom / 2 ); | ||
691 | else { | ||
692 | // Upper margin < lower margin. Place at lower margin. | ||
693 | if ( upper.size.margin.bottom < lower.size.margin.top ) | ||
694 | styleSet.top = upper.size.bottom + upper.size.margin.bottom; | ||
695 | // Upper margin > lower margin. Place at upper margin - lower margin. | ||
696 | else | ||
697 | styleSet.top = upper.size.bottom + upper.size.margin.bottom - lower.size.margin.top; | ||
698 | } | ||
699 | } | ||
700 | // Set Y coordinate (top) for single-edge trigger. | ||
701 | else if ( !upper ) | ||
702 | styleSet.top = lower.size.top - lower.size.margin.top; | ||
703 | else if ( !lower ) { | ||
704 | styleSet.top = upper.size.bottom + upper.size.margin.bottom; | ||
705 | } | ||
706 | |||
707 | // Set box button modes if close to the viewport horizontal edge | ||
708 | // or look forced by the trigger. | ||
709 | if ( trigger.is( LOOK_TOP ) || inBetween( styleSet.top, view.scroll.y - 15, view.scroll.y + 5 ) ) { | ||
710 | styleSet.top = that.inInlineMode ? 0 : view.scroll.y; | ||
711 | this.look( LOOK_TOP ); | ||
712 | } else if ( trigger.is( LOOK_BOTTOM ) || inBetween( styleSet.top, view.pane.bottom - 5, view.pane.bottom + 15 ) ) { | ||
713 | styleSet.top = that.inInlineMode ? ( | ||
714 | view.editable.height + view.editable.padding.top + view.editable.padding.bottom | ||
715 | ) : ( | ||
716 | view.pane.bottom - 1 | ||
717 | ); | ||
718 | |||
719 | this.look( LOOK_BOTTOM ); | ||
720 | } else { | ||
721 | if ( that.inInlineMode ) | ||
722 | styleSet.top -= view.editable.top + view.editable.border.top; | ||
723 | |||
724 | this.look( LOOK_NORMAL ); | ||
725 | } | ||
726 | |||
727 | if ( that.inInlineMode ) { | ||
728 | // 1px bug here... | ||
729 | styleSet.top--; | ||
730 | |||
731 | // Consider the editable to be an element with overflow:scroll | ||
732 | // and non-zero scrollTop/scrollLeft value. | ||
733 | // For example: divarea editable. (#9383) | ||
734 | styleSet.top += view.editable.scroll.top; | ||
735 | styleSet.left += view.editable.scroll.left; | ||
736 | } | ||
737 | |||
738 | // Append `px` prefixes. | ||
739 | for ( var style in styleSet ) | ||
740 | styleSet[ style ] = CKEDITOR.tools.cssLength( styleSet[ style ] ); | ||
741 | |||
742 | this.setStyles( styleSet ); | ||
743 | }, | ||
744 | |||
745 | // Changes look of the box according to current needs. | ||
746 | // Three different styles are available: [ LOOK_TOP, LOOK_BOTTOM, LOOK_NORMAL ]. | ||
747 | look: function( look ) { | ||
748 | if ( this.oldLook == look ) | ||
749 | return; | ||
750 | |||
751 | for ( var i = this.lineChildren.length, child; i--; ) | ||
752 | ( child = this.lineChildren[ i ] ).setAttribute( 'style', child.base + child.looks[ 0 | look / 2 ] ); | ||
753 | |||
754 | this.oldLook = look; | ||
755 | }, | ||
756 | |||
757 | wrap: new newElement( 'span', that.doc ) | ||
758 | |||
759 | } ); | ||
760 | |||
761 | // Insert children into the box. | ||
762 | for ( var i = line.lineChildren.length; i--; ) | ||
763 | line.lineChildren[ i ].appendTo( line ); | ||
764 | |||
765 | // Set default look of the box. | ||
766 | line.look( LOOK_NORMAL ); | ||
767 | |||
768 | // Using that wrapper prevents IE (8,9) from resizing editable area at the moment | ||
769 | // of box insertion. This works thanks to the fact, that positioned box is wrapped by | ||
770 | // an inline element. So much tricky. | ||
771 | line.appendTo( line.wrap ); | ||
772 | |||
773 | // Make the box unselectable. | ||
774 | line.unselectable(); | ||
775 | |||
776 | // Handle accessSpace node insertion. | ||
777 | line.lineChildren[ 0 ].on( 'mouseup', function( event ) { | ||
778 | line.detach(); | ||
779 | |||
780 | accessFocusSpace( that, function( accessNode ) { | ||
781 | // Use old trigger that was saved by 'place' method. Look: line.place | ||
782 | var trigger = that.line.trigger; | ||
783 | |||
784 | accessNode[ trigger.is( EDGE_TOP ) ? 'insertBefore' : 'insertAfter' ]( | ||
785 | trigger.is( EDGE_TOP ) ? trigger.lower : trigger.upper ); | ||
786 | }, true ); | ||
787 | |||
788 | that.editor.focus(); | ||
789 | |||
790 | if ( !env.ie && that.enterMode != CKEDITOR.ENTER_BR ) | ||
791 | that.hotNode.scrollIntoView(); | ||
792 | |||
793 | event.data.preventDefault( true ); | ||
794 | } ); | ||
795 | |||
796 | // Prevents IE9 from displaying the resize box and disables drag'n'drop functionality. | ||
797 | line.on( 'mousedown', function( event ) { | ||
798 | event.data.preventDefault( true ); | ||
799 | } ); | ||
800 | |||
801 | that.line = line; | ||
802 | } | ||
803 | |||
804 | // This function allows accessing any focus space according to the insert function: | ||
805 | // * For enterMode ENTER_P it creates P element filled with dummy white-space. | ||
806 | // * For enterMode ENTER_DIV it creates DIV element filled with dummy white-space. | ||
807 | // * For enterMode ENTER_BR it creates BR element or in IE. | ||
808 | // | ||
809 | // The node is being inserted according to insertFunction. Finally the method | ||
810 | // selects the non-breaking space making the node ready for typing. | ||
811 | function accessFocusSpace( that, insertFunction, doSave ) { | ||
812 | var range = new CKEDITOR.dom.range( that.doc ), | ||
813 | editor = that.editor, | ||
814 | accessNode; | ||
815 | |||
816 | // IE requires text node of in ENTER_BR mode. | ||
817 | if ( env.ie && that.enterMode == CKEDITOR.ENTER_BR ) | ||
818 | accessNode = that.doc.createText( WHITE_SPACE ); | ||
819 | |||
820 | // In other cases a regular element is used. | ||
821 | else { | ||
822 | // Use the enterMode of editable's limit or editor's | ||
823 | // enter mode if not in nested editable. | ||
824 | var limit = getClosestEditableLimit( that.element, true ), | ||
825 | |||
826 | // This is an enter mode for the context. We cannot use | ||
827 | // editor.activeEnterMode because the focused nested editable will | ||
828 | // have a different enterMode as editor but magicline will be inserted | ||
829 | // directly into editor's editable. | ||
830 | enterMode = limit && limit.data( 'cke-enter-mode' ) || that.enterMode; | ||
831 | |||
832 | accessNode = new newElement( enterElements[ enterMode ], that.doc ); | ||
833 | |||
834 | if ( !accessNode.is( 'br' ) ) { | ||
835 | var dummy = that.doc.createText( WHITE_SPACE ); | ||
836 | dummy.appendTo( accessNode ); | ||
837 | } | ||
838 | } | ||
839 | |||
840 | doSave && editor.fire( 'saveSnapshot' ); | ||
841 | |||
842 | insertFunction( accessNode ); | ||
843 | //dummy.appendTo( accessNode ); | ||
844 | range.moveToPosition( accessNode, CKEDITOR.POSITION_AFTER_START ); | ||
845 | editor.getSelection().selectRanges( [ range ] ); | ||
846 | that.hotNode = accessNode; | ||
847 | |||
848 | doSave && editor.fire( 'saveSnapshot' ); | ||
849 | } | ||
850 | |||
851 | // Access focus space on demand by taking an element under the caret as a reference. | ||
852 | // The space is accessed provided the element under the caret is trigger AND: | ||
853 | // | ||
854 | // 1. First/last-child of its parent: | ||
855 | // +----------------------- Parent element -+ | ||
856 | // | +------------------------------ DIV -+ | <-- Access before | ||
857 | // | | Foo^ | | | ||
858 | // | | | | | ||
859 | // | +------------------------------------+ | <-- Access after | ||
860 | // +----------------------------------------+ | ||
861 | // | ||
862 | // OR | ||
863 | // | ||
864 | // 2. It has a direct sibling element, which is also a trigger: | ||
865 | // +-------------------------------- DIV#1 -+ | ||
866 | // | Foo^ | | ||
867 | // | | | ||
868 | // +----------------------------------------+ | ||
869 | // <-- Access here | ||
870 | // +-------------------------------- DIV#2 -+ | ||
871 | // | Bar | | ||
872 | // | | | ||
873 | // +----------------------------------------+ | ||
874 | // | ||
875 | // OR | ||
876 | // | ||
877 | // 3. It has a direct sibling, which is a trigger and has a valid neighbour trigger, | ||
878 | // but belongs to dtd.$.empty/nonEditable: | ||
879 | // +------------------------------------ P -+ | ||
880 | // | Foo^ | | ||
881 | // | | | ||
882 | // +----------------------------------------+ | ||
883 | // +----------------------------------- HR -+ | ||
884 | // <-- Access here | ||
885 | // +-------------------------------- DIV#2 -+ | ||
886 | // | Bar | | ||
887 | // | | | ||
888 | // +----------------------------------------+ | ||
889 | // | ||
890 | function accessFocusSpaceCmd( that, insertAfter ) { | ||
891 | return { | ||
892 | canUndo: true, | ||
893 | modes: { wysiwyg: 1 }, | ||
894 | exec: ( function() { | ||
895 | |||
896 | // Inserts line (accessNode) at the position by taking target node as a reference. | ||
897 | function doAccess( target ) { | ||
898 | // Remove old hotNode under certain circumstances. | ||
899 | var hotNodeChar = ( env.ie && env.version < 9 ? ' ' : WHITE_SPACE ), | ||
900 | removeOld = that.hotNode && // Old hotNode must exist. | ||
901 | that.hotNode.getText() == hotNodeChar && // Old hotNode hasn't been changed. | ||
902 | that.element.equals( that.hotNode ) && // Caret is inside old hotNode. | ||
903 | // Command is executed in the same direction. | ||
904 | that.lastCmdDirection === !!insertAfter; // jshint ignore:line | ||
905 | |||
906 | accessFocusSpace( that, function( accessNode ) { | ||
907 | if ( removeOld && that.hotNode ) | ||
908 | that.hotNode.remove(); | ||
909 | |||
910 | accessNode[ insertAfter ? 'insertAfter' : 'insertBefore' ]( target ); | ||
911 | |||
912 | // Make this element distinguishable. Also remember the direction | ||
913 | // it's been inserted into document. | ||
914 | accessNode.setAttributes( { | ||
915 | 'data-cke-magicline-hot': 1, | ||
916 | 'data-cke-magicline-dir': !!insertAfter | ||
917 | } ); | ||
918 | |||
919 | // Save last direction of the command (is insertAfter?). | ||
920 | that.lastCmdDirection = !!insertAfter; | ||
921 | } ); | ||
922 | |||
923 | if ( !env.ie && that.enterMode != CKEDITOR.ENTER_BR ) | ||
924 | that.hotNode.scrollIntoView(); | ||
925 | |||
926 | // Detach the line if was visible (previously triggered by mouse). | ||
927 | that.line.detach(); | ||
928 | } | ||
929 | |||
930 | return function( editor ) { | ||
931 | var selected = editor.getSelection().getStartElement(), | ||
932 | limit; | ||
933 | |||
934 | // (#9833) Go down to the closest non-inline element in DOM structure | ||
935 | // since inline elements don't participate in in magicline. | ||
936 | selected = selected.getAscendant( DTD_BLOCK, 1 ); | ||
937 | |||
938 | // Stop if selected is a child of a tabu-list element. | ||
939 | if ( isInTabu( that, selected ) ) | ||
940 | return; | ||
941 | |||
942 | // Sometimes it may happen that there's no parent block below selected element | ||
943 | // or, for example, getAscendant reaches editable or editable parent. | ||
944 | // We must avoid such pathological cases. | ||
945 | if ( !selected || selected.equals( that.editable ) || selected.contains( that.editable ) ) | ||
946 | return; | ||
947 | |||
948 | // Executing the command directly in nested editable should | ||
949 | // access space before/after it. | ||
950 | if ( ( limit = getClosestEditableLimit( selected ) ) && limit.getAttribute( 'contenteditable' ) == 'false' ) | ||
951 | selected = limit; | ||
952 | |||
953 | // That holds element from mouse. Replace it with the | ||
954 | // element under the caret. | ||
955 | that.element = selected; | ||
956 | |||
957 | // (3.) Handle the following cases where selected neighbour | ||
958 | // is a trigger inaccessible for the caret AND: | ||
959 | // - Is first/last-child | ||
960 | // OR | ||
961 | // - Has a sibling, which is also a trigger. | ||
962 | var neighbor = getNonEmptyNeighbour( that, selected, !insertAfter ), | ||
963 | neighborSibling; | ||
964 | |||
965 | // Check for a neighbour that belongs to triggers. | ||
966 | // Consider only non-accessible elements (they cannot have any children) | ||
967 | // since they cannot be given a caret inside, to run the command | ||
968 | // the regular way (1. & 2.). | ||
969 | if ( | ||
970 | isHtml( neighbor ) && neighbor.is( that.triggers ) && neighbor.is( DTD_NONACCESSIBLE ) && | ||
971 | ( | ||
972 | // Check whether neighbor is first/last-child. | ||
973 | !getNonEmptyNeighbour( that, neighbor, !insertAfter ) || | ||
974 | // Check for a sibling of a neighbour that also is a trigger. | ||
975 | ( | ||
976 | ( neighborSibling = getNonEmptyNeighbour( that, neighbor, !insertAfter ) ) && | ||
977 | isHtml( neighborSibling ) && | ||
978 | neighborSibling.is( that.triggers ) | ||
979 | ) | ||
980 | ) | ||
981 | ) { | ||
982 | doAccess( neighbor ); | ||
983 | return; | ||
984 | } | ||
985 | |||
986 | // Look for possible target element DOWN "selected" DOM branch (towards editable) | ||
987 | // that belong to that.triggers | ||
988 | var target = getAscendantTrigger( that, selected ); | ||
989 | |||
990 | // No HTML target -> no access. | ||
991 | if ( !isHtml( target ) ) | ||
992 | return; | ||
993 | |||
994 | // (1.) Target is first/last child -> access. | ||
995 | if ( !getNonEmptyNeighbour( that, target, !insertAfter ) ) { | ||
996 | doAccess( target ); | ||
997 | return; | ||
998 | } | ||
999 | |||
1000 | var sibling = getNonEmptyNeighbour( that, target, !insertAfter ); | ||
1001 | |||
1002 | // (2.) Target has a sibling that belongs to that.triggers -> access. | ||
1003 | if ( sibling && isHtml( sibling ) && sibling.is( that.triggers ) ) { | ||
1004 | doAccess( target ); | ||
1005 | return; | ||
1006 | } | ||
1007 | }; | ||
1008 | } )() | ||
1009 | }; | ||
1010 | } | ||
1011 | |||
1012 | function isLine( that, node ) { | ||
1013 | if ( !( node && node.type == CKEDITOR.NODE_ELEMENT && node.$ ) ) | ||
1014 | return false; | ||
1015 | |||
1016 | var line = that.line; | ||
1017 | |||
1018 | return line.wrap.equals( node ) || line.wrap.contains( node ); | ||
1019 | } | ||
1020 | |||
1021 | // Is text node containing white-spaces only? | ||
1022 | var isEmptyTextNode = CKEDITOR.dom.walker.whitespaces(); | ||
1023 | |||
1024 | // Is fully visible HTML node? | ||
1025 | function isHtml( node ) { | ||
1026 | return node && node.type == CKEDITOR.NODE_ELEMENT && node.$; // IE requires that | ||
1027 | } | ||
1028 | |||
1029 | function isFloated( element ) { | ||
1030 | if ( !isHtml( element ) ) | ||
1031 | return false; | ||
1032 | |||
1033 | var options = { left: 1, right: 1, center: 1 }; | ||
1034 | |||
1035 | return !!( options[ element.getComputedStyle( 'float' ) ] || options[ element.getAttribute( 'align' ) ] ); | ||
1036 | } | ||
1037 | |||
1038 | function isFlowBreaker( element ) { | ||
1039 | if ( !isHtml( element ) ) | ||
1040 | return false; | ||
1041 | |||
1042 | return isPositioned( element ) || isFloated( element ); | ||
1043 | } | ||
1044 | |||
1045 | // Isn't node of NODE_COMMENT type? | ||
1046 | var isComment = CKEDITOR.dom.walker.nodeType( CKEDITOR.NODE_COMMENT ); | ||
1047 | |||
1048 | function isPositioned( element ) { | ||
1049 | return !!{ absolute: 1, fixed: 1 }[ element.getComputedStyle( 'position' ) ]; | ||
1050 | } | ||
1051 | |||
1052 | // Is text node? | ||
1053 | function isTextNode( node ) { | ||
1054 | return node && node.type == CKEDITOR.NODE_TEXT; | ||
1055 | } | ||
1056 | |||
1057 | function isTrigger( that, element ) { | ||
1058 | return isHtml( element ) ? element.is( that.triggers ) : null; | ||
1059 | } | ||
1060 | |||
1061 | function isInTabu( that, element ) { | ||
1062 | if ( !element ) | ||
1063 | return false; | ||
1064 | |||
1065 | var parents = element.getParents( 1 ); | ||
1066 | |||
1067 | for ( var i = parents.length ; i-- ; ) { | ||
1068 | for ( var j = that.tabuList.length ; j-- ; ) { | ||
1069 | if ( parents[ i ].hasAttribute( that.tabuList[ j ] ) ) | ||
1070 | return true; | ||
1071 | } | ||
1072 | } | ||
1073 | |||
1074 | return false; | ||
1075 | } | ||
1076 | |||
1077 | // This function checks vertically is there's a relevant child between element's edge | ||
1078 | // and the pointer. | ||
1079 | // \-> Table contents are omitted. | ||
1080 | function isChildBetweenPointerAndEdge( that, parent, edgeBottom ) { | ||
1081 | var edgeChild = parent[ edgeBottom ? 'getLast' : 'getFirst' ]( function( node ) { | ||
1082 | return that.isRelevant( node ) && !node.is( DTD_TABLECONTENT ); | ||
1083 | } ); | ||
1084 | |||
1085 | if ( !edgeChild ) | ||
1086 | return false; | ||
1087 | |||
1088 | updateSize( that, edgeChild ); | ||
1089 | |||
1090 | return edgeBottom ? edgeChild.size.top > that.mouse.y : edgeChild.size.bottom < that.mouse.y; | ||
1091 | } | ||
1092 | |||
1093 | // This method handles edge cases: | ||
1094 | // \-> Mouse is around upper or lower edge of view pane. | ||
1095 | // \-> Also scroll position is either minimal or maximal. | ||
1096 | // \-> It's OK to show LOOK_TOP(BOTTOM) type line. | ||
1097 | // | ||
1098 | // This trigger doesn't need additional post-filtering. | ||
1099 | // | ||
1100 | // +----------------------------- Editable -+ /-- | ||
1101 | // | +---------------------- First child -+ | | <-- Top edge (first child) | ||
1102 | // | | | | | | ||
1103 | // | | | | | * Mouse activation area * | ||
1104 | // | | | | | | ||
1105 | // | | ... | | \-- Top edge + trigger offset | ||
1106 | // | . . | | ||
1107 | // | | | ||
1108 | // | . . | | ||
1109 | // | | ... | | /-- Bottom edge - trigger offset | ||
1110 | // | | | | | | ||
1111 | // | | | | | * Mouse activation area * | ||
1112 | // | | | | | | ||
1113 | // | +----------------------- Last child -+ | | <-- Bottom edge (last child) | ||
1114 | // +----------------------------------------+ \-- | ||
1115 | // | ||
1116 | function triggerEditable( that ) { | ||
1117 | that.debug.groupStart( 'triggerEditable' ); // %REMOVE_LINE% | ||
1118 | |||
1119 | var editable = that.editable, | ||
1120 | mouse = that.mouse, | ||
1121 | view = that.view, | ||
1122 | triggerOffset = that.triggerOffset, | ||
1123 | triggerLook; | ||
1124 | |||
1125 | // Update editable dimensions. | ||
1126 | updateEditableSize( that ); | ||
1127 | |||
1128 | // This flag determines whether checking bottom trigger. | ||
1129 | var bottomTrigger = mouse.y > ( | ||
1130 | that.inInlineMode ? ( | ||
1131 | view.editable.top + view.editable.height / 2 | ||
1132 | ) : ( | ||
1133 | // This is to handle case when editable.height / 2 <<< pane.height. | ||
1134 | Math.min( view.editable.height, view.pane.height ) / 2 | ||
1135 | ) | ||
1136 | ), | ||
1137 | |||
1138 | // Edge node according to bottomTrigger. | ||
1139 | edgeNode = editable[ bottomTrigger ? 'getLast' : 'getFirst' ]( function( node ) { | ||
1140 | return !( isEmptyTextNode( node ) || isComment( node ) ); | ||
1141 | } ); | ||
1142 | |||
1143 | // There's no edge node. Abort. | ||
1144 | if ( !edgeNode ) { | ||
1145 | that.debug.logEnd( 'ABORT. No edge node found.' ); // %REMOVE_LINE% | ||
1146 | return null; | ||
1147 | } | ||
1148 | |||
1149 | // If the edgeNode in editable is ML, get the next one. | ||
1150 | if ( isLine( that, edgeNode ) ) { | ||
1151 | edgeNode = that.line.wrap[ bottomTrigger ? 'getPrevious' : 'getNext' ]( function( node ) { | ||
1152 | return !( isEmptyTextNode( node ) || isComment( node ) ); | ||
1153 | } ); | ||
1154 | } | ||
1155 | |||
1156 | // Exclude bad nodes (no ML needed then): | ||
1157 | // \-> Edge node is text. | ||
1158 | // \-> Edge node is floated, etc. | ||
1159 | // | ||
1160 | // Edge node *must be* a valid trigger at this stage as well. | ||
1161 | if ( !isHtml( edgeNode ) || isFlowBreaker( edgeNode ) || !isTrigger( that, edgeNode ) ) { | ||
1162 | that.debug.logEnd( 'ABORT. Invalid edge node.' ); // %REMOVE_LINE% | ||
1163 | return null; | ||
1164 | } | ||
1165 | |||
1166 | // Update size of edge node. Dimensions will be necessary. | ||
1167 | updateSize( that, edgeNode ); | ||
1168 | |||
1169 | // Return appropriate trigger according to bottomTrigger. | ||
1170 | // \-> Top edge trigger case first. | ||
1171 | if ( !bottomTrigger && // Top trigger case. | ||
1172 | edgeNode.size.top >= 0 && // Check if the first element is fully visible. | ||
1173 | inBetween( mouse.y, 0, edgeNode.size.top + triggerOffset ) ) { // Check if mouse in [0, edgeNode.top + triggerOffset]. | ||
1174 | |||
1175 | // Determine trigger look. | ||
1176 | triggerLook = that.inInlineMode || view.scroll.y === 0 ? | ||
1177 | LOOK_TOP : LOOK_NORMAL; | ||
1178 | |||
1179 | that.debug.logEnd( 'SUCCESS. Created box trigger. EDGE_TOP.' ); // %REMOVE_LINE% | ||
1180 | |||
1181 | return new boxTrigger( [ null, edgeNode, | ||
1182 | EDGE_TOP, | ||
1183 | TYPE_EDGE, | ||
1184 | triggerLook | ||
1185 | ] ); | ||
1186 | } | ||
1187 | |||
1188 | // \-> Bottom case. | ||
1189 | else if ( bottomTrigger && | ||
1190 | edgeNode.size.bottom <= view.pane.height && // Check if the last element is fully visible | ||
1191 | inBetween( mouse.y, // Check if mouse in... | ||
1192 | edgeNode.size.bottom - triggerOffset, view.pane.height ) ) { // [ edgeNode.bottom - triggerOffset, paneHeight ] | ||
1193 | |||
1194 | // Determine trigger look. | ||
1195 | triggerLook = that.inInlineMode || | ||
1196 | inBetween( edgeNode.size.bottom, view.pane.height - triggerOffset, view.pane.height ) ? | ||
1197 | LOOK_BOTTOM : LOOK_NORMAL; | ||
1198 | |||
1199 | that.debug.logEnd( 'SUCCESS. Created box trigger. EDGE_BOTTOM.' ); // %REMOVE_LINE% | ||
1200 | |||
1201 | return new boxTrigger( [ edgeNode, null, | ||
1202 | EDGE_BOTTOM, | ||
1203 | TYPE_EDGE, | ||
1204 | triggerLook | ||
1205 | ] ); | ||
1206 | } | ||
1207 | |||
1208 | that.debug.logEnd( 'ABORT. No trigger created.' ); // %REMOVE_LINE% | ||
1209 | return null; | ||
1210 | } | ||
1211 | |||
1212 | // This method covers cases *inside* of an element: | ||
1213 | // \-> The pointer is in the top (bottom) area of an element and there's | ||
1214 | // HTML node before (after) this element. | ||
1215 | // \-> An element being the first or last child of its parent. | ||
1216 | // | ||
1217 | // +----------------------- Parent element -+ | ||
1218 | // | +----------------------- Element #1 -+ | /-- | ||
1219 | // | | | | | * Mouse activation area (as first child) * | ||
1220 | // | | | | \-- | ||
1221 | // | | | | /-- | ||
1222 | // | | | | | * Mouse activation area (Element #2) * | ||
1223 | // | +------------------------------------+ | \-- | ||
1224 | // | | | ||
1225 | // | +----------------------- Element #2 -+ | /-- | ||
1226 | // | | | | | * Mouse activation area (Element #1) * | ||
1227 | // | | | | \-- | ||
1228 | // | | | | | ||
1229 | // | +------------------------------------+ | | ||
1230 | // | | | ||
1231 | // | Text node is here. | | ||
1232 | // | | | ||
1233 | // | +----------------------- Element #3 -+ | | ||
1234 | // | | | | | ||
1235 | // | | | | | ||
1236 | // | | | | /-- | ||
1237 | // | | | | | * Mouse activation area (as last child) * | ||
1238 | // | +------------------------------------+ | \-- | ||
1239 | // +----------------------------------------+ | ||
1240 | // | ||
1241 | function triggerEdge( that ) { | ||
1242 | that.debug.groupStart( 'triggerEdge' ); // %REMOVE_LINE% | ||
1243 | |||
1244 | var mouse = that.mouse, | ||
1245 | view = that.view, | ||
1246 | triggerOffset = that.triggerOffset; | ||
1247 | |||
1248 | // Get the ascendant trigger basing on elementFromMouse. | ||
1249 | var element = getAscendantTrigger( that ); | ||
1250 | |||
1251 | that.debug.logElements( [ element ], [ 'Ascendant trigger' ], 'First stage' ); // %REMOVE_LINE% | ||
1252 | |||
1253 | // Abort if there's no appropriate element. | ||
1254 | if ( !element ) { | ||
1255 | that.debug.logEnd( 'ABORT. No element, element is editable or element contains editable.' ); // %REMOVE_LINE% | ||
1256 | return null; | ||
1257 | } | ||
1258 | |||
1259 | // Dimensions will be necessary. | ||
1260 | updateSize( that, element ); | ||
1261 | |||
1262 | // If triggerOffset is larger than a half of element's height, | ||
1263 | // use an offset of 1/2 of element's height. If the offset wasn't reduced, | ||
1264 | // top area would cover most (all) cases. | ||
1265 | var fixedOffset = Math.min( triggerOffset, | ||
1266 | 0 | ( element.size.outerHeight / 2 ) ), | ||
1267 | |||
1268 | // This variable will hold the trigger to be returned. | ||
1269 | triggerSetup = [], | ||
1270 | triggerLook, | ||
1271 | |||
1272 | // This flag determines whether dealing with a bottom trigger. | ||
1273 | bottomTrigger; | ||
1274 | |||
1275 | // \-> Top trigger. | ||
1276 | if ( inBetween( mouse.y, element.size.top - 1, element.size.top + fixedOffset ) ) | ||
1277 | bottomTrigger = false; | ||
1278 | // \-> Bottom trigger. | ||
1279 | else if ( inBetween( mouse.y, element.size.bottom - fixedOffset, element.size.bottom + 1 ) ) | ||
1280 | bottomTrigger = true; | ||
1281 | // \-> Abort. Not in a valid trigger space. | ||
1282 | else { | ||
1283 | that.debug.logEnd( 'ABORT. Not around of any edge.' ); // %REMOVE_LINE% | ||
1284 | return null; | ||
1285 | } | ||
1286 | |||
1287 | // Reject wrong elements. | ||
1288 | // \-> Reject an element which is a flow breaker. | ||
1289 | // \-> Reject an element which has a child above/below the mouse pointer. | ||
1290 | // \-> Reject an element which belongs to list items. | ||
1291 | if ( | ||
1292 | isFlowBreaker( element ) || | ||
1293 | isChildBetweenPointerAndEdge( that, element, bottomTrigger ) || | ||
1294 | element.getParent().is( DTD_LISTITEM ) | ||
1295 | ) { | ||
1296 | that.debug.logEnd( 'ABORT. element is wrong', element ); // %REMOVE_LINE% | ||
1297 | return null; | ||
1298 | } | ||
1299 | |||
1300 | // Get sibling according to bottomTrigger. | ||
1301 | var elementSibling = getNonEmptyNeighbour( that, element, !bottomTrigger ); | ||
1302 | |||
1303 | // No sibling element. | ||
1304 | // This is a first or last child case. | ||
1305 | if ( !elementSibling ) { | ||
1306 | // No need to reject the element as it has already been done before. | ||
1307 | // Prepare a trigger. | ||
1308 | |||
1309 | // Determine trigger look. | ||
1310 | if ( element.equals( that.editable[ bottomTrigger ? 'getLast' : 'getFirst' ]( that.isRelevant ) ) ) { | ||
1311 | updateEditableSize( that ); | ||
1312 | |||
1313 | if ( | ||
1314 | bottomTrigger && inBetween( mouse.y, | ||
1315 | element.size.bottom - fixedOffset, view.pane.height ) && | ||
1316 | inBetween( element.size.bottom, view.pane.height - fixedOffset, view.pane.height ) | ||
1317 | ) { | ||
1318 | triggerLook = LOOK_BOTTOM; | ||
1319 | } else if ( inBetween( mouse.y, 0, element.size.top + fixedOffset ) ) { | ||
1320 | triggerLook = LOOK_TOP; | ||
1321 | } | ||
1322 | } else { | ||
1323 | triggerLook = LOOK_NORMAL; | ||
1324 | } | ||
1325 | |||
1326 | triggerSetup = [ null, element ][ bottomTrigger ? 'reverse' : 'concat' ]().concat( [ | ||
1327 | bottomTrigger ? EDGE_BOTTOM : EDGE_TOP, | ||
1328 | TYPE_EDGE, | ||
1329 | triggerLook, | ||
1330 | element.equals( that.editable[ bottomTrigger ? 'getLast' : 'getFirst' ]( that.isRelevant ) ) ? | ||
1331 | ( bottomTrigger ? LOOK_BOTTOM : LOOK_TOP ) : LOOK_NORMAL | ||
1332 | ] ); | ||
1333 | |||
1334 | that.debug.log( 'Configured edge trigger of ' + ( bottomTrigger ? 'EDGE_BOTTOM' : 'EDGE_TOP' ) ); // %REMOVE_LINE% | ||
1335 | } | ||
1336 | |||
1337 | // Abort. Sibling is a text element. | ||
1338 | else if ( isTextNode( elementSibling ) ) { | ||
1339 | that.debug.logEnd( 'ABORT. Sibling is non-empty text element' ); // %REMOVE_LINE% | ||
1340 | return null; | ||
1341 | } | ||
1342 | |||
1343 | // Check if the sibling is a HTML element. | ||
1344 | // If so, create an TYPE_EDGE, EDGE_MIDDLE trigger. | ||
1345 | else if ( isHtml( elementSibling ) ) { | ||
1346 | // Reject wrong elementSiblings. | ||
1347 | // \-> Reject an elementSibling which is a flow breaker. | ||
1348 | // \-> Reject an elementSibling which isn't a trigger. | ||
1349 | // \-> Reject an elementSibling which belongs to list items. | ||
1350 | if ( | ||
1351 | isFlowBreaker( elementSibling ) || | ||
1352 | !isTrigger( that, elementSibling ) || | ||
1353 | elementSibling.getParent().is( DTD_LISTITEM ) | ||
1354 | ) { | ||
1355 | that.debug.logEnd( 'ABORT. elementSibling is wrong', elementSibling ); // %REMOVE_LINE% | ||
1356 | return null; | ||
1357 | } | ||
1358 | |||
1359 | // Prepare a trigger. | ||
1360 | triggerSetup = [ elementSibling, element ][ bottomTrigger ? 'reverse' : 'concat' ]().concat( [ | ||
1361 | EDGE_MIDDLE, | ||
1362 | TYPE_EDGE | ||
1363 | ] ); | ||
1364 | |||
1365 | that.debug.log( 'Configured edge trigger of EDGE_MIDDLE' ); // %REMOVE_LINE% | ||
1366 | } | ||
1367 | |||
1368 | if ( 0 in triggerSetup ) { | ||
1369 | that.debug.logEnd( 'SUCCESS. Returning a trigger.' ); // %REMOVE_LINE% | ||
1370 | return new boxTrigger( triggerSetup ); | ||
1371 | } | ||
1372 | |||
1373 | that.debug.logEnd( 'ABORT. No trigger generated.' ); // %REMOVE_LINE% | ||
1374 | return null; | ||
1375 | } | ||
1376 | |||
1377 | // Checks iteratively up and down in search for elements using elementFromMouse method. | ||
1378 | // Useful if between two triggers. | ||
1379 | // | ||
1380 | // +----------------------- Parent element -+ | ||
1381 | // | +----------------------- Element #1 -+ | | ||
1382 | // | | | | | ||
1383 | // | | | | | ||
1384 | // | | | | | ||
1385 | // | +------------------------------------+ | | ||
1386 | // | | /-- | ||
1387 | // | . | | | ||
1388 | // | . +-- Floated -+ | | | ||
1389 | // | | | | | | * Mouse activation area * | ||
1390 | // | | | IGNORE | | | | ||
1391 | // | X | | | | Method searches vertically for sibling elements. | ||
1392 | // | | +------------+ | | Start point is X (mouse-y coordinate). | ||
1393 | // | | | | Floated elements, comments and empty text nodes are omitted. | ||
1394 | // | . | | | ||
1395 | // | . | | | ||
1396 | // | | \-- | ||
1397 | // | +----------------------- Element #2 -+ | | ||
1398 | // | | | | | ||
1399 | // | | | | | ||
1400 | // | | | | | ||
1401 | // | | | | | ||
1402 | // | +------------------------------------+ | | ||
1403 | // +----------------------------------------+ | ||
1404 | // | ||
1405 | var triggerExpand = ( function() { | ||
1406 | // The heart of the procedure. This method creates triggers that are | ||
1407 | // filtered by expandFilter method. | ||
1408 | function expandEngine( that ) { | ||
1409 | that.debug.groupStart( 'expandEngine' ); // %REMOVE_LINE% | ||
1410 | |||
1411 | var startElement = that.element, | ||
1412 | upper, lower, trigger; | ||
1413 | |||
1414 | if ( !isHtml( startElement ) || startElement.contains( that.editable ) ) { | ||
1415 | that.debug.logEnd( 'ABORT. No start element, or start element contains editable.' ); // %REMOVE_LINE% | ||
1416 | return null; | ||
1417 | } | ||
1418 | |||
1419 | // Stop searching if element is in non-editable branch of DOM. | ||
1420 | if ( startElement.isReadOnly() ) | ||
1421 | return null; | ||
1422 | |||
1423 | trigger = verticalSearch( that, | ||
1424 | function( current, startElement ) { | ||
1425 | return !startElement.equals( current ); // stop when start element and the current one differ | ||
1426 | }, function( that, mouse ) { | ||
1427 | return elementFromMouse( that, true, mouse ); | ||
1428 | }, startElement ), | ||
1429 | |||
1430 | upper = trigger.upper, | ||
1431 | lower = trigger.lower; | ||
1432 | |||
1433 | that.debug.logElements( [ upper, lower ], [ 'Upper', 'Lower' ], 'Pair found' ); // %REMOVE_LINE% | ||
1434 | |||
1435 | // Success: two siblings have been found | ||
1436 | if ( areSiblings( that, upper, lower ) ) { | ||
1437 | that.debug.logEnd( 'SUCCESS. Expand trigger created.' ); // %REMOVE_LINE% | ||
1438 | return trigger.set( EDGE_MIDDLE, TYPE_EXPAND ); | ||
1439 | } | ||
1440 | |||
1441 | that.debug.logElements( [ startElement, upper, lower ], // %REMOVE_LINE% | ||
1442 | [ 'Start', 'Upper', 'Lower' ], 'Post-processing' ); // %REMOVE_LINE% | ||
1443 | |||
1444 | // Danger. Dragons ahead. | ||
1445 | // No siblings have been found during previous phase, post-processing may be necessary. | ||
1446 | // We can traverse DOM until a valid pair of elements around the pointer is found. | ||
1447 | |||
1448 | // Prepare for post-processing: | ||
1449 | // 1. Determine if upper and lower are children of startElement. | ||
1450 | // 1.1. If so, find their ascendants that are closest to startElement (one level deeper than startElement). | ||
1451 | // 1.2. Otherwise use first/last-child of the startElement as upper/lower. Why?: | ||
1452 | // a) upper/lower belongs to another branch of the DOM tree. | ||
1453 | // b) verticalSearch encountered an edge of the viewport and failed. | ||
1454 | // 1.3. Make sure upper and lower still exist. Why?: | ||
1455 | // a) Upper and lower may be not belong to the branch of the startElement (may not exist at all) and | ||
1456 | // startElement has no children. | ||
1457 | // 2. Perform the post-processing. | ||
1458 | // 2.1. Gather dimensions of an upper element. | ||
1459 | // 2.2. Abort if lower edge of upper is already under the mouse pointer. Why?: | ||
1460 | // a) We expect upper to be above and lower below the mouse pointer. | ||
1461 | // 3. Perform iterative search while upper != lower. | ||
1462 | // 3.1. Find the upper-next element. If there's no such element, break current search. Why?: | ||
1463 | // a) There's no point in further search if there are only text nodes ahead. | ||
1464 | // 3.2. Calculate the distance between the middle point of ( upper, upperNext ) and mouse-y. | ||
1465 | // 3.3. If the distance is shorter than the previous best, save it (save upper, upperNext as well). | ||
1466 | // 3.4. If the optimal pair is found, assign it back to the trigger. | ||
1467 | |||
1468 | // 1.1., 1.2. | ||
1469 | if ( upper && startElement.contains( upper ) ) { | ||
1470 | while ( !upper.getParent().equals( startElement ) ) | ||
1471 | upper = upper.getParent(); | ||
1472 | } else { | ||
1473 | upper = startElement.getFirst( function( node ) { | ||
1474 | return expandSelector( that, node ); | ||
1475 | } ); | ||
1476 | } | ||
1477 | |||
1478 | if ( lower && startElement.contains( lower ) ) { | ||
1479 | while ( !lower.getParent().equals( startElement ) ) | ||
1480 | lower = lower.getParent(); | ||
1481 | } else { | ||
1482 | lower = startElement.getLast( function( node ) { | ||
1483 | return expandSelector( that, node ); | ||
1484 | } ); | ||
1485 | } | ||
1486 | |||
1487 | // 1.3. | ||
1488 | if ( !upper || !lower ) { | ||
1489 | that.debug.logEnd( 'ABORT. There is no upper or no lower element.' ); // %REMOVE_LINE% | ||
1490 | return null; | ||
1491 | } | ||
1492 | |||
1493 | // 2.1. | ||
1494 | updateSize( that, upper ); | ||
1495 | updateSize( that, lower ); | ||
1496 | |||
1497 | if ( !checkMouseBetweenElements( that, upper, lower ) ) { | ||
1498 | that.debug.logEnd( 'ABORT. Mouse is already above upper or below lower.' ); // %REMOVE_LINE% | ||
1499 | return null; | ||
1500 | } | ||
1501 | |||
1502 | var minDistance = Number.MAX_VALUE, | ||
1503 | currentDistance, upperNext, minElement, minElementNext; | ||
1504 | |||
1505 | while ( lower && !lower.equals( upper ) ) { | ||
1506 | // 3.1. | ||
1507 | if ( !( upperNext = upper.getNext( that.isRelevant ) ) ) | ||
1508 | break; | ||
1509 | |||
1510 | // 3.2. | ||
1511 | currentDistance = Math.abs( getMidpoint( that, upper, upperNext ) - that.mouse.y ); | ||
1512 | |||
1513 | // 3.3. | ||
1514 | if ( currentDistance < minDistance ) { | ||
1515 | minDistance = currentDistance; | ||
1516 | minElement = upper; | ||
1517 | minElementNext = upperNext; | ||
1518 | } | ||
1519 | |||
1520 | upper = upperNext; | ||
1521 | updateSize( that, upper ); | ||
1522 | } | ||
1523 | |||
1524 | that.debug.logElements( [ minElement, minElementNext ], // %REMOVE_LINE% | ||
1525 | [ 'Min', 'MinNext' ], 'Post-processing results' ); // %REMOVE_LINE% | ||
1526 | |||
1527 | // 3.4. | ||
1528 | if ( !minElement || !minElementNext ) { | ||
1529 | that.debug.logEnd( 'ABORT. No Min or MinNext' ); // %REMOVE_LINE% | ||
1530 | return null; | ||
1531 | } | ||
1532 | |||
1533 | if ( !checkMouseBetweenElements( that, minElement, minElementNext ) ) { | ||
1534 | that.debug.logEnd( 'ABORT. Mouse is already above minElement or below minElementNext.' ); // %REMOVE_LINE% | ||
1535 | return null; | ||
1536 | } | ||
1537 | |||
1538 | // An element of minimal distance has been found. Assign it to the trigger. | ||
1539 | trigger.upper = minElement; | ||
1540 | trigger.lower = minElementNext; | ||
1541 | |||
1542 | // Success: post-processing revealed a pair of elements. | ||
1543 | that.debug.logEnd( 'SUCCESSFUL post-processing. Trigger created.' ); // %REMOVE_LINE% | ||
1544 | return trigger.set( EDGE_MIDDLE, TYPE_EXPAND ); | ||
1545 | } | ||
1546 | |||
1547 | // This is default element selector used by the engine. | ||
1548 | function expandSelector( that, node ) { | ||
1549 | return !( isTextNode( node ) || | ||
1550 | isComment( node ) || | ||
1551 | isFlowBreaker( node ) || | ||
1552 | isLine( that, node ) || | ||
1553 | ( node.type == CKEDITOR.NODE_ELEMENT && node.$ && node.is( 'br' ) ) ); | ||
1554 | } | ||
1555 | |||
1556 | // This method checks whether mouse-y is between the top edge of upper | ||
1557 | // and bottom edge of lower. | ||
1558 | // | ||
1559 | // NOTE: This method assumes that updateSize has already been called | ||
1560 | // for the elements and is up-to-date. | ||
1561 | // | ||
1562 | // +---------------------------- Upper -+ /-- | ||
1563 | // | | | | ||
1564 | // +------------------------------------+ | | ||
1565 | // | | ||
1566 | // ... | | ||
1567 | // | | ||
1568 | // X | * Return true for mouse-y in this range * | ||
1569 | // | | ||
1570 | // ... | | ||
1571 | // | | ||
1572 | // +---------------------------- Lower -+ | | ||
1573 | // | | | | ||
1574 | // +------------------------------------+ \-- | ||
1575 | // | ||
1576 | function checkMouseBetweenElements( that, upper, lower ) { | ||
1577 | return inBetween( that.mouse.y, upper.size.top, lower.size.bottom ); | ||
1578 | } | ||
1579 | |||
1580 | // A method for trigger filtering. Accepts or rejects trigger pairs | ||
1581 | // by their location in DOM etc. | ||
1582 | function expandFilter( that, trigger ) { | ||
1583 | that.debug.groupStart( 'expandFilter' ); // %REMOVE_LINE% | ||
1584 | |||
1585 | var upper = trigger.upper, | ||
1586 | lower = trigger.lower; | ||
1587 | |||
1588 | if ( | ||
1589 | !upper || !lower || // NOT: EDGE_MIDDLE trigger ALWAYS has two elements. | ||
1590 | isFlowBreaker( lower ) || isFlowBreaker( upper ) || // NOT: one of the elements is floated or positioned | ||
1591 | lower.equals( upper ) || upper.equals( lower ) || // NOT: two trigger elements, one equals another. | ||
1592 | lower.contains( upper ) || upper.contains( lower ) | ||
1593 | ) { // NOT: two trigger elements, one contains another. | ||
1594 | that.debug.logEnd( 'REJECTED. No upper or no lower or they contain each other.' ); // %REMOVE_LINE% | ||
1595 | |||
1596 | return false; | ||
1597 | } | ||
1598 | |||
1599 | // YES: two trigger elements, pure siblings. | ||
1600 | else if ( isTrigger( that, upper ) && isTrigger( that, lower ) && areSiblings( that, upper, lower ) ) { | ||
1601 | that.debug.logElementsEnd( [ upper, lower ], // %REMOVE_LINE% | ||
1602 | [ 'upper', 'lower' ], 'APPROVED EDGE_MIDDLE' ); // %REMOVE_LINE% | ||
1603 | |||
1604 | return true; | ||
1605 | } | ||
1606 | |||
1607 | that.debug.logElementsEnd( [ upper, lower ], // %REMOVE_LINE% | ||
1608 | [ 'upper', 'lower' ], 'Rejected unknown pair' ); // %REMOVE_LINE% | ||
1609 | |||
1610 | return false; | ||
1611 | } | ||
1612 | |||
1613 | // Simple wrapper for expandEngine and expandFilter. | ||
1614 | return function( that ) { | ||
1615 | that.debug.groupStart( 'triggerExpand' ); // %REMOVE_LINE% | ||
1616 | |||
1617 | var trigger = expandEngine( that ); | ||
1618 | |||
1619 | that.debug.groupEnd(); // %REMOVE_LINE% | ||
1620 | return trigger && expandFilter( that, trigger ) ? trigger : null; | ||
1621 | }; | ||
1622 | } )(); | ||
1623 | |||
1624 | // Collects dimensions of an element. | ||
1625 | var sizePrefixes = [ 'top', 'left', 'right', 'bottom' ]; | ||
1626 | |||
1627 | function getSize( that, element, ignoreScroll, force ) { | ||
1628 | var docPosition = element.getDocumentPosition(), | ||
1629 | border = {}, | ||
1630 | margin = {}, | ||
1631 | padding = {}, | ||
1632 | box = {}; | ||
1633 | |||
1634 | for ( var i = sizePrefixes.length; i--; ) { | ||
1635 | border[ sizePrefixes[ i ] ] = parseInt( getStyle( 'border-' + sizePrefixes[ i ] + '-width' ), 10 ) || 0; | ||
1636 | padding[ sizePrefixes[ i ] ] = parseInt( getStyle( 'padding-' + sizePrefixes[ i ] ), 10 ) || 0; | ||
1637 | margin[ sizePrefixes[ i ] ] = parseInt( getStyle( 'margin-' + sizePrefixes[ i ] ), 10 ) || 0; | ||
1638 | } | ||
1639 | |||
1640 | // updateWindowSize if forced to do so OR NOT ignoring scroll. | ||
1641 | if ( !ignoreScroll || force ) | ||
1642 | updateWindowSize( that, force ); | ||
1643 | |||
1644 | box.top = docPosition.y - ( ignoreScroll ? 0 : that.view.scroll.y ), box.left = docPosition.x - ( ignoreScroll ? 0 : that.view.scroll.x ), | ||
1645 | |||
1646 | // w/ borders and paddings. | ||
1647 | box.outerWidth = element.$.offsetWidth, box.outerHeight = element.$.offsetHeight, | ||
1648 | |||
1649 | // w/o borders and paddings. | ||
1650 | box.height = box.outerHeight - ( padding.top + padding.bottom + border.top + border.bottom ), box.width = box.outerWidth - ( padding.left + padding.right + border.left + border.right ), | ||
1651 | |||
1652 | box.bottom = box.top + box.outerHeight, box.right = box.left + box.outerWidth; | ||
1653 | |||
1654 | if ( that.inInlineMode ) { | ||
1655 | box.scroll = { | ||
1656 | top: element.$.scrollTop, | ||
1657 | left: element.$.scrollLeft | ||
1658 | }; | ||
1659 | } | ||
1660 | |||
1661 | return extend( { | ||
1662 | border: border, | ||
1663 | padding: padding, | ||
1664 | margin: margin, | ||
1665 | ignoreScroll: ignoreScroll | ||
1666 | }, box, true ); | ||
1667 | |||
1668 | function getStyle( propertyName ) { | ||
1669 | return element.getComputedStyle.call( element, propertyName ); | ||
1670 | } | ||
1671 | } | ||
1672 | |||
1673 | function updateSize( that, element, ignoreScroll ) { | ||
1674 | if ( !isHtml( element ) ) // i.e. an element is hidden | ||
1675 | return ( element.size = null ); // -> reset size to make it useless for other methods | ||
1676 | |||
1677 | if ( !element.size ) | ||
1678 | element.size = {}; | ||
1679 | |||
1680 | // Abort if there was a similar query performed recently. | ||
1681 | // This kind of caching provides great performance improvement. | ||
1682 | else if ( element.size.ignoreScroll == ignoreScroll && element.size.date > new Date() - CACHE_TIME ) { | ||
1683 | that.debug.log( 'element.size: get from cache' ); // %REMOVE_LINE% | ||
1684 | return null; | ||
1685 | } | ||
1686 | |||
1687 | that.debug.log( 'element.size: capture' ); // %REMOVE_LINE% | ||
1688 | |||
1689 | return extend( element.size, getSize( that, element, ignoreScroll ), { | ||
1690 | date: +new Date() | ||
1691 | }, true ); | ||
1692 | } | ||
1693 | |||
1694 | // Updates that.view.editable object. | ||
1695 | // This one must be called separately outside of updateWindowSize | ||
1696 | // to prevent cyclic dependency getSize<->updateWindowSize. | ||
1697 | // It calls getSize with force flag to avoid getWindowSize cache (look: getSize). | ||
1698 | function updateEditableSize( that, ignoreScroll ) { | ||
1699 | that.view.editable = getSize( that, that.editable, ignoreScroll, true ); | ||
1700 | } | ||
1701 | |||
1702 | function updateWindowSize( that, force ) { | ||
1703 | if ( !that.view ) | ||
1704 | that.view = {}; | ||
1705 | |||
1706 | var view = that.view; | ||
1707 | |||
1708 | if ( !force && view && view.date > new Date() - CACHE_TIME ) { | ||
1709 | that.debug.log( 'win.size: get from cache' ); // %REMOVE_LINE% | ||
1710 | return; | ||
1711 | } | ||
1712 | |||
1713 | that.debug.log( 'win.size: capturing' ); // %REMOVE_LINE% | ||
1714 | |||
1715 | var win = that.win, | ||
1716 | scroll = win.getScrollPosition(), | ||
1717 | paneSize = win.getViewPaneSize(); | ||
1718 | |||
1719 | extend( that.view, { | ||
1720 | scroll: { | ||
1721 | x: scroll.x, | ||
1722 | y: scroll.y, | ||
1723 | width: that.doc.$.documentElement.scrollWidth - paneSize.width, | ||
1724 | height: that.doc.$.documentElement.scrollHeight - paneSize.height | ||
1725 | }, | ||
1726 | pane: { | ||
1727 | width: paneSize.width, | ||
1728 | height: paneSize.height, | ||
1729 | bottom: paneSize.height + scroll.y | ||
1730 | }, | ||
1731 | date: +new Date() | ||
1732 | }, true ); | ||
1733 | } | ||
1734 | |||
1735 | // This method searches document vertically using given | ||
1736 | // select criterion until stop criterion is fulfilled. | ||
1737 | function verticalSearch( that, stopCondition, selectCriterion, startElement ) { | ||
1738 | var upper = startElement, | ||
1739 | lower = startElement, | ||
1740 | mouseStep = 0, | ||
1741 | upperFound = false, | ||
1742 | lowerFound = false, | ||
1743 | viewPaneHeight = that.view.pane.height, | ||
1744 | mouse = that.mouse; | ||
1745 | |||
1746 | while ( mouse.y + mouseStep < viewPaneHeight && mouse.y - mouseStep > 0 ) { | ||
1747 | if ( !upperFound ) | ||
1748 | upperFound = stopCondition( upper, startElement ); | ||
1749 | |||
1750 | if ( !lowerFound ) | ||
1751 | lowerFound = stopCondition( lower, startElement ); | ||
1752 | |||
1753 | // Still not found... | ||
1754 | if ( !upperFound && mouse.y - mouseStep > 0 ) | ||
1755 | upper = selectCriterion( that, { x: mouse.x, y: mouse.y - mouseStep } ); | ||
1756 | |||
1757 | if ( !lowerFound && mouse.y + mouseStep < viewPaneHeight ) | ||
1758 | lower = selectCriterion( that, { x: mouse.x, y: mouse.y + mouseStep } ); | ||
1759 | |||
1760 | if ( upperFound && lowerFound ) | ||
1761 | break; | ||
1762 | |||
1763 | // Instead of ++ to reduce the number of invocations by half. | ||
1764 | // It's trades off accuracy in some edge cases for improved performance. | ||
1765 | mouseStep += 2; | ||
1766 | } | ||
1767 | |||
1768 | return new boxTrigger( [ upper, lower, null, null ] ); | ||
1769 | } | ||
1770 | |||
1771 | } )(); | ||
1772 | |||
1773 | /** | ||
1774 | * Sets the default vertical distance between the edge of the element and the mouse pointer that | ||
1775 | * causes the magic line to appear. This option accepts a value in pixels, without the unit (for example: | ||
1776 | * `15` for 15 pixels). | ||
1777 | * | ||
1778 | * Read more in the [documentation](#!/guide/dev_magicline) | ||
1779 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html). | ||
1780 | * | ||
1781 | * // Changes the offset to 15px. | ||
1782 | * CKEDITOR.config.magicline_triggerOffset = 15; | ||
1783 | * | ||
1784 | * @cfg {Number} [magicline_triggerOffset=30] | ||
1785 | * @member CKEDITOR.config | ||
1786 | * @see CKEDITOR.config#magicline_holdDistance | ||
1787 | */ | ||
1788 | |||
1789 | /** | ||
1790 | * Defines the distance between the mouse pointer and the box within | ||
1791 | * which the magic line stays revealed and no other focus space is offered to be accessed. | ||
1792 | * This value is relative to {@link #magicline_triggerOffset}. | ||
1793 | * | ||
1794 | * Read more in the [documentation](#!/guide/dev_magicline) | ||
1795 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html). | ||
1796 | * | ||
1797 | * // Increases the distance to 80% of CKEDITOR.config.magicline_triggerOffset. | ||
1798 | * CKEDITOR.config.magicline_holdDistance = .8; | ||
1799 | * | ||
1800 | * @cfg {Number} [magicline_holdDistance=0.5] | ||
1801 | * @member CKEDITOR.config | ||
1802 | * @see CKEDITOR.config#magicline_triggerOffset | ||
1803 | */ | ||
1804 | |||
1805 | /** | ||
1806 | * Defines the default keystroke that accesses the closest unreachable focus space **before** | ||
1807 | * the caret (start of the selection). If there is no focus space available, the selection remains unchanged. | ||
1808 | * | ||
1809 | * Read more in the [documentation](#!/guide/dev_magicline) | ||
1810 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html). | ||
1811 | * | ||
1812 | * // Changes the default keystroke to "Ctrl + ,". | ||
1813 | * CKEDITOR.config.magicline_keystrokePrevious = CKEDITOR.CTRL + 188; | ||
1814 | * | ||
1815 | * @cfg {Number} [magicline_keystrokePrevious=CKEDITOR.CTRL + CKEDITOR.SHIFT + 51 (CTRL + SHIFT + 3)] | ||
1816 | * @member CKEDITOR.config | ||
1817 | */ | ||
1818 | CKEDITOR.config.magicline_keystrokePrevious = CKEDITOR.CTRL + CKEDITOR.SHIFT + 51; // CTRL + SHIFT + 3 | ||
1819 | |||
1820 | /** | ||
1821 | * Defines the default keystroke that accesses the closest unreachable focus space **after** | ||
1822 | * the caret (start of the selection). If there is no focus space available, the selection remains unchanged. | ||
1823 | * | ||
1824 | * Read more in the [documentation](#!/guide/dev_magicline) | ||
1825 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html). | ||
1826 | * | ||
1827 | * // Changes keystroke to "Ctrl + .". | ||
1828 | * CKEDITOR.config.magicline_keystrokeNext = CKEDITOR.CTRL + 190; | ||
1829 | * | ||
1830 | * @cfg {Number} [magicline_keystrokeNext=CKEDITOR.CTRL + CKEDITOR.SHIFT + 52 (CTRL + SHIFT + 4)] | ||
1831 | * @member CKEDITOR.config | ||
1832 | */ | ||
1833 | CKEDITOR.config.magicline_keystrokeNext = CKEDITOR.CTRL + CKEDITOR.SHIFT + 52; // CTRL + SHIFT + 4 | ||
1834 | |||
1835 | /** | ||
1836 | * Defines a list of attributes that, if assigned to some elements, prevent the magic line from being | ||
1837 | * used within these elements. | ||
1838 | * | ||
1839 | * Read more in the [documentation](#!/guide/dev_magicline) | ||
1840 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html). | ||
1841 | * | ||
1842 | * // Adds the "data-tabu" attribute to the magic line tabu list. | ||
1843 | * CKEDITOR.config.magicline_tabuList = [ 'data-tabu' ]; | ||
1844 | * | ||
1845 | * @cfg {Number} [magicline_tabuList=[ 'data-widget-wrapper' ]] | ||
1846 | * @member CKEDITOR.config | ||
1847 | */ | ||
1848 | |||
1849 | /** | ||
1850 | * Defines the color of the magic line. The color may be adjusted to enhance readability. | ||
1851 | * | ||
1852 | * Read more in the [documentation](#!/guide/dev_magicline) | ||
1853 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html). | ||
1854 | * | ||
1855 | * // Changes magic line color to blue. | ||
1856 | * CKEDITOR.config.magicline_color = '#0000FF'; | ||
1857 | * | ||
1858 | * @cfg {String} [magicline_color='#FF0000'] | ||
1859 | * @member CKEDITOR.config | ||
1860 | */ | ||
1861 | |||
1862 | /** | ||
1863 | * Activates the special all-encompassing mode that considers all focus spaces between | ||
1864 | * {@link CKEDITOR.dtd#$block} elements as accessible by the magic line. | ||
1865 | * | ||
1866 | * Read more in the [documentation](#!/guide/dev_magicline) | ||
1867 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html). | ||
1868 | * | ||
1869 | * // Enables the greedy "put everywhere" mode. | ||
1870 | * CKEDITOR.config.magicline_everywhere = true; | ||
1871 | * | ||
1872 | * @cfg {Boolean} [magicline_everywhere=false] | ||
1873 | * @member CKEDITOR.config | ||
1874 | */ | ||
diff --git a/sources/plugins/magicline/samples/magicline.html b/sources/plugins/magicline/samples/magicline.html new file mode 100644 index 0000000..af8d17a --- /dev/null +++ b/sources/plugins/magicline/samples/magicline.html | |||
@@ -0,0 +1,209 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <!-- | ||
3 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
4 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
5 | --> | ||
6 | <html> | ||
7 | <head> | ||
8 | <meta charset="utf-8"> | ||
9 | <title>Using Magicline plugin — CKEditor Sample</title> | ||
10 | <script src="../../../ckeditor.js"></script> | ||
11 | <link rel="stylesheet" href="../../../samples/old/sample.css"> | ||
12 | <meta name="ckeditor-sample-name" content="Magicline plugin"> | ||
13 | <meta name="ckeditor-sample-group" content="Plugins"> | ||
14 | <meta name="ckeditor-sample-description" content="Using the Magicline plugin to access difficult focus spaces."> | ||
15 | </head> | ||
16 | <body> | ||
17 | <h1 class="samples"> | ||
18 | <a href="../../../samples/old/index.html">CKEditor Samples</a> » Using Magicline plugin | ||
19 | </h1> | ||
20 | <div class="warning deprecated"> | ||
21 | This sample is not maintained anymore. Check out its <a href="http://sdk.ckeditor.com/samples/magicline.html">brand new version in CKEditor SDK</a>. | ||
22 | </div> | ||
23 | <div class="description"> | ||
24 | <p> | ||
25 | This sample shows the advantages of <strong>Magicline</strong> plugin | ||
26 | which is to enhance the editing process. Thanks to this plugin, | ||
27 | a number of difficult focus spaces which are inaccessible due to | ||
28 | browser issues can now be focused. | ||
29 | </p> | ||
30 | <p> | ||
31 | <strong>Magicline</strong> plugin shows a red line with a handler | ||
32 | which, when clicked, inserts a paragraph and allows typing. To see this, | ||
33 | focus an editor and move your mouse above the focus space you want | ||
34 | to access. The plugin is enabled by default so no additional | ||
35 | configuration is necessary. | ||
36 | </p> | ||
37 | </div> | ||
38 | <div> | ||
39 | <label for="editor1"> | ||
40 | Editor 1: | ||
41 | </label> | ||
42 | <div class="description"> | ||
43 | <p> | ||
44 | This editor uses a default <strong>Magicline</strong> setup. | ||
45 | </p> | ||
46 | </div> | ||
47 | <textarea cols="80" id="editor1" name="editor1" rows="10"> | ||
48 | <table border="1" cellpadding="1" cellspacing="1" style="width: 100%; "> | ||
49 | <tbody> | ||
50 | <tr> | ||
51 | <td>This table</td> | ||
52 | <td>is the</td> | ||
53 | <td>very first</td> | ||
54 | <td>element of the document.</td> | ||
55 | </tr> | ||
56 | <tr> | ||
57 | <td>We are still</td> | ||
58 | <td>able to acces</td> | ||
59 | <td>the space before it.</td> | ||
60 | <td> | ||
61 | <table border="1" cellpadding="1" cellspacing="1" style="width: 100%; "> | ||
62 | <tbody> | ||
63 | <tr> | ||
64 | <td>This table is inside of a cell of another table.</td> | ||
65 | </tr> | ||
66 | <tr> | ||
67 | <td>We can type&nbsp;either before or after it though.</td> | ||
68 | </tr> | ||
69 | </tbody> | ||
70 | </table> | ||
71 | </td> | ||
72 | </tr> | ||
73 | </tbody> | ||
74 | </table> | ||
75 | |||
76 | <p>Two succesive horizontal lines (<tt>HR</tt> tags). We can access the space in between:</p> | ||
77 | |||
78 | <hr /> | ||
79 | <hr /> | ||
80 | <ol> | ||
81 | <li>This numbered list...</li> | ||
82 | <li>...is a neighbour of a horizontal line...</li> | ||
83 | <li>...and another list.</li> | ||
84 | </ol> | ||
85 | |||
86 | <ul> | ||
87 | <li>We can type between the lists...</li> | ||
88 | <li>...thanks to <strong>Magicline</strong>.</li> | ||
89 | </ul> | ||
90 | |||
91 | <p>Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.</p> | ||
92 | |||
93 | <p>Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.</p> | ||
94 | |||
95 | <p>Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.</p> | ||
96 | |||
97 | <div style="border: 2px dashed green; background: #ddd; text-align: center;"> | ||
98 | <p>This text is wrapped in a&nbsp;<tt>DIV</tt>&nbsp;element. We can type after this element though.</p> | ||
99 | </div> | ||
100 | </textarea> | ||
101 | <script> | ||
102 | |||
103 | // This call can be placed at any point after the | ||
104 | // <textarea>, or inside a <head><script> in a | ||
105 | // window.onload event handler. | ||
106 | |||
107 | CKEDITOR.replace( 'editor1', { | ||
108 | extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded. | ||
109 | allowedContent: true // Switch off the ACF, so very complex content created to | ||
110 | // show magicline's power isn't filtered. | ||
111 | } ); | ||
112 | |||
113 | </script> | ||
114 | </div> | ||
115 | <br> | ||
116 | <div> | ||
117 | <label for="editor2"> | ||
118 | Editor 2: | ||
119 | </label> | ||
120 | <div class="description"> | ||
121 | <p> | ||
122 | This editor is using a blue line. | ||
123 | </p> | ||
124 | <pre class="samples"> | ||
125 | CKEDITOR.replace( 'editor2', { | ||
126 | magicline_color: 'blue' | ||
127 | });</pre> | ||
128 | </div> | ||
129 | <textarea cols="80" id="editor2" name="editor2" rows="10"> | ||
130 | <table border="1" cellpadding="1" cellspacing="1" style="width: 100%; "> | ||
131 | <tbody> | ||
132 | <tr> | ||
133 | <td>This table</td> | ||
134 | <td>is the</td> | ||
135 | <td>very first</td> | ||
136 | <td>element of the document.</td> | ||
137 | </tr> | ||
138 | <tr> | ||
139 | <td>We are still</td> | ||
140 | <td>able to acces</td> | ||
141 | <td>the space before it.</td> | ||
142 | <td> | ||
143 | <table border="1" cellpadding="1" cellspacing="1" style="width: 100%; "> | ||
144 | <tbody> | ||
145 | <tr> | ||
146 | <td>This table is inside of a cell of another table.</td> | ||
147 | </tr> | ||
148 | <tr> | ||
149 | <td>We can type&nbsp;either before or after it though.</td> | ||
150 | </tr> | ||
151 | </tbody> | ||
152 | </table> | ||
153 | </td> | ||
154 | </tr> | ||
155 | </tbody> | ||
156 | </table> | ||
157 | |||
158 | <p>Two succesive horizontal lines (<tt>HR</tt> tags). We can access the space in between:</p> | ||
159 | |||
160 | <hr /> | ||
161 | <hr /> | ||
162 | <ol> | ||
163 | <li>This numbered list...</li> | ||
164 | <li>...is a neighbour of a horizontal line...</li> | ||
165 | <li>...and another list.</li> | ||
166 | </ol> | ||
167 | |||
168 | <ul> | ||
169 | <li>We can type between the lists...</li> | ||
170 | <li>...thanks to <strong>Magicline</strong>.</li> | ||
171 | </ul> | ||
172 | |||
173 | <p>Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.</p> | ||
174 | |||
175 | <p>Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.</p> | ||
176 | |||
177 | <p>Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.</p> | ||
178 | |||
179 | <div style="border: 2px dashed green; background: #ddd; text-align: center;"> | ||
180 | <p>This text is wrapped in a&nbsp;<tt>DIV</tt>&nbsp;element. We can type after this element though.</p> | ||
181 | </div> | ||
182 | </textarea> | ||
183 | <script> | ||
184 | |||
185 | // This call can be placed at any point after the | ||
186 | // <textarea>, or inside a <head><script> in a | ||
187 | // window.onload event handler. | ||
188 | |||
189 | CKEDITOR.replace( 'editor2', { | ||
190 | extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded. | ||
191 | magicline_color: 'blue', // Blue line | ||
192 | allowedContent: true // Switch off the ACF, so very complex content created to | ||
193 | // show magicline's power isn't filtered. | ||
194 | }); | ||
195 | |||
196 | </script> | ||
197 | </div> | ||
198 | <div id="footer"> | ||
199 | <hr> | ||
200 | <p> | ||
201 | CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> | ||
202 | </p> | ||
203 | <p id="copy"> | ||
204 | Copyright © 2003-2016, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico | ||
205 | Knabben. All rights reserved. | ||
206 | </p> | ||
207 | </div> | ||
208 | </body> | ||
209 | </html> | ||
diff --git a/sources/plugins/maximize/icons/hidpi/maximize.png b/sources/plugins/maximize/icons/hidpi/maximize.png new file mode 100644 index 0000000..1d1ed45 --- /dev/null +++ b/sources/plugins/maximize/icons/hidpi/maximize.png | |||
Binary files differ | |||
diff --git a/sources/plugins/maximize/icons/maximize.png b/sources/plugins/maximize/icons/maximize.png new file mode 100644 index 0000000..db01908 --- /dev/null +++ b/sources/plugins/maximize/icons/maximize.png | |||
Binary files differ | |||
diff --git a/sources/plugins/maximize/lang/af.js b/sources/plugins/maximize/lang/af.js new file mode 100644 index 0000000..e07bbd2 --- /dev/null +++ b/sources/plugins/maximize/lang/af.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'af', { | ||
6 | maximize: 'Maksimaliseer', | ||
7 | minimize: 'Minimaliseer' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/ar.js b/sources/plugins/maximize/lang/ar.js new file mode 100644 index 0000000..4181cf3 --- /dev/null +++ b/sources/plugins/maximize/lang/ar.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'ar', { | ||
6 | maximize: 'تكبير', | ||
7 | minimize: 'تصغير' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/bg.js b/sources/plugins/maximize/lang/bg.js new file mode 100644 index 0000000..c8cd978 --- /dev/null +++ b/sources/plugins/maximize/lang/bg.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'bg', { | ||
6 | maximize: 'Максимизиране', | ||
7 | minimize: 'Минимизиране' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/bn.js b/sources/plugins/maximize/lang/bn.js new file mode 100644 index 0000000..82793e3 --- /dev/null +++ b/sources/plugins/maximize/lang/bn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'bn', { | ||
6 | maximize: 'Maximize', // MISSING | ||
7 | minimize: 'Minimize' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/bs.js b/sources/plugins/maximize/lang/bs.js new file mode 100644 index 0000000..06655fd --- /dev/null +++ b/sources/plugins/maximize/lang/bs.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'bs', { | ||
6 | maximize: 'Maximize', // MISSING | ||
7 | minimize: 'Minimize' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/ca.js b/sources/plugins/maximize/lang/ca.js new file mode 100644 index 0000000..7bb1ba5 --- /dev/null +++ b/sources/plugins/maximize/lang/ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'ca', { | ||
6 | maximize: 'Maximitza', | ||
7 | minimize: 'Minimitza' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/cs.js b/sources/plugins/maximize/lang/cs.js new file mode 100644 index 0000000..5dfd482 --- /dev/null +++ b/sources/plugins/maximize/lang/cs.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'cs', { | ||
6 | maximize: 'Maximalizovat', | ||
7 | minimize: 'Minimalizovat' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/cy.js b/sources/plugins/maximize/lang/cy.js new file mode 100644 index 0000000..a854488 --- /dev/null +++ b/sources/plugins/maximize/lang/cy.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'cy', { | ||
6 | maximize: 'Mwyhau', | ||
7 | minimize: 'Lleihau' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/da.js b/sources/plugins/maximize/lang/da.js new file mode 100644 index 0000000..2d25a51 --- /dev/null +++ b/sources/plugins/maximize/lang/da.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'da', { | ||
6 | maximize: 'Maksimér', | ||
7 | minimize: 'Minimér' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/de-ch.js b/sources/plugins/maximize/lang/de-ch.js new file mode 100644 index 0000000..acc08f3 --- /dev/null +++ b/sources/plugins/maximize/lang/de-ch.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'de-ch', { | ||
6 | maximize: 'Maximieren', | ||
7 | minimize: 'Minimieren' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/de.js b/sources/plugins/maximize/lang/de.js new file mode 100644 index 0000000..6bfd5b2 --- /dev/null +++ b/sources/plugins/maximize/lang/de.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'de', { | ||
6 | maximize: 'Maximieren', | ||
7 | minimize: 'Minimieren' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/el.js b/sources/plugins/maximize/lang/el.js new file mode 100644 index 0000000..4b89726 --- /dev/null +++ b/sources/plugins/maximize/lang/el.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'el', { | ||
6 | maximize: 'Μεγιστοποίηση', | ||
7 | minimize: 'Ελαχιστοποίηση' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/en-au.js b/sources/plugins/maximize/lang/en-au.js new file mode 100644 index 0000000..0636683 --- /dev/null +++ b/sources/plugins/maximize/lang/en-au.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'en-au', { | ||
6 | maximize: 'Maximize', | ||
7 | minimize: 'Minimize' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/en-ca.js b/sources/plugins/maximize/lang/en-ca.js new file mode 100644 index 0000000..7265dbc --- /dev/null +++ b/sources/plugins/maximize/lang/en-ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'en-ca', { | ||
6 | maximize: 'Maximize', | ||
7 | minimize: 'Minimize' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/en-gb.js b/sources/plugins/maximize/lang/en-gb.js new file mode 100644 index 0000000..4ff811b --- /dev/null +++ b/sources/plugins/maximize/lang/en-gb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'en-gb', { | ||
6 | maximize: 'Maximise', | ||
7 | minimize: 'Minimise' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/en.js b/sources/plugins/maximize/lang/en.js new file mode 100644 index 0000000..71d8711 --- /dev/null +++ b/sources/plugins/maximize/lang/en.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'en', { | ||
6 | maximize: 'Maximize', | ||
7 | minimize: 'Minimize' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/eo.js b/sources/plugins/maximize/lang/eo.js new file mode 100644 index 0000000..6c75952 --- /dev/null +++ b/sources/plugins/maximize/lang/eo.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'eo', { | ||
6 | maximize: 'Pligrandigi', | ||
7 | minimize: 'Malgrandigi' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/es.js b/sources/plugins/maximize/lang/es.js new file mode 100644 index 0000000..85963a1 --- /dev/null +++ b/sources/plugins/maximize/lang/es.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'es', { | ||
6 | maximize: 'Maximizar', | ||
7 | minimize: 'Minimizar' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/et.js b/sources/plugins/maximize/lang/et.js new file mode 100644 index 0000000..241bb34 --- /dev/null +++ b/sources/plugins/maximize/lang/et.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'et', { | ||
6 | maximize: 'Maksimeerimine', | ||
7 | minimize: 'Minimeerimine' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/eu.js b/sources/plugins/maximize/lang/eu.js new file mode 100644 index 0000000..12eea43 --- /dev/null +++ b/sources/plugins/maximize/lang/eu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'eu', { | ||
6 | maximize: 'Maximizatu', | ||
7 | minimize: 'Minimizatu' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/fa.js b/sources/plugins/maximize/lang/fa.js new file mode 100644 index 0000000..c16bc2e --- /dev/null +++ b/sources/plugins/maximize/lang/fa.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'fa', { | ||
6 | maximize: 'بیشنه کردن', | ||
7 | minimize: 'کمینه کردن' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/fi.js b/sources/plugins/maximize/lang/fi.js new file mode 100644 index 0000000..d61f5f3 --- /dev/null +++ b/sources/plugins/maximize/lang/fi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'fi', { | ||
6 | maximize: 'Suurenna', | ||
7 | minimize: 'Pienennä' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/fo.js b/sources/plugins/maximize/lang/fo.js new file mode 100644 index 0000000..c3775fc --- /dev/null +++ b/sources/plugins/maximize/lang/fo.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'fo', { | ||
6 | maximize: 'Maksimera', | ||
7 | minimize: 'Minimera' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/fr-ca.js b/sources/plugins/maximize/lang/fr-ca.js new file mode 100644 index 0000000..ea9ccdd --- /dev/null +++ b/sources/plugins/maximize/lang/fr-ca.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'fr-ca', { | ||
6 | maximize: 'Maximizer', | ||
7 | minimize: 'Minimizer' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/fr.js b/sources/plugins/maximize/lang/fr.js new file mode 100644 index 0000000..f859816 --- /dev/null +++ b/sources/plugins/maximize/lang/fr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'fr', { | ||
6 | maximize: 'Agrandir', | ||
7 | minimize: 'Minimiser' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/gl.js b/sources/plugins/maximize/lang/gl.js new file mode 100644 index 0000000..498ff27 --- /dev/null +++ b/sources/plugins/maximize/lang/gl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'gl', { | ||
6 | maximize: 'Maximizar', | ||
7 | minimize: 'Minimizar' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/gu.js b/sources/plugins/maximize/lang/gu.js new file mode 100644 index 0000000..4b7af7b --- /dev/null +++ b/sources/plugins/maximize/lang/gu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'gu', { | ||
6 | maximize: 'મોટું કરવું', | ||
7 | minimize: 'નાનું કરવું' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/he.js b/sources/plugins/maximize/lang/he.js new file mode 100644 index 0000000..b0adc82 --- /dev/null +++ b/sources/plugins/maximize/lang/he.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'he', { | ||
6 | maximize: 'הגדלה למקסימום', | ||
7 | minimize: 'הקטנה למינימום' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/hi.js b/sources/plugins/maximize/lang/hi.js new file mode 100644 index 0000000..f9baef8 --- /dev/null +++ b/sources/plugins/maximize/lang/hi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'hi', { | ||
6 | maximize: 'मेक्सिमाईज़', | ||
7 | minimize: 'मिनिमाईज़' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/hr.js b/sources/plugins/maximize/lang/hr.js new file mode 100644 index 0000000..5492f2f --- /dev/null +++ b/sources/plugins/maximize/lang/hr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'hr', { | ||
6 | maximize: 'Povećaj', | ||
7 | minimize: 'Smanji' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/hu.js b/sources/plugins/maximize/lang/hu.js new file mode 100644 index 0000000..11e9530 --- /dev/null +++ b/sources/plugins/maximize/lang/hu.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'hu', { | ||
6 | maximize: 'Teljes méret', | ||
7 | minimize: 'Kis méret' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/id.js b/sources/plugins/maximize/lang/id.js new file mode 100644 index 0000000..f6e839a --- /dev/null +++ b/sources/plugins/maximize/lang/id.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'id', { | ||
6 | maximize: 'Memperbesar', | ||
7 | minimize: 'Memperkecil' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/is.js b/sources/plugins/maximize/lang/is.js new file mode 100644 index 0000000..97313df --- /dev/null +++ b/sources/plugins/maximize/lang/is.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'is', { | ||
6 | maximize: 'Maximize', // MISSING | ||
7 | minimize: 'Minimize' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/it.js b/sources/plugins/maximize/lang/it.js new file mode 100644 index 0000000..448337c --- /dev/null +++ b/sources/plugins/maximize/lang/it.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'it', { | ||
6 | maximize: 'Massimizza', | ||
7 | minimize: 'Minimizza' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/ja.js b/sources/plugins/maximize/lang/ja.js new file mode 100644 index 0000000..5479f2a --- /dev/null +++ b/sources/plugins/maximize/lang/ja.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'ja', { | ||
6 | maximize: '最大化', | ||
7 | minimize: '最小化' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/ka.js b/sources/plugins/maximize/lang/ka.js new file mode 100644 index 0000000..579c4b1 --- /dev/null +++ b/sources/plugins/maximize/lang/ka.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'ka', { | ||
6 | maximize: 'გადიდება', | ||
7 | minimize: 'დაპატარავება' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/km.js b/sources/plugins/maximize/lang/km.js new file mode 100644 index 0000000..bba8746 --- /dev/null +++ b/sources/plugins/maximize/lang/km.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'km', { | ||
6 | maximize: 'ពង្រីកអតិបរមា', | ||
7 | minimize: 'បង្រួមអប្បបរមា' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/ko.js b/sources/plugins/maximize/lang/ko.js new file mode 100644 index 0000000..05bb161 --- /dev/null +++ b/sources/plugins/maximize/lang/ko.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'ko', { | ||
6 | maximize: '최대화', | ||
7 | minimize: '최소화' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/ku.js b/sources/plugins/maximize/lang/ku.js new file mode 100644 index 0000000..50e24ef --- /dev/null +++ b/sources/plugins/maximize/lang/ku.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'ku', { | ||
6 | maximize: 'ئەوپەڕی گەورەیی', | ||
7 | minimize: 'ئەوپەڕی بچووکی' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/lt.js b/sources/plugins/maximize/lang/lt.js new file mode 100644 index 0000000..5cd4de8 --- /dev/null +++ b/sources/plugins/maximize/lang/lt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'lt', { | ||
6 | maximize: 'Išdidinti', | ||
7 | minimize: 'Sumažinti' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/lv.js b/sources/plugins/maximize/lang/lv.js new file mode 100644 index 0000000..77d9db2 --- /dev/null +++ b/sources/plugins/maximize/lang/lv.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'lv', { | ||
6 | maximize: 'Maksimizēt', | ||
7 | minimize: 'Minimizēt' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/mk.js b/sources/plugins/maximize/lang/mk.js new file mode 100644 index 0000000..382653b --- /dev/null +++ b/sources/plugins/maximize/lang/mk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'mk', { | ||
6 | maximize: 'Maximize', // MISSING | ||
7 | minimize: 'Minimize' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/mn.js b/sources/plugins/maximize/lang/mn.js new file mode 100644 index 0000000..f0bcf7c --- /dev/null +++ b/sources/plugins/maximize/lang/mn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'mn', { | ||
6 | maximize: 'Дэлгэц дүүргэх', | ||
7 | minimize: 'Цонхыг багсгаж харуулах' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/ms.js b/sources/plugins/maximize/lang/ms.js new file mode 100644 index 0000000..b833027 --- /dev/null +++ b/sources/plugins/maximize/lang/ms.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'ms', { | ||
6 | maximize: 'Maximize', // MISSING | ||
7 | minimize: 'Minimize' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/nb.js b/sources/plugins/maximize/lang/nb.js new file mode 100644 index 0000000..eb1d77d --- /dev/null +++ b/sources/plugins/maximize/lang/nb.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'nb', { | ||
6 | maximize: 'Maksimer', | ||
7 | minimize: 'Minimer' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/nl.js b/sources/plugins/maximize/lang/nl.js new file mode 100644 index 0000000..f1a126d --- /dev/null +++ b/sources/plugins/maximize/lang/nl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'nl', { | ||
6 | maximize: 'Maximaliseren', | ||
7 | minimize: 'Minimaliseren' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/no.js b/sources/plugins/maximize/lang/no.js new file mode 100644 index 0000000..ac8fc85 --- /dev/null +++ b/sources/plugins/maximize/lang/no.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'no', { | ||
6 | maximize: 'Maksimer', | ||
7 | minimize: 'Minimer' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/pl.js b/sources/plugins/maximize/lang/pl.js new file mode 100644 index 0000000..65db8f1 --- /dev/null +++ b/sources/plugins/maximize/lang/pl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'pl', { | ||
6 | maximize: 'Maksymalizuj', | ||
7 | minimize: 'Minimalizuj' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/pt-br.js b/sources/plugins/maximize/lang/pt-br.js new file mode 100644 index 0000000..1da2b5e --- /dev/null +++ b/sources/plugins/maximize/lang/pt-br.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'pt-br', { | ||
6 | maximize: 'Maximizar', | ||
7 | minimize: 'Minimize' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/pt.js b/sources/plugins/maximize/lang/pt.js new file mode 100644 index 0000000..a1cc282 --- /dev/null +++ b/sources/plugins/maximize/lang/pt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'pt', { | ||
6 | maximize: 'Maximizar', | ||
7 | minimize: 'Minimizar' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/ro.js b/sources/plugins/maximize/lang/ro.js new file mode 100644 index 0000000..4781ec3 --- /dev/null +++ b/sources/plugins/maximize/lang/ro.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'ro', { | ||
6 | maximize: 'Mărește', | ||
7 | minimize: 'Micșorează' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/ru.js b/sources/plugins/maximize/lang/ru.js new file mode 100644 index 0000000..6efab0b --- /dev/null +++ b/sources/plugins/maximize/lang/ru.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'ru', { | ||
6 | maximize: 'Развернуть', | ||
7 | minimize: 'Свернуть' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/si.js b/sources/plugins/maximize/lang/si.js new file mode 100644 index 0000000..671ecdd --- /dev/null +++ b/sources/plugins/maximize/lang/si.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'si', { | ||
6 | maximize: 'විශාල කිරීම', | ||
7 | minimize: 'කුඩා කිරීම' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/sk.js b/sources/plugins/maximize/lang/sk.js new file mode 100644 index 0000000..c88e390 --- /dev/null +++ b/sources/plugins/maximize/lang/sk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'sk', { | ||
6 | maximize: 'Maximalizovať', | ||
7 | minimize: 'Minimalizovať' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/sl.js b/sources/plugins/maximize/lang/sl.js new file mode 100644 index 0000000..90187c5 --- /dev/null +++ b/sources/plugins/maximize/lang/sl.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'sl', { | ||
6 | maximize: 'Maksimiraj', | ||
7 | minimize: 'Minimiraj' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/sq.js b/sources/plugins/maximize/lang/sq.js new file mode 100644 index 0000000..4354dba --- /dev/null +++ b/sources/plugins/maximize/lang/sq.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'sq', { | ||
6 | maximize: 'Zmadho', | ||
7 | minimize: 'Zvogëlo' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/sr-latn.js b/sources/plugins/maximize/lang/sr-latn.js new file mode 100644 index 0000000..f472eed --- /dev/null +++ b/sources/plugins/maximize/lang/sr-latn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'sr-latn', { | ||
6 | maximize: 'Maximize', // MISSING | ||
7 | minimize: 'Minimize' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/sr.js b/sources/plugins/maximize/lang/sr.js new file mode 100644 index 0000000..70550ee --- /dev/null +++ b/sources/plugins/maximize/lang/sr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'sr', { | ||
6 | maximize: 'Maximize', // MISSING | ||
7 | minimize: 'Minimize' // MISSING | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/sv.js b/sources/plugins/maximize/lang/sv.js new file mode 100644 index 0000000..3ba63b5 --- /dev/null +++ b/sources/plugins/maximize/lang/sv.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'sv', { | ||
6 | maximize: 'Maximera', | ||
7 | minimize: 'Minimera' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/th.js b/sources/plugins/maximize/lang/th.js new file mode 100644 index 0000000..4b74871 --- /dev/null +++ b/sources/plugins/maximize/lang/th.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'th', { | ||
6 | maximize: 'ขยายใหญ่', | ||
7 | minimize: 'ย่อขนาด' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/tr.js b/sources/plugins/maximize/lang/tr.js new file mode 100644 index 0000000..0aafb3d --- /dev/null +++ b/sources/plugins/maximize/lang/tr.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'tr', { | ||
6 | maximize: 'Büyült', | ||
7 | minimize: 'Küçült' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/tt.js b/sources/plugins/maximize/lang/tt.js new file mode 100644 index 0000000..a8ec7d6 --- /dev/null +++ b/sources/plugins/maximize/lang/tt.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'tt', { | ||
6 | maximize: 'Зурайту', | ||
7 | minimize: 'Кечерәйтү' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/ug.js b/sources/plugins/maximize/lang/ug.js new file mode 100644 index 0000000..0e874d6 --- /dev/null +++ b/sources/plugins/maximize/lang/ug.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'ug', { | ||
6 | maximize: 'چوڭايت', | ||
7 | minimize: 'كىچىكلەت' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/uk.js b/sources/plugins/maximize/lang/uk.js new file mode 100644 index 0000000..85a3215 --- /dev/null +++ b/sources/plugins/maximize/lang/uk.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'uk', { | ||
6 | maximize: 'Максимізувати', | ||
7 | minimize: 'Мінімізувати' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/vi.js b/sources/plugins/maximize/lang/vi.js new file mode 100644 index 0000000..0fd29d5 --- /dev/null +++ b/sources/plugins/maximize/lang/vi.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'vi', { | ||
6 | maximize: 'Phóng to tối đa', | ||
7 | minimize: 'Thu nhỏ' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/zh-cn.js b/sources/plugins/maximize/lang/zh-cn.js new file mode 100644 index 0000000..7e63c74 --- /dev/null +++ b/sources/plugins/maximize/lang/zh-cn.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'zh-cn', { | ||
6 | maximize: '全屏', | ||
7 | minimize: '最小化' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/lang/zh.js b/sources/plugins/maximize/lang/zh.js new file mode 100644 index 0000000..6d633c4 --- /dev/null +++ b/sources/plugins/maximize/lang/zh.js | |||
@@ -0,0 +1,8 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'maximize', 'zh', { | ||
6 | maximize: '最大化', | ||
7 | minimize: '最小化' | ||
8 | } ); | ||
diff --git a/sources/plugins/maximize/plugin.js b/sources/plugins/maximize/plugin.js new file mode 100644 index 0000000..ae621f1 --- /dev/null +++ b/sources/plugins/maximize/plugin.js | |||
@@ -0,0 +1,314 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | function protectFormStyles( formElement ) { | ||
8 | if ( !formElement || formElement.type != CKEDITOR.NODE_ELEMENT || formElement.getName() != 'form' ) | ||
9 | return []; | ||
10 | |||
11 | var hijackRecord = [], | ||
12 | hijackNames = [ 'style', 'className' ]; | ||
13 | for ( var i = 0; i < hijackNames.length; i++ ) { | ||
14 | var name = hijackNames[ i ]; | ||
15 | var $node = formElement.$.elements.namedItem( name ); | ||
16 | if ( $node ) { | ||
17 | var hijackNode = new CKEDITOR.dom.element( $node ); | ||
18 | hijackRecord.push( [ hijackNode, hijackNode.nextSibling ] ); | ||
19 | hijackNode.remove(); | ||
20 | } | ||
21 | } | ||
22 | |||
23 | return hijackRecord; | ||
24 | } | ||
25 | |||
26 | function restoreFormStyles( formElement, hijackRecord ) { | ||
27 | if ( !formElement || formElement.type != CKEDITOR.NODE_ELEMENT || formElement.getName() != 'form' ) | ||
28 | return; | ||
29 | |||
30 | if ( hijackRecord.length > 0 ) { | ||
31 | for ( var i = hijackRecord.length - 1; i >= 0; i-- ) { | ||
32 | var node = hijackRecord[ i ][ 0 ]; | ||
33 | var sibling = hijackRecord[ i ][ 1 ]; | ||
34 | if ( sibling ) | ||
35 | node.insertBefore( sibling ); | ||
36 | else | ||
37 | node.appendTo( formElement ); | ||
38 | } | ||
39 | } | ||
40 | } | ||
41 | |||
42 | function saveStyles( element, isInsideEditor ) { | ||
43 | var data = protectFormStyles( element ); | ||
44 | var retval = {}; | ||
45 | |||
46 | var $element = element.$; | ||
47 | |||
48 | if ( !isInsideEditor ) { | ||
49 | retval[ 'class' ] = $element.className || ''; | ||
50 | $element.className = ''; | ||
51 | } | ||
52 | |||
53 | retval.inline = $element.style.cssText || ''; | ||
54 | if ( !isInsideEditor ) // Reset any external styles that might interfere. (#2474) | ||
55 | $element.style.cssText = 'position: static; overflow: visible'; | ||
56 | |||
57 | restoreFormStyles( data ); | ||
58 | return retval; | ||
59 | } | ||
60 | |||
61 | function restoreStyles( element, savedStyles ) { | ||
62 | var data = protectFormStyles( element ); | ||
63 | var $element = element.$; | ||
64 | if ( 'class' in savedStyles ) | ||
65 | $element.className = savedStyles[ 'class' ]; | ||
66 | if ( 'inline' in savedStyles ) | ||
67 | $element.style.cssText = savedStyles.inline; | ||
68 | restoreFormStyles( data ); | ||
69 | } | ||
70 | |||
71 | function refreshCursor( editor ) { | ||
72 | if ( editor.editable().isInline() ) | ||
73 | return; | ||
74 | |||
75 | // Refresh all editor instances on the page (#5724). | ||
76 | var all = CKEDITOR.instances; | ||
77 | for ( var i in all ) { | ||
78 | var one = all[ i ]; | ||
79 | if ( one.mode == 'wysiwyg' && !one.readOnly ) { | ||
80 | var body = one.document.getBody(); | ||
81 | // Refresh 'contentEditable' otherwise | ||
82 | // DOM lifting breaks design mode. (#5560) | ||
83 | body.setAttribute( 'contentEditable', false ); | ||
84 | body.setAttribute( 'contentEditable', true ); | ||
85 | } | ||
86 | } | ||
87 | |||
88 | if ( editor.editable().hasFocus ) { | ||
89 | editor.toolbox.focus(); | ||
90 | editor.focus(); | ||
91 | } | ||
92 | } | ||
93 | |||
94 | CKEDITOR.plugins.add( 'maximize', { | ||
95 | // jscs:disable maximumLineLength | ||
96 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
97 | // jscs:enable maximumLineLength | ||
98 | icons: 'maximize', // %REMOVE_LINE_CORE% | ||
99 | hidpi: true, // %REMOVE_LINE_CORE% | ||
100 | init: function( editor ) { | ||
101 | // Maximize plugin isn't available in inline mode yet. | ||
102 | if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ) | ||
103 | return; | ||
104 | |||
105 | var lang = editor.lang; | ||
106 | var mainDocument = CKEDITOR.document, | ||
107 | mainWindow = mainDocument.getWindow(); | ||
108 | |||
109 | // Saved selection and scroll position for the editing area. | ||
110 | var savedSelection, savedScroll; | ||
111 | |||
112 | // Saved scroll position for the outer window. | ||
113 | var outerScroll; | ||
114 | |||
115 | // Saved resize handler function. | ||
116 | function resizeHandler() { | ||
117 | var viewPaneSize = mainWindow.getViewPaneSize(); | ||
118 | editor.resize( viewPaneSize.width, viewPaneSize.height, null, true ); | ||
119 | } | ||
120 | |||
121 | // Retain state after mode switches. | ||
122 | var savedState = CKEDITOR.TRISTATE_OFF; | ||
123 | |||
124 | editor.addCommand( 'maximize', { | ||
125 | // Disabled on iOS (#8307). | ||
126 | modes: { wysiwyg: !CKEDITOR.env.iOS, source: !CKEDITOR.env.iOS }, | ||
127 | readOnly: 1, | ||
128 | editorFocus: false, | ||
129 | exec: function() { | ||
130 | var container = editor.container.getFirst( function( node ) { | ||
131 | return node.type == CKEDITOR.NODE_ELEMENT && node.hasClass( 'cke_inner' ); | ||
132 | } ); | ||
133 | var contents = editor.ui.space( 'contents' ); | ||
134 | |||
135 | // Save current selection and scroll position in editing area. | ||
136 | if ( editor.mode == 'wysiwyg' ) { | ||
137 | var selection = editor.getSelection(); | ||
138 | savedSelection = selection && selection.getRanges(); | ||
139 | savedScroll = mainWindow.getScrollPosition(); | ||
140 | } else { | ||
141 | var $textarea = editor.editable().$; | ||
142 | savedSelection = !CKEDITOR.env.ie && [ $textarea.selectionStart, $textarea.selectionEnd ]; | ||
143 | savedScroll = [ $textarea.scrollLeft, $textarea.scrollTop ]; | ||
144 | } | ||
145 | |||
146 | // Go fullscreen if the state is off. | ||
147 | if ( this.state == CKEDITOR.TRISTATE_OFF ) { | ||
148 | // Add event handler for resizing. | ||
149 | mainWindow.on( 'resize', resizeHandler ); | ||
150 | |||
151 | // Save the scroll bar position. | ||
152 | outerScroll = mainWindow.getScrollPosition(); | ||
153 | |||
154 | // Save and reset the styles for the entire node tree. | ||
155 | var currentNode = editor.container; | ||
156 | while ( ( currentNode = currentNode.getParent() ) ) { | ||
157 | currentNode.setCustomData( 'maximize_saved_styles', saveStyles( currentNode ) ); | ||
158 | // Show under floatpanels (-1) and context menu (-2). | ||
159 | currentNode.setStyle( 'z-index', editor.config.baseFloatZIndex - 5 ); | ||
160 | } | ||
161 | contents.setCustomData( 'maximize_saved_styles', saveStyles( contents, true ) ); | ||
162 | container.setCustomData( 'maximize_saved_styles', saveStyles( container, true ) ); | ||
163 | |||
164 | // Hide scroll bars. | ||
165 | var styles = { | ||
166 | overflow: CKEDITOR.env.webkit ? '' : 'hidden', // #6896 | ||
167 | width: 0, | ||
168 | height: 0 | ||
169 | }; | ||
170 | |||
171 | mainDocument.getDocumentElement().setStyles( styles ); | ||
172 | !CKEDITOR.env.gecko && mainDocument.getDocumentElement().setStyle( 'position', 'fixed' ); | ||
173 | !( CKEDITOR.env.gecko && CKEDITOR.env.quirks ) && mainDocument.getBody().setStyles( styles ); | ||
174 | |||
175 | // Scroll to the top left (IE needs some time for it - #4923). | ||
176 | CKEDITOR.env.ie ? setTimeout( function() { | ||
177 | mainWindow.$.scrollTo( 0, 0 ); | ||
178 | }, 0 ) : mainWindow.$.scrollTo( 0, 0 ); | ||
179 | |||
180 | // Resize and move to top left. | ||
181 | // Special treatment for FF Quirks (#7284) | ||
182 | container.setStyle( 'position', CKEDITOR.env.gecko && CKEDITOR.env.quirks ? 'fixed' : 'absolute' ); | ||
183 | container.$.offsetLeft; // SAFARI BUG: See #2066. | ||
184 | container.setStyles( { | ||
185 | // Show under floatpanels (-1) and context menu (-2). | ||
186 | 'z-index': editor.config.baseFloatZIndex - 5, | ||
187 | left: '0px', | ||
188 | top: '0px' | ||
189 | } ); | ||
190 | |||
191 | // Add cke_maximized class before resize handle since that will change things sizes (#5580) | ||
192 | container.addClass( 'cke_maximized' ); | ||
193 | |||
194 | resizeHandler(); | ||
195 | |||
196 | // Still not top left? Fix it. (Bug #174) | ||
197 | var offset = container.getDocumentPosition(); | ||
198 | container.setStyles( { | ||
199 | left: ( -1 * offset.x ) + 'px', | ||
200 | top: ( -1 * offset.y ) + 'px' | ||
201 | } ); | ||
202 | |||
203 | // Fixing positioning editor chrome in Firefox break design mode. (#5149) | ||
204 | CKEDITOR.env.gecko && refreshCursor( editor ); | ||
205 | } | ||
206 | // Restore from fullscreen if the state is on. | ||
207 | else if ( this.state == CKEDITOR.TRISTATE_ON ) { | ||
208 | // Remove event handler for resizing. | ||
209 | mainWindow.removeListener( 'resize', resizeHandler ); | ||
210 | |||
211 | // Restore CSS styles for the entire node tree. | ||
212 | var editorElements = [ contents, container ]; | ||
213 | for ( var i = 0; i < editorElements.length; i++ ) { | ||
214 | restoreStyles( editorElements[ i ], editorElements[ i ].getCustomData( 'maximize_saved_styles' ) ); | ||
215 | editorElements[ i ].removeCustomData( 'maximize_saved_styles' ); | ||
216 | } | ||
217 | |||
218 | currentNode = editor.container; | ||
219 | while ( ( currentNode = currentNode.getParent() ) ) { | ||
220 | restoreStyles( currentNode, currentNode.getCustomData( 'maximize_saved_styles' ) ); | ||
221 | currentNode.removeCustomData( 'maximize_saved_styles' ); | ||
222 | } | ||
223 | |||
224 | // Restore the window scroll position. | ||
225 | CKEDITOR.env.ie ? setTimeout( function() { | ||
226 | mainWindow.$.scrollTo( outerScroll.x, outerScroll.y ); | ||
227 | }, 0 ) : mainWindow.$.scrollTo( outerScroll.x, outerScroll.y ); | ||
228 | |||
229 | // Remove cke_maximized class. | ||
230 | container.removeClass( 'cke_maximized' ); | ||
231 | |||
232 | // Webkit requires a re-layout on editor chrome. (#6695) | ||
233 | if ( CKEDITOR.env.webkit ) { | ||
234 | container.setStyle( 'display', 'inline' ); | ||
235 | setTimeout( function() { | ||
236 | container.setStyle( 'display', 'block' ); | ||
237 | }, 0 ); | ||
238 | } | ||
239 | |||
240 | // Emit a resize event, because this time the size is modified in | ||
241 | // restoreStyles. | ||
242 | editor.fire( 'resize', { | ||
243 | outerHeight: editor.container.$.offsetHeight, | ||
244 | contentsHeight: contents.$.offsetHeight, | ||
245 | outerWidth: editor.container.$.offsetWidth | ||
246 | } ); | ||
247 | } | ||
248 | |||
249 | this.toggleState(); | ||
250 | |||
251 | // Toggle button label. | ||
252 | var button = this.uiItems[ 0 ]; | ||
253 | // Only try to change the button if it exists (#6166) | ||
254 | if ( button ) { | ||
255 | var label = ( this.state == CKEDITOR.TRISTATE_OFF ) ? lang.maximize.maximize : lang.maximize.minimize; | ||
256 | var buttonNode = CKEDITOR.document.getById( button._.id ); | ||
257 | buttonNode.getChild( 1 ).setHtml( label ); | ||
258 | buttonNode.setAttribute( 'title', label ); | ||
259 | buttonNode.setAttribute( 'href', 'javascript:void("' + label + '");' ); // jshint ignore:line | ||
260 | } | ||
261 | |||
262 | // Restore selection and scroll position in editing area. | ||
263 | if ( editor.mode == 'wysiwyg' ) { | ||
264 | if ( savedSelection ) { | ||
265 | // Fixing positioning editor chrome in Firefox break design mode. (#5149) | ||
266 | CKEDITOR.env.gecko && refreshCursor( editor ); | ||
267 | |||
268 | editor.getSelection().selectRanges( savedSelection ); | ||
269 | var element = editor.getSelection().getStartElement(); | ||
270 | element && element.scrollIntoView( true ); | ||
271 | } else { | ||
272 | mainWindow.$.scrollTo( savedScroll.x, savedScroll.y ); | ||
273 | } | ||
274 | } else { | ||
275 | if ( savedSelection ) { | ||
276 | $textarea.selectionStart = savedSelection[ 0 ]; | ||
277 | $textarea.selectionEnd = savedSelection[ 1 ]; | ||
278 | } | ||
279 | $textarea.scrollLeft = savedScroll[ 0 ]; | ||
280 | $textarea.scrollTop = savedScroll[ 1 ]; | ||
281 | } | ||
282 | |||
283 | savedSelection = savedScroll = null; | ||
284 | savedState = this.state; | ||
285 | |||
286 | editor.fire( 'maximize', this.state ); | ||
287 | }, | ||
288 | canUndo: false | ||
289 | } ); | ||
290 | |||
291 | editor.ui.addButton && editor.ui.addButton( 'Maximize', { | ||
292 | label: lang.maximize.maximize, | ||
293 | command: 'maximize', | ||
294 | toolbar: 'tools,10' | ||
295 | } ); | ||
296 | |||
297 | // Restore the command state after mode change, unless it has been changed to disabled (#6467) | ||
298 | editor.on( 'mode', function() { | ||
299 | var command = editor.getCommand( 'maximize' ); | ||
300 | command.setState( command.state == CKEDITOR.TRISTATE_DISABLED ? CKEDITOR.TRISTATE_DISABLED : savedState ); | ||
301 | }, null, null, 100 ); | ||
302 | } | ||
303 | } ); | ||
304 | } )(); | ||
305 | |||
306 | /** | ||
307 | * Event fired when the maximize command is called. | ||
308 | * It also indicates whether an editor is maximized or not. | ||
309 | * | ||
310 | * @event maximize | ||
311 | * @member CKEDITOR.editor | ||
312 | * @param {CKEDITOR.editor} editor This editor instance. | ||
313 | * @param {Number} data Current state of the command. See {@link CKEDITOR#TRISTATE_ON} and {@link CKEDITOR#TRISTATE_OFF}. | ||
314 | */ | ||
diff --git a/sources/plugins/menu/plugin.js b/sources/plugins/menu/plugin.js new file mode 100644 index 0000000..f5de4f9 --- /dev/null +++ b/sources/plugins/menu/plugin.js | |||
@@ -0,0 +1,545 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.add( 'menu', { | ||
7 | requires: 'floatpanel', | ||
8 | |||
9 | beforeInit: function( editor ) { | ||
10 | var groups = editor.config.menu_groups.split( ',' ), | ||
11 | groupsOrder = editor._.menuGroups = {}, | ||
12 | menuItems = editor._.menuItems = {}; | ||
13 | |||
14 | for ( var i = 0; i < groups.length; i++ ) | ||
15 | groupsOrder[ groups[ i ] ] = i + 1; | ||
16 | |||
17 | /** | ||
18 | * Registers an item group to the editor context menu in order to make it | ||
19 | * possible to associate it with menu items later. | ||
20 | * | ||
21 | * @param {String} name Specify a group name. | ||
22 | * @param {Number} [order=100] Define the display sequence of this group | ||
23 | * inside the menu. A smaller value gets displayed first. | ||
24 | * @member CKEDITOR.editor | ||
25 | */ | ||
26 | editor.addMenuGroup = function( name, order ) { | ||
27 | groupsOrder[ name ] = order || 100; | ||
28 | }; | ||
29 | |||
30 | /** | ||
31 | * Adds an item from the specified definition to the editor context menu. | ||
32 | * | ||
33 | * @method | ||
34 | * @param {String} name The menu item name. | ||
35 | * @param {Object} definition The menu item definition. | ||
36 | * @member CKEDITOR.editor | ||
37 | */ | ||
38 | editor.addMenuItem = function( name, definition ) { | ||
39 | if ( groupsOrder[ definition.group ] ) | ||
40 | menuItems[ name ] = new CKEDITOR.menuItem( this, name, definition ); | ||
41 | }; | ||
42 | |||
43 | /** | ||
44 | * Adds one or more items from the specified definition array to the editor context menu. | ||
45 | * | ||
46 | * @method | ||
47 | * @param {Array} definitions List of definitions for each menu item as if {@link #addMenuItem} is called. | ||
48 | * @member CKEDITOR.editor | ||
49 | */ | ||
50 | editor.addMenuItems = function( definitions ) { | ||
51 | for ( var itemName in definitions ) { | ||
52 | this.addMenuItem( itemName, definitions[ itemName ] ); | ||
53 | } | ||
54 | }; | ||
55 | |||
56 | /** | ||
57 | * Retrieves a particular menu item definition from the editor context menu. | ||
58 | * | ||
59 | * @method | ||
60 | * @param {String} name The name of the desired menu item. | ||
61 | * @returns {Object} | ||
62 | * @member CKEDITOR.editor | ||
63 | */ | ||
64 | editor.getMenuItem = function( name ) { | ||
65 | return menuItems[ name ]; | ||
66 | }; | ||
67 | |||
68 | /** | ||
69 | * Removes a particular menu item added before from the editor context menu. | ||
70 | * | ||
71 | * @since 3.6.1 | ||
72 | * @method | ||
73 | * @param {String} name The name of the desired menu item. | ||
74 | * @member CKEDITOR.editor | ||
75 | */ | ||
76 | editor.removeMenuItem = function( name ) { | ||
77 | delete menuItems[ name ]; | ||
78 | }; | ||
79 | } | ||
80 | } ); | ||
81 | |||
82 | ( function() { | ||
83 | var menuItemSource = '<span class="cke_menuitem">' + | ||
84 | '<a id="{id}"' + | ||
85 | ' class="cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href="{href}"' + | ||
86 | ' title="{title}"' + | ||
87 | ' tabindex="-1"' + | ||
88 | '_cke_focus=1' + | ||
89 | ' hidefocus="true"' + | ||
90 | ' role="{role}"' + | ||
91 | ' aria-haspopup="{hasPopup}"' + | ||
92 | ' aria-disabled="{disabled}"' + | ||
93 | ' {ariaChecked}'; | ||
94 | |||
95 | // Some browsers don't cancel key events in the keydown but in the | ||
96 | // keypress. | ||
97 | // TODO: Check if really needed. | ||
98 | if ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) | ||
99 | menuItemSource += ' onkeypress="return false;"'; | ||
100 | |||
101 | // With Firefox, we need to force the button to redraw, otherwise it | ||
102 | // will remain in the focus state. | ||
103 | if ( CKEDITOR.env.gecko ) | ||
104 | menuItemSource += ' onblur="this.style.cssText = this.style.cssText;"'; | ||
105 | |||
106 | // #188 | ||
107 | menuItemSource += ' onmouseover="CKEDITOR.tools.callFunction({hoverFn},{index});"' + | ||
108 | ' onmouseout="CKEDITOR.tools.callFunction({moveOutFn},{index});" ' + | ||
109 | ( CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick' ) + | ||
110 | '="CKEDITOR.tools.callFunction({clickFn},{index}); return false;"' + | ||
111 | '>'; | ||
112 | |||
113 | menuItemSource += | ||
114 | '<span class="cke_menubutton_inner">' + | ||
115 | '<span class="cke_menubutton_icon">' + | ||
116 | '<span class="cke_button_icon cke_button__{iconName}_icon" style="{iconStyle}"></span>' + | ||
117 | '</span>' + | ||
118 | '<span class="cke_menubutton_label">' + | ||
119 | '{label}' + | ||
120 | '</span>' + | ||
121 | '{arrowHtml}' + | ||
122 | '</span>' + | ||
123 | '</a></span>'; | ||
124 | |||
125 | var menuArrowSource = '<span class="cke_menuarrow">' + | ||
126 | '<span>{label}</span>' + | ||
127 | '</span>'; | ||
128 | |||
129 | var menuItemTpl = CKEDITOR.addTemplate( 'menuItem', menuItemSource ), | ||
130 | menuArrowTpl = CKEDITOR.addTemplate( 'menuArrow', menuArrowSource ); | ||
131 | |||
132 | /** | ||
133 | * @class | ||
134 | * @todo | ||
135 | */ | ||
136 | CKEDITOR.menu = CKEDITOR.tools.createClass( { | ||
137 | /** | ||
138 | * @constructor | ||
139 | */ | ||
140 | $: function( editor, definition ) { | ||
141 | definition = this._.definition = definition || {}; | ||
142 | this.id = CKEDITOR.tools.getNextId(); | ||
143 | |||
144 | this.editor = editor; | ||
145 | this.items = []; | ||
146 | this._.listeners = []; | ||
147 | |||
148 | this._.level = definition.level || 1; | ||
149 | |||
150 | var panelDefinition = CKEDITOR.tools.extend( {}, definition.panel, { | ||
151 | css: [ CKEDITOR.skin.getPath( 'editor' ) ], | ||
152 | level: this._.level - 1, | ||
153 | block: {} | ||
154 | } ); | ||
155 | |||
156 | var attrs = panelDefinition.block.attributes = ( panelDefinition.attributes || {} ); | ||
157 | // Provide default role of 'menu'. | ||
158 | !attrs.role && ( attrs.role = 'menu' ); | ||
159 | this._.panelDefinition = panelDefinition; | ||
160 | }, | ||
161 | |||
162 | _: { | ||
163 | onShow: function() { | ||
164 | var selection = this.editor.getSelection(), | ||
165 | start = selection && selection.getStartElement(), | ||
166 | path = this.editor.elementPath(), | ||
167 | listeners = this._.listeners; | ||
168 | |||
169 | this.removeAll(); | ||
170 | // Call all listeners, filling the list of items to be displayed. | ||
171 | for ( var i = 0; i < listeners.length; i++ ) { | ||
172 | var listenerItems = listeners[ i ]( start, selection, path ); | ||
173 | |||
174 | if ( listenerItems ) { | ||
175 | for ( var itemName in listenerItems ) { | ||
176 | var item = this.editor.getMenuItem( itemName ); | ||
177 | |||
178 | if ( item && ( !item.command || this.editor.getCommand( item.command ).state ) ) { | ||
179 | item.state = listenerItems[ itemName ]; | ||
180 | this.add( item ); | ||
181 | } | ||
182 | } | ||
183 | } | ||
184 | } | ||
185 | }, | ||
186 | |||
187 | onClick: function( item ) { | ||
188 | this.hide(); | ||
189 | |||
190 | if ( item.onClick ) | ||
191 | item.onClick(); | ||
192 | else if ( item.command ) | ||
193 | this.editor.execCommand( item.command ); | ||
194 | }, | ||
195 | |||
196 | onEscape: function( keystroke ) { | ||
197 | var parent = this.parent; | ||
198 | // 1. If it's sub-menu, close it, with focus restored on this. | ||
199 | // 2. In case of a top-menu, close it, with focus returned to page. | ||
200 | if ( parent ) | ||
201 | parent._.panel.hideChild( 1 ); | ||
202 | else if ( keystroke == 27 ) | ||
203 | this.hide( 1 ); | ||
204 | |||
205 | return false; | ||
206 | }, | ||
207 | |||
208 | onHide: function() { | ||
209 | this.onHide && this.onHide(); | ||
210 | }, | ||
211 | |||
212 | showSubMenu: function( index ) { | ||
213 | var menu = this._.subMenu, | ||
214 | item = this.items[ index ], | ||
215 | subItemDefs = item.getItems && item.getItems(); | ||
216 | |||
217 | // If this item has no subitems, we just hide the submenu, if | ||
218 | // available, and return back. | ||
219 | if ( !subItemDefs ) { | ||
220 | // Hide sub menu with focus returned. | ||
221 | this._.panel.hideChild( 1 ); | ||
222 | return; | ||
223 | } | ||
224 | |||
225 | // Create the submenu, if not available, or clean the existing | ||
226 | // one. | ||
227 | if ( menu ) | ||
228 | menu.removeAll(); | ||
229 | else { | ||
230 | menu = this._.subMenu = new CKEDITOR.menu( this.editor, CKEDITOR.tools.extend( {}, this._.definition, { level: this._.level + 1 }, true ) ); | ||
231 | menu.parent = this; | ||
232 | menu._.onClick = CKEDITOR.tools.bind( this._.onClick, this ); | ||
233 | } | ||
234 | |||
235 | // Add all submenu items to the menu. | ||
236 | for ( var subItemName in subItemDefs ) { | ||
237 | var subItem = this.editor.getMenuItem( subItemName ); | ||
238 | if ( subItem ) { | ||
239 | subItem.state = subItemDefs[ subItemName ]; | ||
240 | menu.add( subItem ); | ||
241 | } | ||
242 | } | ||
243 | |||
244 | // Get the element representing the current item. | ||
245 | var element = this._.panel.getBlock( this.id ).element.getDocument().getById( this.id + String( index ) ); | ||
246 | |||
247 | // Show the submenu. | ||
248 | // This timeout is needed to give time for the sub-menu get | ||
249 | // focus when JAWS is running. (#9844) | ||
250 | setTimeout( function() { | ||
251 | menu.show( element, 2 ); | ||
252 | }, 0 ); | ||
253 | } | ||
254 | }, | ||
255 | |||
256 | proto: { | ||
257 | /** | ||
258 | * Adds an item. | ||
259 | * | ||
260 | * @param item | ||
261 | */ | ||
262 | add: function( item ) { | ||
263 | // Later we may sort the items, but Array#sort is not stable in | ||
264 | // some browsers, here we're forcing the original sequence with | ||
265 | // 'order' attribute if it hasn't been assigned. (#3868) | ||
266 | if ( !item.order ) | ||
267 | item.order = this.items.length; | ||
268 | |||
269 | this.items.push( item ); | ||
270 | }, | ||
271 | |||
272 | /** | ||
273 | * Removes all items. | ||
274 | */ | ||
275 | removeAll: function() { | ||
276 | this.items = []; | ||
277 | }, | ||
278 | |||
279 | /** | ||
280 | * Shows the menu in given location. | ||
281 | * | ||
282 | * @param {CKEDITOR.dom.element} offsetParent | ||
283 | * @param {Number} [corner] | ||
284 | * @param {Number} [offsetX] | ||
285 | * @param {Number} [offsetY] | ||
286 | */ | ||
287 | show: function( offsetParent, corner, offsetX, offsetY ) { | ||
288 | // Not for sub menu. | ||
289 | if ( !this.parent ) { | ||
290 | this._.onShow(); | ||
291 | // Don't menu with zero items. | ||
292 | if ( !this.items.length ) | ||
293 | return; | ||
294 | } | ||
295 | |||
296 | corner = corner || ( this.editor.lang.dir == 'rtl' ? 2 : 1 ); | ||
297 | |||
298 | var items = this.items, | ||
299 | editor = this.editor, | ||
300 | panel = this._.panel, | ||
301 | element = this._.element; | ||
302 | |||
303 | // Create the floating panel for this menu. | ||
304 | if ( !panel ) { | ||
305 | panel = this._.panel = new CKEDITOR.ui.floatPanel( this.editor, CKEDITOR.document.getBody(), this._.panelDefinition, this._.level ); | ||
306 | |||
307 | panel.onEscape = CKEDITOR.tools.bind( function( keystroke ) { | ||
308 | if ( this._.onEscape( keystroke ) === false ) | ||
309 | return false; | ||
310 | }, this ); | ||
311 | |||
312 | panel.onShow = function() { | ||
313 | // Menu need CSS resets, compensate class name. | ||
314 | var holder = panel._.panel.getHolderElement(); | ||
315 | holder.getParent().addClass( 'cke' ).addClass( 'cke_reset_all' ); | ||
316 | }; | ||
317 | |||
318 | panel.onHide = CKEDITOR.tools.bind( function() { | ||
319 | this._.onHide && this._.onHide(); | ||
320 | }, this ); | ||
321 | |||
322 | // Create an autosize block inside the panel. | ||
323 | var block = panel.addBlock( this.id, this._.panelDefinition.block ); | ||
324 | block.autoSize = true; | ||
325 | |||
326 | var keys = block.keys; | ||
327 | keys[ 40 ] = 'next'; // ARROW-DOWN | ||
328 | keys[ 9 ] = 'next'; // TAB | ||
329 | keys[ 38 ] = 'prev'; // ARROW-UP | ||
330 | keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB | ||
331 | keys[ ( editor.lang.dir == 'rtl' ? 37 : 39 ) ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // ARROW-RIGHT/ARROW-LEFT(rtl) | ||
332 | keys[ 32 ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // SPACE | ||
333 | CKEDITOR.env.ie && ( keys[ 13 ] = 'mouseup' ); // Manage ENTER, since onclick is blocked in IE (#8041). | ||
334 | |||
335 | element = this._.element = block.element; | ||
336 | |||
337 | var elementDoc = element.getDocument(); | ||
338 | elementDoc.getBody().setStyle( 'overflow', 'hidden' ); | ||
339 | elementDoc.getElementsByTag( 'html' ).getItem( 0 ).setStyle( 'overflow', 'hidden' ); | ||
340 | |||
341 | this._.itemOverFn = CKEDITOR.tools.addFunction( function( index ) { | ||
342 | clearTimeout( this._.showSubTimeout ); | ||
343 | this._.showSubTimeout = CKEDITOR.tools.setTimeout( this._.showSubMenu, editor.config.menu_subMenuDelay || 400, this, [ index ] ); | ||
344 | }, this ); | ||
345 | |||
346 | this._.itemOutFn = CKEDITOR.tools.addFunction( function() { | ||
347 | clearTimeout( this._.showSubTimeout ); | ||
348 | }, this ); | ||
349 | |||
350 | this._.itemClickFn = CKEDITOR.tools.addFunction( function( index ) { | ||
351 | var item = this.items[ index ]; | ||
352 | |||
353 | if ( item.state == CKEDITOR.TRISTATE_DISABLED ) { | ||
354 | this.hide( 1 ); | ||
355 | return; | ||
356 | } | ||
357 | |||
358 | if ( item.getItems ) | ||
359 | this._.showSubMenu( index ); | ||
360 | else | ||
361 | this._.onClick( item ); | ||
362 | }, this ); | ||
363 | } | ||
364 | |||
365 | // Put the items in the right order. | ||
366 | sortItems( items ); | ||
367 | |||
368 | // Apply the editor mixed direction status to menu. | ||
369 | var path = editor.elementPath(), | ||
370 | mixedDirCls = ( path && path.direction() != editor.lang.dir ) ? ' cke_mixed_dir_content' : ''; | ||
371 | |||
372 | // Build the HTML that composes the menu and its items. | ||
373 | var output = [ '<div class="cke_menu' + mixedDirCls + '" role="presentation">' ]; | ||
374 | |||
375 | var length = items.length, | ||
376 | lastGroup = length && items[ 0 ].group; | ||
377 | |||
378 | for ( var i = 0; i < length; i++ ) { | ||
379 | var item = items[ i ]; | ||
380 | if ( lastGroup != item.group ) { | ||
381 | output.push( '<div class="cke_menuseparator" role="separator"></div>' ); | ||
382 | lastGroup = item.group; | ||
383 | } | ||
384 | |||
385 | item.render( this, i, output ); | ||
386 | } | ||
387 | |||
388 | output.push( '</div>' ); | ||
389 | |||
390 | // Inject the HTML inside the panel. | ||
391 | element.setHtml( output.join( '' ) ); | ||
392 | |||
393 | CKEDITOR.ui.fire( 'ready', this ); | ||
394 | |||
395 | // Show the panel. | ||
396 | if ( this.parent ) | ||
397 | this.parent._.panel.showAsChild( panel, this.id, offsetParent, corner, offsetX, offsetY ); | ||
398 | else | ||
399 | panel.showBlock( this.id, offsetParent, corner, offsetX, offsetY ); | ||
400 | |||
401 | editor.fire( 'menuShow', [ panel ] ); | ||
402 | }, | ||
403 | |||
404 | /** | ||
405 | * Adds a callback executed on opening the menu. Items | ||
406 | * returned by that callback are added to the menu. | ||
407 | * | ||
408 | * @param {Function} listenerFn | ||
409 | * @param {CKEDITOR.dom.element} listenerFn.startElement The selection start anchor element. | ||
410 | * @param {CKEDITOR.dom.selection} listenerFn.selection The current selection. | ||
411 | * @param {CKEDITOR.dom.elementPath} listenerFn.path The current elements path. | ||
412 | * @param listenerFn.return Object (`commandName` => `state`) of items that should be added to the menu. | ||
413 | */ | ||
414 | addListener: function( listenerFn ) { | ||
415 | this._.listeners.push( listenerFn ); | ||
416 | }, | ||
417 | |||
418 | /** | ||
419 | * Hides the menu. | ||
420 | * | ||
421 | * @param {Boolean} [returnFocus] | ||
422 | */ | ||
423 | hide: function( returnFocus ) { | ||
424 | this._.onHide && this._.onHide(); | ||
425 | this._.panel && this._.panel.hide( returnFocus ); | ||
426 | } | ||
427 | } | ||
428 | } ); | ||
429 | |||
430 | function sortItems( items ) { | ||
431 | items.sort( function( itemA, itemB ) { | ||
432 | if ( itemA.group < itemB.group ) | ||
433 | return -1; | ||
434 | else if ( itemA.group > itemB.group ) | ||
435 | return 1; | ||
436 | |||
437 | return itemA.order < itemB.order ? -1 : itemA.order > itemB.order ? 1 : 0; | ||
438 | } ); | ||
439 | } | ||
440 | |||
441 | /** | ||
442 | * @class | ||
443 | * @todo | ||
444 | */ | ||
445 | CKEDITOR.menuItem = CKEDITOR.tools.createClass( { | ||
446 | $: function( editor, name, definition ) { | ||
447 | CKEDITOR.tools.extend( this, definition, | ||
448 | // Defaults | ||
449 | { | ||
450 | order: 0, | ||
451 | className: 'cke_menubutton__' + name | ||
452 | } ); | ||
453 | |||
454 | // Transform the group name into its order number. | ||
455 | this.group = editor._.menuGroups[ this.group ]; | ||
456 | |||
457 | this.editor = editor; | ||
458 | this.name = name; | ||
459 | }, | ||
460 | |||
461 | proto: { | ||
462 | render: function( menu, index, output ) { | ||
463 | var id = menu.id + String( index ), | ||
464 | state = ( typeof this.state == 'undefined' ) ? CKEDITOR.TRISTATE_OFF : this.state, | ||
465 | ariaChecked = ''; | ||
466 | |||
467 | var stateName = state == CKEDITOR.TRISTATE_ON ? 'on' : state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' : 'off'; | ||
468 | |||
469 | if ( this.role in { menuitemcheckbox: 1, menuitemradio: 1 } ) | ||
470 | ariaChecked = ' aria-checked="' + ( state == CKEDITOR.TRISTATE_ON ? 'true' : 'false' ) + '"'; | ||
471 | |||
472 | var hasSubMenu = this.getItems; | ||
473 | // ltr: BLACK LEFT-POINTING POINTER | ||
474 | // rtl: BLACK RIGHT-POINTING POINTER | ||
475 | var arrowLabel = '&#' + ( this.editor.lang.dir == 'rtl' ? '9668' : '9658' ) + ';'; | ||
476 | |||
477 | var iconName = this.name; | ||
478 | if ( this.icon && !( /\./ ).test( this.icon ) ) | ||
479 | iconName = this.icon; | ||
480 | |||
481 | var params = { | ||
482 | id: id, | ||
483 | name: this.name, | ||
484 | iconName: iconName, | ||
485 | label: this.label, | ||
486 | cls: this.className || '', | ||
487 | state: stateName, | ||
488 | hasPopup: hasSubMenu ? 'true' : 'false', | ||
489 | disabled: state == CKEDITOR.TRISTATE_DISABLED, | ||
490 | title: this.label, | ||
491 | href: 'javascript:void(\'' + ( this.label || '' ).replace( "'" + '' ) + '\')', // jshint ignore:line | ||
492 | hoverFn: menu._.itemOverFn, | ||
493 | moveOutFn: menu._.itemOutFn, | ||
494 | clickFn: menu._.itemClickFn, | ||
495 | index: index, | ||
496 | iconStyle: CKEDITOR.skin.getIconStyle( iconName, ( this.editor.lang.dir == 'rtl' ), iconName == this.icon ? null : this.icon, this.iconOffset ), | ||
497 | arrowHtml: hasSubMenu ? menuArrowTpl.output( { label: arrowLabel } ) : '', | ||
498 | role: this.role ? this.role : 'menuitem', | ||
499 | ariaChecked: ariaChecked | ||
500 | }; | ||
501 | |||
502 | menuItemTpl.output( params, output ); | ||
503 | } | ||
504 | } | ||
505 | } ); | ||
506 | |||
507 | } )(); | ||
508 | |||
509 | |||
510 | /** | ||
511 | * The amount of time, in milliseconds, the editor waits before displaying submenu | ||
512 | * options when moving the mouse over options that contain submenus, like the | ||
513 | * "Cell Properties" entry for tables. | ||
514 | * | ||
515 | * // Remove the submenu delay. | ||
516 | * config.menu_subMenuDelay = 0; | ||
517 | * | ||
518 | * @cfg {Number} [menu_subMenuDelay=400] | ||
519 | * @member CKEDITOR.config | ||
520 | */ | ||
521 | |||
522 | /** | ||
523 | * Fired when a menu is shown. | ||
524 | * | ||
525 | * @event menuShow | ||
526 | * @member CKEDITOR.editor | ||
527 | * @param {CKEDITOR.editor} editor This editor instance. | ||
528 | * @param {CKEDITOR.ui.panel[]} data | ||
529 | */ | ||
530 | |||
531 | /** | ||
532 | * A comma separated list of items group names to be displayed in the context | ||
533 | * menu. The order of items will reflect the order specified in this list if | ||
534 | * no priority was defined in the groups. | ||
535 | * | ||
536 | * config.menu_groups = 'clipboard,table,anchor,link,image'; | ||
537 | * | ||
538 | * @cfg {String} [menu_groups=see source] | ||
539 | * @member CKEDITOR.config | ||
540 | */ | ||
541 | CKEDITOR.config.menu_groups = 'clipboard,' + | ||
542 | 'form,' + | ||
543 | 'tablecell,tablecellproperties,tablerow,tablecolumn,table,' + | ||
544 | 'anchor,link,image,flash,' + | ||
545 | 'checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div'; | ||
diff --git a/sources/plugins/panel/plugin.js b/sources/plugins/panel/plugin.js new file mode 100644 index 0000000..44129a9 --- /dev/null +++ b/sources/plugins/panel/plugin.js | |||
@@ -0,0 +1,403 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | CKEDITOR.plugins.add( 'panel', { | ||
8 | beforeInit: function( editor ) { | ||
9 | editor.ui.addHandler( CKEDITOR.UI_PANEL, CKEDITOR.ui.panel.handler ); | ||
10 | } | ||
11 | } ); | ||
12 | |||
13 | /** | ||
14 | * Panel UI element. | ||
15 | * | ||
16 | * @readonly | ||
17 | * @property {String} [='panel'] | ||
18 | * @member CKEDITOR | ||
19 | */ | ||
20 | CKEDITOR.UI_PANEL = 'panel'; | ||
21 | |||
22 | /** | ||
23 | * @class | ||
24 | * @constructor Creates a panel class instance. | ||
25 | * @param {CKEDITOR.dom.document} document | ||
26 | * @param {Object} definition | ||
27 | */ | ||
28 | CKEDITOR.ui.panel = function( document, definition ) { | ||
29 | // Copy all definition properties to this object. | ||
30 | if ( definition ) | ||
31 | CKEDITOR.tools.extend( this, definition ); | ||
32 | |||
33 | // Set defaults. | ||
34 | CKEDITOR.tools.extend( this, { | ||
35 | className: '', | ||
36 | css: [] | ||
37 | } ); | ||
38 | |||
39 | this.id = CKEDITOR.tools.getNextId(); | ||
40 | this.document = document; | ||
41 | this.isFramed = this.forceIFrame || this.css.length; | ||
42 | |||
43 | this._ = { | ||
44 | blocks: {} | ||
45 | }; | ||
46 | }; | ||
47 | |||
48 | /** | ||
49 | * Represents panel handler object. | ||
50 | * | ||
51 | * @class | ||
52 | * @singleton | ||
53 | * @extends CKEDITOR.ui.handlerDefinition | ||
54 | */ | ||
55 | CKEDITOR.ui.panel.handler = { | ||
56 | /** | ||
57 | * Transforms a panel definition in a {@link CKEDITOR.ui.panel} instance. | ||
58 | * | ||
59 | * @param {Object} definition | ||
60 | * @returns {CKEDITOR.ui.panel} | ||
61 | */ | ||
62 | create: function( definition ) { | ||
63 | return new CKEDITOR.ui.panel( definition ); | ||
64 | } | ||
65 | }; | ||
66 | |||
67 | var panelTpl = CKEDITOR.addTemplate( 'panel', '<div lang="{langCode}" id="{id}" dir={dir}' + | ||
68 | ' class="cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}"' + | ||
69 | ' style="z-index:{z-index}" role="presentation">' + | ||
70 | '{frame}' + | ||
71 | '</div>' ); | ||
72 | |||
73 | var frameTpl = CKEDITOR.addTemplate( 'panel-frame', '<iframe id="{id}" class="cke_panel_frame" role="presentation" frameborder="0" src="{src}"></iframe>' ); | ||
74 | |||
75 | var frameDocTpl = CKEDITOR.addTemplate( 'panel-frame-inner', '<!DOCTYPE html>' + | ||
76 | '<html class="cke_panel_container {env}" dir="{dir}" lang="{langCode}">' + | ||
77 | '<head>{css}</head>' + | ||
78 | '<body class="cke_{dir}"' + | ||
79 | ' style="margin:0;padding:0" onload="{onload}"></body>' + | ||
80 | '<\/html>' ); | ||
81 | |||
82 | /** @class CKEDITOR.ui.panel */ | ||
83 | CKEDITOR.ui.panel.prototype = { | ||
84 | /** | ||
85 | * Renders the combo. | ||
86 | * | ||
87 | * @param {CKEDITOR.editor} editor The editor instance which this button is | ||
88 | * to be used by. | ||
89 | * @param {Array} [output] The output array to which append the HTML relative | ||
90 | * to this button. | ||
91 | */ | ||
92 | render: function( editor, output ) { | ||
93 | this.getHolderElement = function() { | ||
94 | var holder = this._.holder; | ||
95 | |||
96 | if ( !holder ) { | ||
97 | if ( this.isFramed ) { | ||
98 | var iframe = this.document.getById( this.id + '_frame' ), | ||
99 | parentDiv = iframe.getParent(), | ||
100 | doc = iframe.getFrameDocument(); | ||
101 | |||
102 | // Make it scrollable on iOS. (#8308) | ||
103 | CKEDITOR.env.iOS && parentDiv.setStyles( { | ||
104 | 'overflow': 'scroll', | ||
105 | '-webkit-overflow-scrolling': 'touch' | ||
106 | } ); | ||
107 | |||
108 | var onLoad = CKEDITOR.tools.addFunction( CKEDITOR.tools.bind( function() { | ||
109 | this.isLoaded = true; | ||
110 | if ( this.onLoad ) | ||
111 | this.onLoad(); | ||
112 | }, this ) ); | ||
113 | |||
114 | doc.write( frameDocTpl.output( CKEDITOR.tools.extend( { | ||
115 | css: CKEDITOR.tools.buildStyleHtml( this.css ), | ||
116 | onload: 'window.parent.CKEDITOR.tools.callFunction(' + onLoad + ');' | ||
117 | }, data ) ) ); | ||
118 | |||
119 | var win = doc.getWindow(); | ||
120 | |||
121 | // Register the CKEDITOR global. | ||
122 | win.$.CKEDITOR = CKEDITOR; | ||
123 | |||
124 | // Arrow keys for scrolling is only preventable with 'keypress' event in Opera (#4534). | ||
125 | doc.on( 'keydown', function( evt ) { | ||
126 | var keystroke = evt.data.getKeystroke(), | ||
127 | dir = this.document.getById( this.id ).getAttribute( 'dir' ); | ||
128 | |||
129 | // Delegate key processing to block. | ||
130 | if ( this._.onKeyDown && this._.onKeyDown( keystroke ) === false ) { | ||
131 | evt.data.preventDefault(); | ||
132 | return; | ||
133 | } | ||
134 | |||
135 | // ESC/ARROW-LEFT(ltr) OR ARROW-RIGHT(rtl) | ||
136 | if ( keystroke == 27 || keystroke == ( dir == 'rtl' ? 39 : 37 ) ) { | ||
137 | if ( this.onEscape && this.onEscape( keystroke ) === false ) | ||
138 | evt.data.preventDefault(); | ||
139 | } | ||
140 | }, this ); | ||
141 | |||
142 | holder = doc.getBody(); | ||
143 | holder.unselectable(); | ||
144 | CKEDITOR.env.air && CKEDITOR.tools.callFunction( onLoad ); | ||
145 | } else { | ||
146 | holder = this.document.getById( this.id ); | ||
147 | } | ||
148 | |||
149 | this._.holder = holder; | ||
150 | } | ||
151 | |||
152 | return holder; | ||
153 | }; | ||
154 | |||
155 | var data = { | ||
156 | editorId: editor.id, | ||
157 | id: this.id, | ||
158 | langCode: editor.langCode, | ||
159 | dir: editor.lang.dir, | ||
160 | cls: this.className, | ||
161 | frame: '', | ||
162 | env: CKEDITOR.env.cssClass, | ||
163 | 'z-index': editor.config.baseFloatZIndex + 1 | ||
164 | }; | ||
165 | |||
166 | if ( this.isFramed ) { | ||
167 | // With IE, the custom domain has to be taken care at first, | ||
168 | // for other browers, the 'src' attribute should be left empty to | ||
169 | // trigger iframe's 'load' event. | ||
170 | var src = | ||
171 | CKEDITOR.env.air ? 'javascript:void(0)' : // jshint ignore:line | ||
172 | CKEDITOR.env.ie ? 'javascript:void(function(){' + encodeURIComponent( // jshint ignore:line | ||
173 | 'document.open();' + | ||
174 | // In IE, the document domain must be set any time we call document.open(). | ||
175 | '(' + CKEDITOR.tools.fixDomain + ')();' + | ||
176 | 'document.close();' | ||
177 | ) + '}())' : | ||
178 | ''; | ||
179 | |||
180 | data.frame = frameTpl.output( { | ||
181 | id: this.id + '_frame', | ||
182 | src: src | ||
183 | } ); | ||
184 | } | ||
185 | |||
186 | var html = panelTpl.output( data ); | ||
187 | |||
188 | if ( output ) | ||
189 | output.push( html ); | ||
190 | |||
191 | return html; | ||
192 | }, | ||
193 | |||
194 | /** | ||
195 | * @todo | ||
196 | */ | ||
197 | addBlock: function( name, block ) { | ||
198 | block = this._.blocks[ name ] = block instanceof CKEDITOR.ui.panel.block ? block : new CKEDITOR.ui.panel.block( this.getHolderElement(), block ); | ||
199 | |||
200 | if ( !this._.currentBlock ) | ||
201 | this.showBlock( name ); | ||
202 | |||
203 | return block; | ||
204 | }, | ||
205 | |||
206 | /** | ||
207 | * @todo | ||
208 | */ | ||
209 | getBlock: function( name ) { | ||
210 | return this._.blocks[ name ]; | ||
211 | }, | ||
212 | |||
213 | /** | ||
214 | * @todo | ||
215 | */ | ||
216 | showBlock: function( name ) { | ||
217 | var blocks = this._.blocks, | ||
218 | block = blocks[ name ], | ||
219 | current = this._.currentBlock; | ||
220 | |||
221 | // ARIA role works better in IE on the body element, while on the iframe | ||
222 | // for FF. (#8864) | ||
223 | var holder = !this.forceIFrame || CKEDITOR.env.ie ? this._.holder : this.document.getById( this.id + '_frame' ); | ||
224 | |||
225 | if ( current ) | ||
226 | current.hide(); | ||
227 | |||
228 | this._.currentBlock = block; | ||
229 | |||
230 | CKEDITOR.fire( 'ariaWidget', holder ); | ||
231 | |||
232 | // Reset the focus index, so it will always go into the first one. | ||
233 | block._.focusIndex = -1; | ||
234 | |||
235 | this._.onKeyDown = block.onKeyDown && CKEDITOR.tools.bind( block.onKeyDown, block ); | ||
236 | |||
237 | block.show(); | ||
238 | |||
239 | return block; | ||
240 | }, | ||
241 | |||
242 | /** | ||
243 | * @todo | ||
244 | */ | ||
245 | destroy: function() { | ||
246 | this.element && this.element.remove(); | ||
247 | } | ||
248 | }; | ||
249 | |||
250 | /** | ||
251 | * @class | ||
252 | * | ||
253 | * @todo class and all methods | ||
254 | */ | ||
255 | CKEDITOR.ui.panel.block = CKEDITOR.tools.createClass( { | ||
256 | /** | ||
257 | * Creates a block class instances. | ||
258 | * | ||
259 | * @constructor | ||
260 | * @todo | ||
261 | */ | ||
262 | $: function( blockHolder, blockDefinition ) { | ||
263 | this.element = blockHolder.append( blockHolder.getDocument().createElement( 'div', { | ||
264 | attributes: { | ||
265 | 'tabindex': -1, | ||
266 | 'class': 'cke_panel_block' | ||
267 | }, | ||
268 | styles: { | ||
269 | display: 'none' | ||
270 | } | ||
271 | } ) ); | ||
272 | |||
273 | // Copy all definition properties to this object. | ||
274 | if ( blockDefinition ) | ||
275 | CKEDITOR.tools.extend( this, blockDefinition ); | ||
276 | |||
277 | // Set the a11y attributes of this element ... | ||
278 | this.element.setAttributes( { | ||
279 | 'role': this.attributes.role || 'presentation', | ||
280 | 'aria-label': this.attributes[ 'aria-label' ], | ||
281 | 'title': this.attributes.title || this.attributes[ 'aria-label' ] | ||
282 | } ); | ||
283 | |||
284 | this.keys = {}; | ||
285 | |||
286 | this._.focusIndex = -1; | ||
287 | |||
288 | // Disable context menu for panels. | ||
289 | this.element.disableContextMenu(); | ||
290 | }, | ||
291 | |||
292 | _: { | ||
293 | |||
294 | /** | ||
295 | * Mark the item specified by the index as current activated. | ||
296 | */ | ||
297 | markItem: function( index ) { | ||
298 | if ( index == -1 ) | ||
299 | return; | ||
300 | var links = this.element.getElementsByTag( 'a' ); | ||
301 | var item = links.getItem( this._.focusIndex = index ); | ||
302 | |||
303 | // Safari need focus on the iframe window first(#3389), but we need | ||
304 | // lock the blur to avoid hiding the panel. | ||
305 | if ( CKEDITOR.env.webkit ) | ||
306 | item.getDocument().getWindow().focus(); | ||
307 | item.focus(); | ||
308 | |||
309 | this.onMark && this.onMark( item ); | ||
310 | } | ||
311 | }, | ||
312 | |||
313 | proto: { | ||
314 | show: function() { | ||
315 | this.element.setStyle( 'display', '' ); | ||
316 | }, | ||
317 | |||
318 | hide: function() { | ||
319 | if ( !this.onHide || this.onHide.call( this ) !== true ) | ||
320 | this.element.setStyle( 'display', 'none' ); | ||
321 | }, | ||
322 | |||
323 | onKeyDown: function( keystroke, noCycle ) { | ||
324 | var keyAction = this.keys[ keystroke ]; | ||
325 | switch ( keyAction ) { | ||
326 | // Move forward. | ||
327 | case 'next': | ||
328 | var index = this._.focusIndex, | ||
329 | links = this.element.getElementsByTag( 'a' ), | ||
330 | link; | ||
331 | |||
332 | while ( ( link = links.getItem( ++index ) ) ) { | ||
333 | // Move the focus only if the element is marked with | ||
334 | // the _cke_focus and it it's visible (check if it has | ||
335 | // width). | ||
336 | if ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth ) { | ||
337 | this._.focusIndex = index; | ||
338 | link.focus(); | ||
339 | break; | ||
340 | } | ||
341 | } | ||
342 | |||
343 | // If no link was found, cycle and restart from the top. (#11125) | ||
344 | if ( !link && !noCycle ) { | ||
345 | this._.focusIndex = -1; | ||
346 | return this.onKeyDown( keystroke, 1 ); | ||
347 | } | ||
348 | |||
349 | return false; | ||
350 | |||
351 | // Move backward. | ||
352 | case 'prev': | ||
353 | index = this._.focusIndex; | ||
354 | links = this.element.getElementsByTag( 'a' ); | ||
355 | |||
356 | while ( index > 0 && ( link = links.getItem( --index ) ) ) { | ||
357 | // Move the focus only if the element is marked with | ||
358 | // the _cke_focus and it it's visible (check if it has | ||
359 | // width). | ||
360 | if ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth ) { | ||
361 | this._.focusIndex = index; | ||
362 | link.focus(); | ||
363 | break; | ||
364 | } | ||
365 | |||
366 | // Make sure link is null when the loop ends and nothing was | ||
367 | // found (#11125). | ||
368 | link = null; | ||
369 | } | ||
370 | |||
371 | // If no link was found, cycle and restart from the bottom. (#11125) | ||
372 | if ( !link && !noCycle ) { | ||
373 | this._.focusIndex = links.count(); | ||
374 | return this.onKeyDown( keystroke, 1 ); | ||
375 | } | ||
376 | |||
377 | return false; | ||
378 | |||
379 | case 'click': | ||
380 | case 'mouseup': | ||
381 | index = this._.focusIndex; | ||
382 | link = index >= 0 && this.element.getElementsByTag( 'a' ).getItem( index ); | ||
383 | |||
384 | if ( link ) | ||
385 | link.$[ keyAction ] ? link.$[ keyAction ]() : link.$[ 'on' + keyAction ](); | ||
386 | |||
387 | return false; | ||
388 | } | ||
389 | |||
390 | return true; | ||
391 | } | ||
392 | } | ||
393 | } ); | ||
394 | |||
395 | } )(); | ||
396 | |||
397 | /** | ||
398 | * Fired when a panel is added to the document. | ||
399 | * | ||
400 | * @event ariaWidget | ||
401 | * @member CKEDITOR | ||
402 | * @param {Object} data The element wrapping the panel. | ||
403 | */ | ||
diff --git a/sources/plugins/popup/plugin.js b/sources/plugins/popup/plugin.js new file mode 100644 index 0000000..8f6bd5f --- /dev/null +++ b/sources/plugins/popup/plugin.js | |||
@@ -0,0 +1,65 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.add( 'popup' ); | ||
7 | |||
8 | CKEDITOR.tools.extend( CKEDITOR.editor.prototype, { | ||
9 | /** | ||
10 | * Opens Browser in a popup. The `width` and `height` parameters accept | ||
11 | * numbers (pixels) or percent (of screen size) values. | ||
12 | * | ||
13 | * @member CKEDITOR.editor | ||
14 | * @param {String} url The url of the external file browser. | ||
15 | * @param {Number/String} [width='80%'] Popup window width. | ||
16 | * @param {Number/String} [height='70%'] Popup window height. | ||
17 | * @param {String} [options='location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes'] | ||
18 | * Popup window features. | ||
19 | */ | ||
20 | popup: function( url, width, height, options ) { | ||
21 | width = width || '80%'; | ||
22 | height = height || '70%'; | ||
23 | |||
24 | if ( typeof width == 'string' && width.length > 1 && width.substr( width.length - 1, 1 ) == '%' ) | ||
25 | width = parseInt( window.screen.width * parseInt( width, 10 ) / 100, 10 ); | ||
26 | |||
27 | if ( typeof height == 'string' && height.length > 1 && height.substr( height.length - 1, 1 ) == '%' ) | ||
28 | height = parseInt( window.screen.height * parseInt( height, 10 ) / 100, 10 ); | ||
29 | |||
30 | if ( width < 640 ) | ||
31 | width = 640; | ||
32 | |||
33 | if ( height < 420 ) | ||
34 | height = 420; | ||
35 | |||
36 | var top = parseInt( ( window.screen.height - height ) / 2, 10 ), | ||
37 | left = parseInt( ( window.screen.width - width ) / 2, 10 ); | ||
38 | |||
39 | options = ( options || 'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes' ) + ',width=' + width + | ||
40 | ',height=' + height + | ||
41 | ',top=' + top + | ||
42 | ',left=' + left; | ||
43 | |||
44 | var popupWindow = window.open( '', null, options, true ); | ||
45 | |||
46 | // Blocked by a popup blocker. | ||
47 | if ( !popupWindow ) | ||
48 | return false; | ||
49 | |||
50 | try { | ||
51 | // Chrome is problematic with moveTo/resizeTo, but it's not really needed here (#8855). | ||
52 | var ua = navigator.userAgent.toLowerCase(); | ||
53 | if ( ua.indexOf( ' chrome/' ) == -1 ) { | ||
54 | popupWindow.moveTo( left, top ); | ||
55 | popupWindow.resizeTo( width, height ); | ||
56 | } | ||
57 | popupWindow.focus(); | ||
58 | popupWindow.location.href = url; | ||
59 | } catch ( e ) { | ||
60 | popupWindow = window.open( url, null, options, true ); | ||
61 | } | ||
62 | |||
63 | return true; | ||
64 | } | ||
65 | } ); | ||
diff --git a/sources/plugins/removeformat/icons/hidpi/removeformat.png b/sources/plugins/removeformat/icons/hidpi/removeformat.png new file mode 100644 index 0000000..910b0a3 --- /dev/null +++ b/sources/plugins/removeformat/icons/hidpi/removeformat.png | |||
Binary files differ | |||
diff --git a/sources/plugins/removeformat/icons/removeformat.png b/sources/plugins/removeformat/icons/removeformat.png new file mode 100644 index 0000000..1bc9b38 --- /dev/null +++ b/sources/plugins/removeformat/icons/removeformat.png | |||
Binary files differ | |||
diff --git a/sources/plugins/removeformat/lang/af.js b/sources/plugins/removeformat/lang/af.js new file mode 100644 index 0000000..f4aad8d --- /dev/null +++ b/sources/plugins/removeformat/lang/af.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'af', { | ||
6 | toolbar: 'Verwyder opmaak' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/ar.js b/sources/plugins/removeformat/lang/ar.js new file mode 100644 index 0000000..fc43002 --- /dev/null +++ b/sources/plugins/removeformat/lang/ar.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'ar', { | ||
6 | toolbar: 'إزالة التنسيقات' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/bg.js b/sources/plugins/removeformat/lang/bg.js new file mode 100644 index 0000000..bc24b70 --- /dev/null +++ b/sources/plugins/removeformat/lang/bg.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'bg', { | ||
6 | toolbar: 'Премахване на форматирането' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/bn.js b/sources/plugins/removeformat/lang/bn.js new file mode 100644 index 0000000..40bf380 --- /dev/null +++ b/sources/plugins/removeformat/lang/bn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'bn', { | ||
6 | toolbar: 'ফরমেট সরাও' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/bs.js b/sources/plugins/removeformat/lang/bs.js new file mode 100644 index 0000000..ee03684 --- /dev/null +++ b/sources/plugins/removeformat/lang/bs.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'bs', { | ||
6 | toolbar: 'Poništi format' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/ca.js b/sources/plugins/removeformat/lang/ca.js new file mode 100644 index 0000000..0b94ce4 --- /dev/null +++ b/sources/plugins/removeformat/lang/ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'ca', { | ||
6 | toolbar: 'Elimina Format' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/cs.js b/sources/plugins/removeformat/lang/cs.js new file mode 100644 index 0000000..ce05801 --- /dev/null +++ b/sources/plugins/removeformat/lang/cs.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'cs', { | ||
6 | toolbar: 'Odstranit formátování' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/cy.js b/sources/plugins/removeformat/lang/cy.js new file mode 100644 index 0000000..14372a1 --- /dev/null +++ b/sources/plugins/removeformat/lang/cy.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'cy', { | ||
6 | toolbar: 'Tynnu Fformat' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/da.js b/sources/plugins/removeformat/lang/da.js new file mode 100644 index 0000000..d170584 --- /dev/null +++ b/sources/plugins/removeformat/lang/da.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'da', { | ||
6 | toolbar: 'Fjern formatering' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/de-ch.js b/sources/plugins/removeformat/lang/de-ch.js new file mode 100644 index 0000000..48daf26 --- /dev/null +++ b/sources/plugins/removeformat/lang/de-ch.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'de-ch', { | ||
6 | toolbar: 'Formatierung entfernen' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/de.js b/sources/plugins/removeformat/lang/de.js new file mode 100644 index 0000000..08ad55c --- /dev/null +++ b/sources/plugins/removeformat/lang/de.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'de', { | ||
6 | toolbar: 'Formatierung entfernen' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/el.js b/sources/plugins/removeformat/lang/el.js new file mode 100644 index 0000000..d48c8ab --- /dev/null +++ b/sources/plugins/removeformat/lang/el.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'el', { | ||
6 | toolbar: 'Εκκαθάριση Μορφοποίησης' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/en-au.js b/sources/plugins/removeformat/lang/en-au.js new file mode 100644 index 0000000..426d6d1 --- /dev/null +++ b/sources/plugins/removeformat/lang/en-au.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'en-au', { | ||
6 | toolbar: 'Remove Format' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/en-ca.js b/sources/plugins/removeformat/lang/en-ca.js new file mode 100644 index 0000000..1cc2963 --- /dev/null +++ b/sources/plugins/removeformat/lang/en-ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'en-ca', { | ||
6 | toolbar: 'Remove Format' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/en-gb.js b/sources/plugins/removeformat/lang/en-gb.js new file mode 100644 index 0000000..65af616 --- /dev/null +++ b/sources/plugins/removeformat/lang/en-gb.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'en-gb', { | ||
6 | toolbar: 'Remove Format' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/en.js b/sources/plugins/removeformat/lang/en.js new file mode 100644 index 0000000..55600fc --- /dev/null +++ b/sources/plugins/removeformat/lang/en.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'en', { | ||
6 | toolbar: 'Remove Format' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/eo.js b/sources/plugins/removeformat/lang/eo.js new file mode 100644 index 0000000..c4f04e3 --- /dev/null +++ b/sources/plugins/removeformat/lang/eo.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'eo', { | ||
6 | toolbar: 'Forigi Formaton' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/es.js b/sources/plugins/removeformat/lang/es.js new file mode 100644 index 0000000..dc48200 --- /dev/null +++ b/sources/plugins/removeformat/lang/es.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'es', { | ||
6 | toolbar: 'Eliminar Formato' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/et.js b/sources/plugins/removeformat/lang/et.js new file mode 100644 index 0000000..2938e78 --- /dev/null +++ b/sources/plugins/removeformat/lang/et.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'et', { | ||
6 | toolbar: 'Vormingu eemaldamine' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/eu.js b/sources/plugins/removeformat/lang/eu.js new file mode 100644 index 0000000..ff16de3 --- /dev/null +++ b/sources/plugins/removeformat/lang/eu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'eu', { | ||
6 | toolbar: 'Kendu formatua' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/fa.js b/sources/plugins/removeformat/lang/fa.js new file mode 100644 index 0000000..40e8a1d --- /dev/null +++ b/sources/plugins/removeformat/lang/fa.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'fa', { | ||
6 | toolbar: 'برداشتن فرمت' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/fi.js b/sources/plugins/removeformat/lang/fi.js new file mode 100644 index 0000000..90f2f54 --- /dev/null +++ b/sources/plugins/removeformat/lang/fi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'fi', { | ||
6 | toolbar: 'Poista muotoilu' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/fo.js b/sources/plugins/removeformat/lang/fo.js new file mode 100644 index 0000000..68fbb29 --- /dev/null +++ b/sources/plugins/removeformat/lang/fo.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'fo', { | ||
6 | toolbar: 'Strika sniðgeving' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/fr-ca.js b/sources/plugins/removeformat/lang/fr-ca.js new file mode 100644 index 0000000..67709de --- /dev/null +++ b/sources/plugins/removeformat/lang/fr-ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'fr-ca', { | ||
6 | toolbar: 'Supprimer le formatage' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/fr.js b/sources/plugins/removeformat/lang/fr.js new file mode 100644 index 0000000..0ccb8ed --- /dev/null +++ b/sources/plugins/removeformat/lang/fr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'fr', { | ||
6 | toolbar: 'Supprimer la mise en forme' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/gl.js b/sources/plugins/removeformat/lang/gl.js new file mode 100644 index 0000000..8ed13d3 --- /dev/null +++ b/sources/plugins/removeformat/lang/gl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'gl', { | ||
6 | toolbar: 'Retirar o formato' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/gu.js b/sources/plugins/removeformat/lang/gu.js new file mode 100644 index 0000000..7d31531 --- /dev/null +++ b/sources/plugins/removeformat/lang/gu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'gu', { | ||
6 | toolbar: 'ફૉર્મટ કાઢવું' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/he.js b/sources/plugins/removeformat/lang/he.js new file mode 100644 index 0000000..1073e39 --- /dev/null +++ b/sources/plugins/removeformat/lang/he.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'he', { | ||
6 | toolbar: 'הסרת העיצוב' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/hi.js b/sources/plugins/removeformat/lang/hi.js new file mode 100644 index 0000000..952feac --- /dev/null +++ b/sources/plugins/removeformat/lang/hi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'hi', { | ||
6 | toolbar: 'फ़ॉर्मैट हटायें' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/hr.js b/sources/plugins/removeformat/lang/hr.js new file mode 100644 index 0000000..9332057 --- /dev/null +++ b/sources/plugins/removeformat/lang/hr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'hr', { | ||
6 | toolbar: 'Ukloni formatiranje' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/hu.js b/sources/plugins/removeformat/lang/hu.js new file mode 100644 index 0000000..a7cabfc --- /dev/null +++ b/sources/plugins/removeformat/lang/hu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'hu', { | ||
6 | toolbar: 'Formázás eltávolítása' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/id.js b/sources/plugins/removeformat/lang/id.js new file mode 100644 index 0000000..f677a05 --- /dev/null +++ b/sources/plugins/removeformat/lang/id.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'id', { | ||
6 | toolbar: 'Hapus Format' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/is.js b/sources/plugins/removeformat/lang/is.js new file mode 100644 index 0000000..5f7c53f --- /dev/null +++ b/sources/plugins/removeformat/lang/is.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'is', { | ||
6 | toolbar: 'Fjarlægja snið' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/it.js b/sources/plugins/removeformat/lang/it.js new file mode 100644 index 0000000..840d043 --- /dev/null +++ b/sources/plugins/removeformat/lang/it.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'it', { | ||
6 | toolbar: 'Elimina formattazione' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/ja.js b/sources/plugins/removeformat/lang/ja.js new file mode 100644 index 0000000..acc7451 --- /dev/null +++ b/sources/plugins/removeformat/lang/ja.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'ja', { | ||
6 | toolbar: '書式を解除' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/ka.js b/sources/plugins/removeformat/lang/ka.js new file mode 100644 index 0000000..a455c35 --- /dev/null +++ b/sources/plugins/removeformat/lang/ka.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'ka', { | ||
6 | toolbar: 'ფორმატირების მოხსნა' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/km.js b/sources/plugins/removeformat/lang/km.js new file mode 100644 index 0000000..b20d6ac --- /dev/null +++ b/sources/plugins/removeformat/lang/km.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'km', { | ||
6 | toolbar: 'ជម្រះទ្រង់ទ្រាយ' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/ko.js b/sources/plugins/removeformat/lang/ko.js new file mode 100644 index 0000000..60df7aa --- /dev/null +++ b/sources/plugins/removeformat/lang/ko.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'ko', { | ||
6 | toolbar: '형식 지우기' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/ku.js b/sources/plugins/removeformat/lang/ku.js new file mode 100644 index 0000000..5b84310 --- /dev/null +++ b/sources/plugins/removeformat/lang/ku.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'ku', { | ||
6 | toolbar: 'لابردنی داڕشتەکە' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/lt.js b/sources/plugins/removeformat/lang/lt.js new file mode 100644 index 0000000..88be97e --- /dev/null +++ b/sources/plugins/removeformat/lang/lt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'lt', { | ||
6 | toolbar: 'Panaikinti formatą' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/lv.js b/sources/plugins/removeformat/lang/lv.js new file mode 100644 index 0000000..946e6d9 --- /dev/null +++ b/sources/plugins/removeformat/lang/lv.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'lv', { | ||
6 | toolbar: 'Noņemt stilus' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/mk.js b/sources/plugins/removeformat/lang/mk.js new file mode 100644 index 0000000..4fcbf8d --- /dev/null +++ b/sources/plugins/removeformat/lang/mk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'mk', { | ||
6 | toolbar: 'Remove Format' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/mn.js b/sources/plugins/removeformat/lang/mn.js new file mode 100644 index 0000000..e504411 --- /dev/null +++ b/sources/plugins/removeformat/lang/mn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'mn', { | ||
6 | toolbar: 'Параргафын загварыг авч хаях' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/ms.js b/sources/plugins/removeformat/lang/ms.js new file mode 100644 index 0000000..bb6951b --- /dev/null +++ b/sources/plugins/removeformat/lang/ms.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'ms', { | ||
6 | toolbar: 'Buang Format' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/nb.js b/sources/plugins/removeformat/lang/nb.js new file mode 100644 index 0000000..461d140 --- /dev/null +++ b/sources/plugins/removeformat/lang/nb.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'nb', { | ||
6 | toolbar: 'Fjern formatering' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/nl.js b/sources/plugins/removeformat/lang/nl.js new file mode 100644 index 0000000..cbbe0b1 --- /dev/null +++ b/sources/plugins/removeformat/lang/nl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'nl', { | ||
6 | toolbar: 'Opmaak verwijderen' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/no.js b/sources/plugins/removeformat/lang/no.js new file mode 100644 index 0000000..d067249 --- /dev/null +++ b/sources/plugins/removeformat/lang/no.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'no', { | ||
6 | toolbar: 'Fjern formatering' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/pl.js b/sources/plugins/removeformat/lang/pl.js new file mode 100644 index 0000000..5b1bddb --- /dev/null +++ b/sources/plugins/removeformat/lang/pl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'pl', { | ||
6 | toolbar: 'Usuń formatowanie' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/pt-br.js b/sources/plugins/removeformat/lang/pt-br.js new file mode 100644 index 0000000..fb05dce --- /dev/null +++ b/sources/plugins/removeformat/lang/pt-br.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'pt-br', { | ||
6 | toolbar: 'Remover Formatação' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/pt.js b/sources/plugins/removeformat/lang/pt.js new file mode 100644 index 0000000..c3e5d97 --- /dev/null +++ b/sources/plugins/removeformat/lang/pt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'pt', { | ||
6 | toolbar: 'Eliminar Formato' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/ro.js b/sources/plugins/removeformat/lang/ro.js new file mode 100644 index 0000000..1c045c7 --- /dev/null +++ b/sources/plugins/removeformat/lang/ro.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'ro', { | ||
6 | toolbar: 'Înlătură formatarea' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/ru.js b/sources/plugins/removeformat/lang/ru.js new file mode 100644 index 0000000..baaa2fb --- /dev/null +++ b/sources/plugins/removeformat/lang/ru.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'ru', { | ||
6 | toolbar: 'Убрать форматирование' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/si.js b/sources/plugins/removeformat/lang/si.js new file mode 100644 index 0000000..7a86747 --- /dev/null +++ b/sources/plugins/removeformat/lang/si.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'si', { | ||
6 | toolbar: 'සැකසීම වෙනස් කරන්න' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/sk.js b/sources/plugins/removeformat/lang/sk.js new file mode 100644 index 0000000..77651f2 --- /dev/null +++ b/sources/plugins/removeformat/lang/sk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'sk', { | ||
6 | toolbar: 'Odstrániť formátovanie' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/sl.js b/sources/plugins/removeformat/lang/sl.js new file mode 100644 index 0000000..a717049 --- /dev/null +++ b/sources/plugins/removeformat/lang/sl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'sl', { | ||
6 | toolbar: 'Odstrani oblikovanje' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/sq.js b/sources/plugins/removeformat/lang/sq.js new file mode 100644 index 0000000..73c8419 --- /dev/null +++ b/sources/plugins/removeformat/lang/sq.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'sq', { | ||
6 | toolbar: 'Largo Formatin' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/sr-latn.js b/sources/plugins/removeformat/lang/sr-latn.js new file mode 100644 index 0000000..9e91105 --- /dev/null +++ b/sources/plugins/removeformat/lang/sr-latn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'sr-latn', { | ||
6 | toolbar: 'Ukloni formatiranje' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/sr.js b/sources/plugins/removeformat/lang/sr.js new file mode 100644 index 0000000..fd720a9 --- /dev/null +++ b/sources/plugins/removeformat/lang/sr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'sr', { | ||
6 | toolbar: 'Уклони форматирање' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/sv.js b/sources/plugins/removeformat/lang/sv.js new file mode 100644 index 0000000..ebb4aed --- /dev/null +++ b/sources/plugins/removeformat/lang/sv.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'sv', { | ||
6 | toolbar: 'Radera formatering' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/th.js b/sources/plugins/removeformat/lang/th.js new file mode 100644 index 0000000..d521c58 --- /dev/null +++ b/sources/plugins/removeformat/lang/th.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'th', { | ||
6 | toolbar: 'ล้างรูปแบบ' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/tr.js b/sources/plugins/removeformat/lang/tr.js new file mode 100644 index 0000000..2d4097c --- /dev/null +++ b/sources/plugins/removeformat/lang/tr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'tr', { | ||
6 | toolbar: 'Biçimi Kaldır' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/tt.js b/sources/plugins/removeformat/lang/tt.js new file mode 100644 index 0000000..4fa5570 --- /dev/null +++ b/sources/plugins/removeformat/lang/tt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'tt', { | ||
6 | toolbar: 'Форматлауны бетерү' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/ug.js b/sources/plugins/removeformat/lang/ug.js new file mode 100644 index 0000000..7d9ec29 --- /dev/null +++ b/sources/plugins/removeformat/lang/ug.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'ug', { | ||
6 | toolbar: 'پىچىمنى چىقىرىۋەت' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/uk.js b/sources/plugins/removeformat/lang/uk.js new file mode 100644 index 0000000..1dea866 --- /dev/null +++ b/sources/plugins/removeformat/lang/uk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'uk', { | ||
6 | toolbar: 'Видалити форматування' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/vi.js b/sources/plugins/removeformat/lang/vi.js new file mode 100644 index 0000000..2aaadc2 --- /dev/null +++ b/sources/plugins/removeformat/lang/vi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'vi', { | ||
6 | toolbar: 'Xoá định dạng' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/zh-cn.js b/sources/plugins/removeformat/lang/zh-cn.js new file mode 100644 index 0000000..6efbf35 --- /dev/null +++ b/sources/plugins/removeformat/lang/zh-cn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'zh-cn', { | ||
6 | toolbar: '清除格式' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/lang/zh.js b/sources/plugins/removeformat/lang/zh.js new file mode 100644 index 0000000..6ce2ef0 --- /dev/null +++ b/sources/plugins/removeformat/lang/zh.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'removeformat', 'zh', { | ||
6 | toolbar: '移除格式' | ||
7 | } ); | ||
diff --git a/sources/plugins/removeformat/plugin.js b/sources/plugins/removeformat/plugin.js new file mode 100644 index 0000000..044f54a --- /dev/null +++ b/sources/plugins/removeformat/plugin.js | |||
@@ -0,0 +1,193 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.add( 'removeformat', { | ||
7 | // jscs:disable maximumLineLength | ||
8 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
9 | // jscs:enable maximumLineLength | ||
10 | icons: 'removeformat', // %REMOVE_LINE_CORE% | ||
11 | hidpi: true, // %REMOVE_LINE_CORE% | ||
12 | init: function( editor ) { | ||
13 | editor.addCommand( 'removeFormat', CKEDITOR.plugins.removeformat.commands.removeformat ); | ||
14 | editor.ui.addButton && editor.ui.addButton( 'RemoveFormat', { | ||
15 | label: editor.lang.removeformat.toolbar, | ||
16 | command: 'removeFormat', | ||
17 | toolbar: 'cleanup,10' | ||
18 | } ); | ||
19 | } | ||
20 | } ); | ||
21 | |||
22 | CKEDITOR.plugins.removeformat = { | ||
23 | commands: { | ||
24 | removeformat: { | ||
25 | exec: function( editor ) { | ||
26 | var tagsRegex = editor._.removeFormatRegex || ( editor._.removeFormatRegex = new RegExp( '^(?:' + editor.config.removeFormatTags.replace( /,/g, '|' ) + ')$', 'i' ) ); | ||
27 | |||
28 | var removeAttributes = editor._.removeAttributes || ( editor._.removeAttributes = editor.config.removeFormatAttributes.split( ',' ) ), | ||
29 | filter = CKEDITOR.plugins.removeformat.filter, | ||
30 | ranges = editor.getSelection().getRanges(), | ||
31 | iterator = ranges.createIterator(), | ||
32 | isElement = function( element ) { | ||
33 | return element.type == CKEDITOR.NODE_ELEMENT; | ||
34 | }, | ||
35 | range; | ||
36 | |||
37 | while ( ( range = iterator.getNextRange() ) ) { | ||
38 | if ( !range.collapsed ) | ||
39 | range.enlarge( CKEDITOR.ENLARGE_ELEMENT ); | ||
40 | |||
41 | // Bookmark the range so we can re-select it after processing. | ||
42 | var bookmark = range.createBookmark(), | ||
43 | // The style will be applied within the bookmark boundaries. | ||
44 | startNode = bookmark.startNode, | ||
45 | endNode = bookmark.endNode, | ||
46 | currentNode; | ||
47 | |||
48 | // We need to check the selection boundaries (bookmark spans) to break | ||
49 | // the code in a way that we can properly remove partially selected nodes. | ||
50 | // For example, removing a <b> style from | ||
51 | // <b>This is [some text</b> to show <b>the] problem</b> | ||
52 | // ... where [ and ] represent the selection, must result: | ||
53 | // <b>This is </b>[some text to show the]<b> problem</b> | ||
54 | // The strategy is simple, we just break the partial nodes before the | ||
55 | // removal logic, having something that could be represented this way: | ||
56 | // <b>This is </b>[<b>some text</b> to show <b>the</b>]<b> problem</b> | ||
57 | |||
58 | var breakParent = function( node ) { | ||
59 | // Let's start checking the start boundary. | ||
60 | var path = editor.elementPath( node ), | ||
61 | pathElements = path.elements; | ||
62 | |||
63 | for ( var i = 1, pathElement; pathElement = pathElements[ i ]; i++ ) { | ||
64 | if ( pathElement.equals( path.block ) || pathElement.equals( path.blockLimit ) ) | ||
65 | break; | ||
66 | |||
67 | // If this element can be removed (even partially). | ||
68 | if ( tagsRegex.test( pathElement.getName() ) && filter( editor, pathElement ) ) | ||
69 | node.breakParent( pathElement ); | ||
70 | } | ||
71 | }; | ||
72 | |||
73 | breakParent( startNode ); | ||
74 | if ( endNode ) { | ||
75 | breakParent( endNode ); | ||
76 | |||
77 | // Navigate through all nodes between the bookmarks. | ||
78 | currentNode = startNode.getNextSourceNode( true, CKEDITOR.NODE_ELEMENT ); | ||
79 | |||
80 | while ( currentNode ) { | ||
81 | // If we have reached the end of the selection, stop looping. | ||
82 | if ( currentNode.equals( endNode ) ) | ||
83 | break; | ||
84 | |||
85 | if ( currentNode.isReadOnly() ) { | ||
86 | // In case of non-editable we're skipping to the next sibling *elmenet*. | ||
87 | |||
88 | // We need to be aware that endNode can be nested within current non-editable. | ||
89 | // This condition tests if currentNode (non-editable) contains endNode. If it does | ||
90 | // then we should break the filtering | ||
91 | if ( currentNode.getPosition( endNode ) & CKEDITOR.POSITION_CONTAINS ) { | ||
92 | break; | ||
93 | } | ||
94 | |||
95 | currentNode = currentNode.getNext( isElement ); | ||
96 | continue; | ||
97 | } | ||
98 | |||
99 | // Cache the next node to be processed. Do it now, because | ||
100 | // currentNode may be removed. | ||
101 | var nextNode = currentNode.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ), | ||
102 | isFakeElement = currentNode.getName() == 'img' && currentNode.data( 'cke-realelement' ); | ||
103 | |||
104 | // This node must not be a fake element, and must not be read-only. | ||
105 | if ( !isFakeElement && filter( editor, currentNode ) ) { | ||
106 | // Remove elements nodes that match with this style rules. | ||
107 | if ( tagsRegex.test( currentNode.getName() ) ) | ||
108 | currentNode.remove( 1 ); | ||
109 | else { | ||
110 | currentNode.removeAttributes( removeAttributes ); | ||
111 | editor.fire( 'removeFormatCleanup', currentNode ); | ||
112 | } | ||
113 | } | ||
114 | |||
115 | currentNode = nextNode; | ||
116 | } | ||
117 | } | ||
118 | |||
119 | range.moveToBookmark( bookmark ); | ||
120 | } | ||
121 | |||
122 | // The selection path may not changed, but we should force a selection | ||
123 | // change event to refresh command states, due to the above attribution change. (#9238) | ||
124 | editor.forceNextSelectionCheck(); | ||
125 | editor.getSelection().selectRanges( ranges ); | ||
126 | } | ||
127 | } | ||
128 | }, | ||
129 | |||
130 | // Perform the remove format filters on the passed element. | ||
131 | // @param {CKEDITOR.editor} editor | ||
132 | // @param {CKEDITOR.dom.element} element | ||
133 | filter: function( editor, element ) { | ||
134 | // If editor#addRemoveFotmatFilter hasn't been executed yet value is not initialized. | ||
135 | var filters = editor._.removeFormatFilters || []; | ||
136 | for ( var i = 0; i < filters.length; i++ ) { | ||
137 | if ( filters[ i ]( element ) === false ) | ||
138 | return false; | ||
139 | } | ||
140 | return true; | ||
141 | } | ||
142 | }; | ||
143 | |||
144 | /** | ||
145 | * Add to a collection of functions to decide whether a specific | ||
146 | * element should be considered as formatting element and thus | ||
147 | * could be removed during `removeFormat` command. | ||
148 | * | ||
149 | * **Note:** Only available with the existence of `removeformat` plugin. | ||
150 | * | ||
151 | * // Don't remove empty span. | ||
152 | * editor.addRemoveFormatFilter( function( element ) { | ||
153 | * return !( element.is( 'span' ) && CKEDITOR.tools.isEmpty( element.getAttributes() ) ); | ||
154 | * } ); | ||
155 | * | ||
156 | * @since 3.3 | ||
157 | * @member CKEDITOR.editor | ||
158 | * @param {Function} func The function to be called, which will be passed a {CKEDITOR.dom.element} element to test. | ||
159 | */ | ||
160 | CKEDITOR.editor.prototype.addRemoveFormatFilter = function( func ) { | ||
161 | if ( !this._.removeFormatFilters ) | ||
162 | this._.removeFormatFilters = []; | ||
163 | |||
164 | this._.removeFormatFilters.push( func ); | ||
165 | }; | ||
166 | |||
167 | /** | ||
168 | * A comma separated list of elements to be removed when executing the `remove | ||
169 | * format` command. Note that only inline elements are allowed. | ||
170 | * | ||
171 | * @cfg | ||
172 | * @member CKEDITOR.config | ||
173 | */ | ||
174 | CKEDITOR.config.removeFormatTags = 'b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var'; | ||
175 | |||
176 | /** | ||
177 | * A comma separated list of elements attributes to be removed when executing | ||
178 | * the `remove format` command. | ||
179 | * | ||
180 | * @cfg | ||
181 | * @member CKEDITOR.config | ||
182 | */ | ||
183 | CKEDITOR.config.removeFormatAttributes = 'class,style,lang,width,height,align,hspace,valign'; | ||
184 | |||
185 | /** | ||
186 | * Fired after an element was cleaned by the removeFormat plugin. | ||
187 | * | ||
188 | * @event removeFormatCleanup | ||
189 | * @member CKEDITOR.editor | ||
190 | * @param {CKEDITOR.editor} editor This editor instance. | ||
191 | * @param data | ||
192 | * @param {CKEDITOR.dom.element} data.element The element that was cleaned up. | ||
193 | */ | ||
diff --git a/sources/plugins/resize/plugin.js b/sources/plugins/resize/plugin.js new file mode 100644 index 0000000..be9673d --- /dev/null +++ b/sources/plugins/resize/plugin.js | |||
@@ -0,0 +1,187 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.add( 'resize', { | ||
7 | init: function( editor ) { | ||
8 | function dragHandler( evt ) { | ||
9 | var dx = evt.data.$.screenX - origin.x, | ||
10 | dy = evt.data.$.screenY - origin.y, | ||
11 | width = startSize.width, | ||
12 | height = startSize.height, | ||
13 | internalWidth = width + dx * ( resizeDir == 'rtl' ? -1 : 1 ), | ||
14 | internalHeight = height + dy; | ||
15 | |||
16 | if ( resizeHorizontal ) | ||
17 | width = Math.max( config.resize_minWidth, Math.min( internalWidth, config.resize_maxWidth ) ); | ||
18 | |||
19 | if ( resizeVertical ) | ||
20 | height = Math.max( config.resize_minHeight, Math.min( internalHeight, config.resize_maxHeight ) ); | ||
21 | |||
22 | // DO NOT impose fixed size with single direction resize. (#6308) | ||
23 | editor.resize( resizeHorizontal ? width : null, height ); | ||
24 | } | ||
25 | |||
26 | function dragEndHandler() { | ||
27 | CKEDITOR.document.removeListener( 'mousemove', dragHandler ); | ||
28 | CKEDITOR.document.removeListener( 'mouseup', dragEndHandler ); | ||
29 | |||
30 | if ( editor.document ) { | ||
31 | editor.document.removeListener( 'mousemove', dragHandler ); | ||
32 | editor.document.removeListener( 'mouseup', dragEndHandler ); | ||
33 | } | ||
34 | } | ||
35 | |||
36 | var config = editor.config; | ||
37 | var spaceId = editor.ui.spaceId( 'resizer' ); | ||
38 | |||
39 | // Resize in the same direction of chrome, | ||
40 | // which is identical to dir of editor element. (#6614) | ||
41 | var resizeDir = editor.element ? editor.element.getDirection( 1 ) : 'ltr'; | ||
42 | |||
43 | !config.resize_dir && ( config.resize_dir = 'vertical' ); | ||
44 | ( config.resize_maxWidth === undefined ) && ( config.resize_maxWidth = 3000 ); | ||
45 | ( config.resize_maxHeight === undefined ) && ( config.resize_maxHeight = 3000 ); | ||
46 | ( config.resize_minWidth === undefined ) && ( config.resize_minWidth = 750 ); | ||
47 | ( config.resize_minHeight === undefined ) && ( config.resize_minHeight = 250 ); | ||
48 | |||
49 | if ( config.resize_enabled !== false ) { | ||
50 | var container = null, | ||
51 | origin, startSize, | ||
52 | resizeHorizontal = ( config.resize_dir == 'both' || config.resize_dir == 'horizontal' ) && ( config.resize_minWidth != config.resize_maxWidth ), | ||
53 | resizeVertical = ( config.resize_dir == 'both' || config.resize_dir == 'vertical' ) && ( config.resize_minHeight != config.resize_maxHeight ); | ||
54 | |||
55 | var mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) { | ||
56 | if ( !container ) | ||
57 | container = editor.getResizable(); | ||
58 | |||
59 | startSize = { width: container.$.offsetWidth || 0, height: container.$.offsetHeight || 0 }; | ||
60 | origin = { x: $event.screenX, y: $event.screenY }; | ||
61 | |||
62 | config.resize_minWidth > startSize.width && ( config.resize_minWidth = startSize.width ); | ||
63 | config.resize_minHeight > startSize.height && ( config.resize_minHeight = startSize.height ); | ||
64 | |||
65 | CKEDITOR.document.on( 'mousemove', dragHandler ); | ||
66 | CKEDITOR.document.on( 'mouseup', dragEndHandler ); | ||
67 | |||
68 | if ( editor.document ) { | ||
69 | editor.document.on( 'mousemove', dragHandler ); | ||
70 | editor.document.on( 'mouseup', dragEndHandler ); | ||
71 | } | ||
72 | |||
73 | $event.preventDefault && $event.preventDefault(); | ||
74 | } ); | ||
75 | |||
76 | editor.on( 'destroy', function() { | ||
77 | CKEDITOR.tools.removeFunction( mouseDownFn ); | ||
78 | } ); | ||
79 | |||
80 | editor.on( 'uiSpace', function( event ) { | ||
81 | if ( event.data.space == 'bottom' ) { | ||
82 | var direction = ''; | ||
83 | if ( resizeHorizontal && !resizeVertical ) | ||
84 | direction = ' cke_resizer_horizontal'; | ||
85 | if ( !resizeHorizontal && resizeVertical ) | ||
86 | direction = ' cke_resizer_vertical'; | ||
87 | |||
88 | var resizerHtml = | ||
89 | '<span' + | ||
90 | ' id="' + spaceId + '"' + | ||
91 | ' class="cke_resizer' + direction + ' cke_resizer_' + resizeDir + '"' + | ||
92 | ' title="' + CKEDITOR.tools.htmlEncode( editor.lang.common.resize ) + '"' + | ||
93 | ' onmousedown="CKEDITOR.tools.callFunction(' + mouseDownFn + ', event)"' + | ||
94 | '>' + | ||
95 | // BLACK LOWER RIGHT TRIANGLE (ltr) | ||
96 | // BLACK LOWER LEFT TRIANGLE (rtl) | ||
97 | ( resizeDir == 'ltr' ? '\u25E2' : '\u25E3' ) + | ||
98 | '</span>'; | ||
99 | |||
100 | // Always sticks the corner of botttom space. | ||
101 | resizeDir == 'ltr' && direction == 'ltr' ? event.data.html += resizerHtml : event.data.html = resizerHtml + event.data.html; | ||
102 | } | ||
103 | }, editor, null, 100 ); | ||
104 | |||
105 | // Toggle the visibility of the resizer when an editor is being maximized or minimized. | ||
106 | editor.on( 'maximize', function( event ) { | ||
107 | editor.ui.space( 'resizer' )[ event.data == CKEDITOR.TRISTATE_ON ? 'hide' : 'show' ](); | ||
108 | } ); | ||
109 | } | ||
110 | } | ||
111 | } ); | ||
112 | |||
113 | /** | ||
114 | * The minimum editor width, in pixels, when resizing the editor interface by using the resize handle. | ||
115 | * Note: It falls back to editor's actual width if it is smaller than the default value. | ||
116 | * | ||
117 | * Read more in the [documentation](#!/guide/dev_resize) | ||
118 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html). | ||
119 | * | ||
120 | * config.resize_minWidth = 500; | ||
121 | * | ||
122 | * @cfg {Number} [resize_minWidth=750] | ||
123 | * @member CKEDITOR.config | ||
124 | */ | ||
125 | |||
126 | /** | ||
127 | * The minimum editor height, in pixels, when resizing the editor interface by using the resize handle. | ||
128 | * Note: It falls back to editor's actual height if it is smaller than the default value. | ||
129 | * | ||
130 | * Read more in the [documentation](#!/guide/dev_resize) | ||
131 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html). | ||
132 | * | ||
133 | * config.resize_minHeight = 600; | ||
134 | * | ||
135 | * @cfg {Number} [resize_minHeight=250] | ||
136 | * @member CKEDITOR.config | ||
137 | */ | ||
138 | |||
139 | /** | ||
140 | * The maximum editor width, in pixels, when resizing the editor interface by using the resize handle. | ||
141 | * | ||
142 | * Read more in the [documentation](#!/guide/dev_resize) | ||
143 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html). | ||
144 | * | ||
145 | * config.resize_maxWidth = 750; | ||
146 | * | ||
147 | * @cfg {Number} [resize_maxWidth=3000] | ||
148 | * @member CKEDITOR.config | ||
149 | */ | ||
150 | |||
151 | /** | ||
152 | * The maximum editor height, in pixels, when resizing the editor interface by using the resize handle. | ||
153 | * | ||
154 | * Read more in the [documentation](#!/guide/dev_resize) | ||
155 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html). | ||
156 | * | ||
157 | * config.resize_maxHeight = 600; | ||
158 | * | ||
159 | * @cfg {Number} [resize_maxHeight=3000] | ||
160 | * @member CKEDITOR.config | ||
161 | */ | ||
162 | |||
163 | /** | ||
164 | * Whether to enable the resizing feature. If this feature is disabled, the resize handle will not be visible. | ||
165 | * | ||
166 | * Read more in the [documentation](#!/guide/dev_resize) | ||
167 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html). | ||
168 | * | ||
169 | * config.resize_enabled = false; | ||
170 | * | ||
171 | * @cfg {Boolean} [resize_enabled=true] | ||
172 | * @member CKEDITOR.config | ||
173 | */ | ||
174 | |||
175 | /** | ||
176 | * The dimensions for which the editor resizing is enabled. Possible values | ||
177 | * are `both`, `vertical`, and `horizontal`. | ||
178 | * | ||
179 | * Read more in the [documentation](#!/guide/dev_resize) | ||
180 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html). | ||
181 | * | ||
182 | * config.resize_dir = 'both'; | ||
183 | * | ||
184 | * @since 3.3 | ||
185 | * @cfg {String} [resize_dir='vertical'] | ||
186 | * @member CKEDITOR.config | ||
187 | */ | ||
diff --git a/sources/plugins/richcombo/plugin.js b/sources/plugins/richcombo/plugin.js new file mode 100644 index 0000000..67ccc8e --- /dev/null +++ b/sources/plugins/richcombo/plugin.js | |||
@@ -0,0 +1,434 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | CKEDITOR.plugins.add( 'richcombo', { | ||
7 | requires: 'floatpanel,listblock,button', | ||
8 | |||
9 | beforeInit: function( editor ) { | ||
10 | editor.ui.addHandler( CKEDITOR.UI_RICHCOMBO, CKEDITOR.ui.richCombo.handler ); | ||
11 | } | ||
12 | } ); | ||
13 | |||
14 | ( function() { | ||
15 | var template = '<span id="{id}"' + | ||
16 | ' class="cke_combo cke_combo__{name} {cls}"' + | ||
17 | ' role="presentation">' + | ||
18 | '<span id="{id}_label" class="cke_combo_label">{label}</span>' + | ||
19 | '<a class="cke_combo_button" title="{title}" tabindex="-1"' + | ||
20 | ( CKEDITOR.env.gecko && !CKEDITOR.env.hc ? '' : ' href="javascript:void(\'{titleJs}\')"' ) + | ||
21 | ' hidefocus="true"' + | ||
22 | ' role="button"' + | ||
23 | ' aria-labelledby="{id}_label"' + | ||
24 | ' aria-haspopup="true"'; | ||
25 | |||
26 | // Some browsers don't cancel key events in the keydown but in the | ||
27 | // keypress. | ||
28 | // TODO: Check if really needed. | ||
29 | if ( CKEDITOR.env.gecko && CKEDITOR.env.mac ) | ||
30 | template += ' onkeypress="return false;"'; | ||
31 | |||
32 | // With Firefox, we need to force the button to redraw, otherwise it | ||
33 | // will remain in the focus state. | ||
34 | if ( CKEDITOR.env.gecko ) | ||
35 | template += ' onblur="this.style.cssText = this.style.cssText;"'; | ||
36 | |||
37 | template += | ||
38 | ' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event,this);"' + | ||
39 | ' onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" ' + | ||
40 | ( CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick' ) + // #188 | ||
41 | '="CKEDITOR.tools.callFunction({clickFn},this);return false;">' + | ||
42 | '<span id="{id}_text" class="cke_combo_text cke_combo_inlinelabel">{label}</span>' + | ||
43 | '<span class="cke_combo_open">' + | ||
44 | '<span class="cke_combo_arrow">' + | ||
45 | // BLACK DOWN-POINTING TRIANGLE | ||
46 | ( CKEDITOR.env.hc ? '▼' : CKEDITOR.env.air ? ' ' : '' ) + | ||
47 | '</span>' + | ||
48 | '</span>' + | ||
49 | '</a>' + | ||
50 | '</span>'; | ||
51 | |||
52 | var rcomboTpl = CKEDITOR.addTemplate( 'combo', template ); | ||
53 | |||
54 | /** | ||
55 | * Button UI element. | ||
56 | * | ||
57 | * @readonly | ||
58 | * @property {String} [='richcombo'] | ||
59 | * @member CKEDITOR | ||
60 | */ | ||
61 | CKEDITOR.UI_RICHCOMBO = 'richcombo'; | ||
62 | |||
63 | /** | ||
64 | * @class | ||
65 | * @todo | ||
66 | */ | ||
67 | CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass( { | ||
68 | $: function( definition ) { | ||
69 | // Copy all definition properties to this object. | ||
70 | CKEDITOR.tools.extend( this, definition, | ||
71 | // Set defaults. | ||
72 | { | ||
73 | // The combo won't participate in toolbar grouping. | ||
74 | canGroup: false, | ||
75 | title: definition.label, | ||
76 | modes: { wysiwyg: 1 }, | ||
77 | editorFocus: 1 | ||
78 | } ); | ||
79 | |||
80 | // We don't want the panel definition in this object. | ||
81 | var panelDefinition = this.panel || {}; | ||
82 | delete this.panel; | ||
83 | |||
84 | this.id = CKEDITOR.tools.getNextNumber(); | ||
85 | |||
86 | this.document = ( panelDefinition.parent && panelDefinition.parent.getDocument() ) || CKEDITOR.document; | ||
87 | |||
88 | panelDefinition.className = 'cke_combopanel'; | ||
89 | panelDefinition.block = { | ||
90 | multiSelect: panelDefinition.multiSelect, | ||
91 | attributes: panelDefinition.attributes | ||
92 | }; | ||
93 | panelDefinition.toolbarRelated = true; | ||
94 | |||
95 | this._ = { | ||
96 | panelDefinition: panelDefinition, | ||
97 | items: {} | ||
98 | }; | ||
99 | }, | ||
100 | |||
101 | proto: { | ||
102 | renderHtml: function( editor ) { | ||
103 | var output = []; | ||
104 | this.render( editor, output ); | ||
105 | return output.join( '' ); | ||
106 | }, | ||
107 | |||
108 | /** | ||
109 | * Renders the combo. | ||
110 | * | ||
111 | * @param {CKEDITOR.editor} editor The editor instance which this button is | ||
112 | * to be used by. | ||
113 | * @param {Array} output The output array to which append the HTML relative | ||
114 | * to this button. | ||
115 | */ | ||
116 | render: function( editor, output ) { | ||
117 | var env = CKEDITOR.env; | ||
118 | |||
119 | var id = 'cke_' + this.id; | ||
120 | var clickFn = CKEDITOR.tools.addFunction( function( el ) { | ||
121 | // Restore locked selection in Opera. | ||
122 | if ( selLocked ) { | ||
123 | editor.unlockSelection( 1 ); | ||
124 | selLocked = 0; | ||
125 | } | ||
126 | instance.execute( el ); | ||
127 | }, this ); | ||
128 | |||
129 | var combo = this; | ||
130 | var instance = { | ||
131 | id: id, | ||
132 | combo: this, | ||
133 | focus: function() { | ||
134 | var element = CKEDITOR.document.getById( id ).getChild( 1 ); | ||
135 | element.focus(); | ||
136 | }, | ||
137 | execute: function( el ) { | ||
138 | var _ = combo._; | ||
139 | |||
140 | if ( _.state == CKEDITOR.TRISTATE_DISABLED ) | ||
141 | return; | ||
142 | |||
143 | combo.createPanel( editor ); | ||
144 | |||
145 | if ( _.on ) { | ||
146 | _.panel.hide(); | ||
147 | return; | ||
148 | } | ||
149 | |||
150 | combo.commit(); | ||
151 | var value = combo.getValue(); | ||
152 | if ( value ) | ||
153 | _.list.mark( value ); | ||
154 | else | ||
155 | _.list.unmarkAll(); | ||
156 | |||
157 | _.panel.showBlock( combo.id, new CKEDITOR.dom.element( el ), 4 ); | ||
158 | }, | ||
159 | clickFn: clickFn | ||
160 | }; | ||
161 | |||
162 | function updateState() { | ||
163 | // Don't change state while richcombo is active (#11793). | ||
164 | if ( this.getState() == CKEDITOR.TRISTATE_ON ) | ||
165 | return; | ||
166 | |||
167 | var state = this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; | ||
168 | |||
169 | if ( editor.readOnly && !this.readOnly ) | ||
170 | state = CKEDITOR.TRISTATE_DISABLED; | ||
171 | |||
172 | this.setState( state ); | ||
173 | this.setValue( '' ); | ||
174 | |||
175 | // Let plugin to disable button. | ||
176 | if ( state != CKEDITOR.TRISTATE_DISABLED && this.refresh ) | ||
177 | this.refresh(); | ||
178 | } | ||
179 | |||
180 | // Update status when activeFilter, mode, selection or readOnly changes. | ||
181 | editor.on( 'activeFilterChange', updateState, this ); | ||
182 | editor.on( 'mode', updateState, this ); | ||
183 | editor.on( 'selectionChange', updateState, this ); | ||
184 | // If this combo is sensitive to readOnly state, update it accordingly. | ||
185 | !this.readOnly && editor.on( 'readOnly', updateState, this ); | ||
186 | |||
187 | var keyDownFn = CKEDITOR.tools.addFunction( function( ev, element ) { | ||
188 | ev = new CKEDITOR.dom.event( ev ); | ||
189 | |||
190 | var keystroke = ev.getKeystroke(); | ||
191 | |||
192 | // ARROW-DOWN | ||
193 | // This call is duplicated in plugins/toolbar/plugin.js in itemKeystroke(). | ||
194 | // Move focus to the first element after drop down was opened by the arrow down key. | ||
195 | if ( keystroke == 40 ) { | ||
196 | editor.once( 'panelShow', function( evt ) { | ||
197 | evt.data._.panel._.currentBlock.onKeyDown( 40 ); | ||
198 | } ); | ||
199 | } | ||
200 | |||
201 | switch ( keystroke ) { | ||
202 | case 13: // ENTER | ||
203 | case 32: // SPACE | ||
204 | case 40: // ARROW-DOWN | ||
205 | // Show panel | ||
206 | CKEDITOR.tools.callFunction( clickFn, element ); | ||
207 | break; | ||
208 | default: | ||
209 | // Delegate the default behavior to toolbar button key handling. | ||
210 | instance.onkey( instance, keystroke ); | ||
211 | } | ||
212 | |||
213 | // Avoid subsequent focus grab on editor document. | ||
214 | ev.preventDefault(); | ||
215 | } ); | ||
216 | |||
217 | var focusFn = CKEDITOR.tools.addFunction( function() { | ||
218 | instance.onfocus && instance.onfocus(); | ||
219 | } ); | ||
220 | |||
221 | var selLocked = 0; | ||
222 | |||
223 | // For clean up | ||
224 | instance.keyDownFn = keyDownFn; | ||
225 | |||
226 | var params = { | ||
227 | id: id, | ||
228 | name: this.name || this.command, | ||
229 | label: this.label, | ||
230 | title: this.title, | ||
231 | cls: this.className || '', | ||
232 | titleJs: env.gecko && !env.hc ? '' : ( this.title || '' ).replace( "'", '' ), | ||
233 | keydownFn: keyDownFn, | ||
234 | focusFn: focusFn, | ||
235 | clickFn: clickFn | ||
236 | }; | ||
237 | |||
238 | rcomboTpl.output( params, output ); | ||
239 | |||
240 | if ( this.onRender ) | ||
241 | this.onRender(); | ||
242 | |||
243 | return instance; | ||
244 | }, | ||
245 | |||
246 | createPanel: function( editor ) { | ||
247 | if ( this._.panel ) | ||
248 | return; | ||
249 | |||
250 | var panelDefinition = this._.panelDefinition, | ||
251 | panelBlockDefinition = this._.panelDefinition.block, | ||
252 | panelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(), | ||
253 | namedPanelCls = 'cke_combopanel__' + this.name, | ||
254 | panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ), | ||
255 | list = panel.addListBlock( this.id, panelBlockDefinition ), | ||
256 | me = this; | ||
257 | |||
258 | panel.onShow = function() { | ||
259 | this.element.addClass( namedPanelCls ); | ||
260 | |||
261 | me.setState( CKEDITOR.TRISTATE_ON ); | ||
262 | |||
263 | me._.on = 1; | ||
264 | |||
265 | me.editorFocus && !editor.focusManager.hasFocus && editor.focus(); | ||
266 | |||
267 | if ( me.onOpen ) | ||
268 | me.onOpen(); | ||
269 | |||
270 | // The "panelShow" event is fired assinchronously, after the | ||
271 | // onShow method call. | ||
272 | editor.once( 'panelShow', function() { | ||
273 | list.focus( !list.multiSelect && me.getValue() ); | ||
274 | } ); | ||
275 | }; | ||
276 | |||
277 | panel.onHide = function( preventOnClose ) { | ||
278 | this.element.removeClass( namedPanelCls ); | ||
279 | |||
280 | me.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED ); | ||
281 | |||
282 | me._.on = 0; | ||
283 | |||
284 | if ( !preventOnClose && me.onClose ) | ||
285 | me.onClose(); | ||
286 | }; | ||
287 | |||
288 | panel.onEscape = function() { | ||
289 | // Hide drop-down with focus returned. | ||
290 | panel.hide( 1 ); | ||
291 | }; | ||
292 | |||
293 | list.onClick = function( value, marked ) { | ||
294 | |||
295 | if ( me.onClick ) | ||
296 | me.onClick.call( me, value, marked ); | ||
297 | |||
298 | panel.hide(); | ||
299 | }; | ||
300 | |||
301 | this._.panel = panel; | ||
302 | this._.list = list; | ||
303 | |||
304 | panel.getBlock( this.id ).onHide = function() { | ||
305 | me._.on = 0; | ||
306 | me.setState( CKEDITOR.TRISTATE_OFF ); | ||
307 | }; | ||
308 | |||
309 | if ( this.init ) | ||
310 | this.init(); | ||
311 | }, | ||
312 | |||
313 | setValue: function( value, text ) { | ||
314 | this._.value = value; | ||
315 | |||
316 | var textElement = this.document.getById( 'cke_' + this.id + '_text' ); | ||
317 | if ( textElement ) { | ||
318 | if ( !( value || text ) ) { | ||
319 | text = this.label; | ||
320 | textElement.addClass( 'cke_combo_inlinelabel' ); | ||
321 | } else { | ||
322 | textElement.removeClass( 'cke_combo_inlinelabel' ); | ||
323 | } | ||
324 | |||
325 | textElement.setText( typeof text != 'undefined' ? text : value ); | ||
326 | } | ||
327 | }, | ||
328 | |||
329 | getValue: function() { | ||
330 | return this._.value || ''; | ||
331 | }, | ||
332 | |||
333 | unmarkAll: function() { | ||
334 | this._.list.unmarkAll(); | ||
335 | }, | ||
336 | |||
337 | mark: function( value ) { | ||
338 | this._.list.mark( value ); | ||
339 | }, | ||
340 | |||
341 | hideItem: function( value ) { | ||
342 | this._.list.hideItem( value ); | ||
343 | }, | ||
344 | |||
345 | hideGroup: function( groupTitle ) { | ||
346 | this._.list.hideGroup( groupTitle ); | ||
347 | }, | ||
348 | |||
349 | showAll: function() { | ||
350 | this._.list.showAll(); | ||
351 | }, | ||
352 | |||
353 | add: function( value, html, text ) { | ||
354 | this._.items[ value ] = text || value; | ||
355 | this._.list.add( value, html, text ); | ||
356 | }, | ||
357 | |||
358 | startGroup: function( title ) { | ||
359 | this._.list.startGroup( title ); | ||
360 | }, | ||
361 | |||
362 | commit: function() { | ||
363 | if ( !this._.committed ) { | ||
364 | this._.list.commit(); | ||
365 | this._.committed = 1; | ||
366 | CKEDITOR.ui.fire( 'ready', this ); | ||
367 | } | ||
368 | this._.committed = 1; | ||
369 | }, | ||
370 | |||
371 | setState: function( state ) { | ||
372 | if ( this._.state == state ) | ||
373 | return; | ||
374 | |||
375 | var el = this.document.getById( 'cke_' + this.id ); | ||
376 | el.setState( state, 'cke_combo' ); | ||
377 | |||
378 | state == CKEDITOR.TRISTATE_DISABLED ? | ||
379 | el.setAttribute( 'aria-disabled', true ) : | ||
380 | el.removeAttribute( 'aria-disabled' ); | ||
381 | |||
382 | this._.state = state; | ||
383 | }, | ||
384 | |||
385 | getState: function() { | ||
386 | return this._.state; | ||
387 | }, | ||
388 | |||
389 | enable: function() { | ||
390 | if ( this._.state == CKEDITOR.TRISTATE_DISABLED ) | ||
391 | this.setState( this._.lastState ); | ||
392 | }, | ||
393 | |||
394 | disable: function() { | ||
395 | if ( this._.state != CKEDITOR.TRISTATE_DISABLED ) { | ||
396 | this._.lastState = this._.state; | ||
397 | this.setState( CKEDITOR.TRISTATE_DISABLED ); | ||
398 | } | ||
399 | } | ||
400 | }, | ||
401 | |||
402 | /** | ||
403 | * Represents richCombo handler object. | ||
404 | * | ||
405 | * @class CKEDITOR.ui.richCombo.handler | ||
406 | * @singleton | ||
407 | * @extends CKEDITOR.ui.handlerDefinition | ||
408 | */ | ||
409 | statics: { | ||
410 | handler: { | ||
411 | /** | ||
412 | * Transforms a richCombo definition in a {@link CKEDITOR.ui.richCombo} instance. | ||
413 | * | ||
414 | * @param {Object} definition | ||
415 | * @returns {CKEDITOR.ui.richCombo} | ||
416 | */ | ||
417 | create: function( definition ) { | ||
418 | return new CKEDITOR.ui.richCombo( definition ); | ||
419 | } | ||
420 | } | ||
421 | } | ||
422 | } ); | ||
423 | |||
424 | /** | ||
425 | * @param {String} name | ||
426 | * @param {Object} definition | ||
427 | * @member CKEDITOR.ui | ||
428 | * @todo | ||
429 | */ | ||
430 | CKEDITOR.ui.prototype.addRichCombo = function( name, definition ) { | ||
431 | this.add( name, CKEDITOR.UI_RICHCOMBO, definition ); | ||
432 | }; | ||
433 | |||
434 | } )(); | ||
diff --git a/sources/plugins/showborders/plugin.js b/sources/plugins/showborders/plugin.js new file mode 100644 index 0000000..e9140f9 --- /dev/null +++ b/sources/plugins/showborders/plugin.js | |||
@@ -0,0 +1,174 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview The "show border" plugin. The command display visible outline | ||
8 | * border line around all table elements if table doesn't have a none-zero 'border' attribute specified. | ||
9 | */ | ||
10 | |||
11 | ( function() { | ||
12 | var commandDefinition = { | ||
13 | preserveState: true, | ||
14 | editorFocus: false, | ||
15 | readOnly: 1, | ||
16 | |||
17 | exec: function( editor ) { | ||
18 | this.toggleState(); | ||
19 | this.refresh( editor ); | ||
20 | }, | ||
21 | |||
22 | refresh: function( editor ) { | ||
23 | if ( editor.document ) { | ||
24 | var funcName = ( this.state == CKEDITOR.TRISTATE_ON ) ? 'attachClass' : 'removeClass'; | ||
25 | editor.editable()[ funcName ]( 'cke_show_borders' ); | ||
26 | } | ||
27 | } | ||
28 | }; | ||
29 | |||
30 | var showBorderClassName = 'cke_show_border'; | ||
31 | |||
32 | CKEDITOR.plugins.add( 'showborders', { | ||
33 | modes: { 'wysiwyg': 1 }, | ||
34 | |||
35 | onLoad: function() { | ||
36 | var cssStyleText, | ||
37 | cssTemplate = | ||
38 | // TODO: For IE6, we don't have child selector support, | ||
39 | // where nested table cells could be incorrect. | ||
40 | ( CKEDITOR.env.ie6Compat ? [ | ||
41 | '.%1 table.%2,', | ||
42 | '.%1 table.%2 td, .%1 table.%2 th', | ||
43 | '{', | ||
44 | 'border : #d3d3d3 1px dotted', | ||
45 | '}' | ||
46 | ] : [ | ||
47 | '.%1 table.%2,', | ||
48 | '.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,', | ||
49 | '.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,', | ||
50 | '.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,', | ||
51 | '.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th', | ||
52 | '{', | ||
53 | 'border : #d3d3d3 1px dotted', | ||
54 | '}' | ||
55 | ] ).join( '' ); | ||
56 | |||
57 | cssStyleText = cssTemplate.replace( /%2/g, showBorderClassName ).replace( /%1/g, 'cke_show_borders ' ); | ||
58 | |||
59 | CKEDITOR.addCss( cssStyleText ); | ||
60 | }, | ||
61 | |||
62 | init: function( editor ) { | ||
63 | |||
64 | var command = editor.addCommand( 'showborders', commandDefinition ); | ||
65 | command.canUndo = false; | ||
66 | |||
67 | if ( editor.config.startupShowBorders !== false ) | ||
68 | command.setState( CKEDITOR.TRISTATE_ON ); | ||
69 | |||
70 | // Refresh the command on setData. | ||
71 | editor.on( 'mode', function() { | ||
72 | if ( command.state != CKEDITOR.TRISTATE_DISABLED ) | ||
73 | command.refresh( editor ); | ||
74 | }, null, null, 100 ); | ||
75 | |||
76 | // Refresh the command on wysiwyg frame reloads. | ||
77 | editor.on( 'contentDom', function() { | ||
78 | if ( command.state != CKEDITOR.TRISTATE_DISABLED ) | ||
79 | command.refresh( editor ); | ||
80 | } ); | ||
81 | |||
82 | editor.on( 'removeFormatCleanup', function( evt ) { | ||
83 | var element = evt.data; | ||
84 | if ( editor.getCommand( 'showborders' ).state == CKEDITOR.TRISTATE_ON && element.is( 'table' ) && ( !element.hasAttribute( 'border' ) || parseInt( element.getAttribute( 'border' ), 10 ) <= 0 ) ) | ||
85 | element.addClass( showBorderClassName ); | ||
86 | } ); | ||
87 | }, | ||
88 | |||
89 | afterInit: function( editor ) { | ||
90 | var dataProcessor = editor.dataProcessor, | ||
91 | dataFilter = dataProcessor && dataProcessor.dataFilter, | ||
92 | htmlFilter = dataProcessor && dataProcessor.htmlFilter; | ||
93 | |||
94 | if ( dataFilter ) { | ||
95 | dataFilter.addRules( { | ||
96 | elements: { | ||
97 | 'table': function( element ) { | ||
98 | var attributes = element.attributes, | ||
99 | cssClass = attributes[ 'class' ], | ||
100 | border = parseInt( attributes.border, 10 ); | ||
101 | |||
102 | if ( ( !border || border <= 0 ) && ( !cssClass || cssClass.indexOf( showBorderClassName ) == -1 ) ) | ||
103 | attributes[ 'class' ] = ( cssClass || '' ) + ' ' + showBorderClassName; | ||
104 | } | ||
105 | } | ||
106 | } ); | ||
107 | } | ||
108 | |||
109 | if ( htmlFilter ) { | ||
110 | htmlFilter.addRules( { | ||
111 | elements: { | ||
112 | 'table': function( table ) { | ||
113 | var attributes = table.attributes, | ||
114 | cssClass = attributes[ 'class' ]; | ||
115 | |||
116 | cssClass && ( attributes[ 'class' ] = cssClass.replace( showBorderClassName, '' ).replace( /\s{2}/, ' ' ).replace( /^\s+|\s+$/, '' ) ); | ||
117 | } | ||
118 | } | ||
119 | } ); | ||
120 | } | ||
121 | } | ||
122 | } ); | ||
123 | |||
124 | // Table dialog must be aware of it. | ||
125 | CKEDITOR.on( 'dialogDefinition', function( ev ) { | ||
126 | var dialogName = ev.data.name; | ||
127 | |||
128 | if ( dialogName == 'table' || dialogName == 'tableProperties' ) { | ||
129 | var dialogDefinition = ev.data.definition, | ||
130 | infoTab = dialogDefinition.getContents( 'info' ), | ||
131 | borderField = infoTab.get( 'txtBorder' ), | ||
132 | originalCommit = borderField.commit; | ||
133 | |||
134 | borderField.commit = CKEDITOR.tools.override( originalCommit, function( org ) { | ||
135 | return function( data, selectedTable ) { | ||
136 | org.apply( this, arguments ); | ||
137 | var value = parseInt( this.getValue(), 10 ); | ||
138 | selectedTable[ ( !value || value <= 0 ) ? 'addClass' : 'removeClass' ]( showBorderClassName ); | ||
139 | }; | ||
140 | } ); | ||
141 | |||
142 | var advTab = dialogDefinition.getContents( 'advanced' ), | ||
143 | classField = advTab && advTab.get( 'advCSSClasses' ); | ||
144 | |||
145 | if ( classField ) { | ||
146 | classField.setup = CKEDITOR.tools.override( classField.setup, function( originalSetup ) { | ||
147 | return function() { | ||
148 | originalSetup.apply( this, arguments ); | ||
149 | this.setValue( this.getValue().replace( /cke_show_border/, '' ) ); | ||
150 | }; | ||
151 | } ); | ||
152 | |||
153 | classField.commit = CKEDITOR.tools.override( classField.commit, function( originalCommit ) { | ||
154 | return function( data, element ) { | ||
155 | originalCommit.apply( this, arguments ); | ||
156 | |||
157 | if ( !parseInt( element.getAttribute( 'border' ), 10 ) ) | ||
158 | element.addClass( 'cke_show_border' ); | ||
159 | }; | ||
160 | } ); | ||
161 | } | ||
162 | } | ||
163 | } ); | ||
164 | |||
165 | } )(); | ||
166 | |||
167 | /** | ||
168 | * Whether to automatically enable the "show borders" command when the editor loads. | ||
169 | * | ||
170 | * config.startupShowBorders = false; | ||
171 | * | ||
172 | * @cfg {Boolean} [startupShowBorders=true] | ||
173 | * @member CKEDITOR.config | ||
174 | */ | ||
diff --git a/sources/plugins/sourcearea/icons/hidpi/source-rtl.png b/sources/plugins/sourcearea/icons/hidpi/source-rtl.png new file mode 100644 index 0000000..adf4af3 --- /dev/null +++ b/sources/plugins/sourcearea/icons/hidpi/source-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/sourcearea/icons/hidpi/source.png b/sources/plugins/sourcearea/icons/hidpi/source.png new file mode 100644 index 0000000..b4d0a15 --- /dev/null +++ b/sources/plugins/sourcearea/icons/hidpi/source.png | |||
Binary files differ | |||
diff --git a/sources/plugins/sourcearea/icons/source-rtl.png b/sources/plugins/sourcearea/icons/source-rtl.png new file mode 100644 index 0000000..27d1ba8 --- /dev/null +++ b/sources/plugins/sourcearea/icons/source-rtl.png | |||
Binary files differ | |||
diff --git a/sources/plugins/sourcearea/icons/source.png b/sources/plugins/sourcearea/icons/source.png new file mode 100644 index 0000000..e44db37 --- /dev/null +++ b/sources/plugins/sourcearea/icons/source.png | |||
Binary files differ | |||
diff --git a/sources/plugins/sourcearea/lang/af.js b/sources/plugins/sourcearea/lang/af.js new file mode 100644 index 0000000..18cd8fd --- /dev/null +++ b/sources/plugins/sourcearea/lang/af.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'af', { | ||
6 | toolbar: 'Bron' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/ar.js b/sources/plugins/sourcearea/lang/ar.js new file mode 100644 index 0000000..75a8912 --- /dev/null +++ b/sources/plugins/sourcearea/lang/ar.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'ar', { | ||
6 | toolbar: 'المصدر' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/bg.js b/sources/plugins/sourcearea/lang/bg.js new file mode 100644 index 0000000..7c87fc8 --- /dev/null +++ b/sources/plugins/sourcearea/lang/bg.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'bg', { | ||
6 | toolbar: 'Изходен код' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/bn.js b/sources/plugins/sourcearea/lang/bn.js new file mode 100644 index 0000000..d09d00f --- /dev/null +++ b/sources/plugins/sourcearea/lang/bn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'bn', { | ||
6 | toolbar: 'সোর্স' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/bs.js b/sources/plugins/sourcearea/lang/bs.js new file mode 100644 index 0000000..a422d37 --- /dev/null +++ b/sources/plugins/sourcearea/lang/bs.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'bs', { | ||
6 | toolbar: 'HTML kôd' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/ca.js b/sources/plugins/sourcearea/lang/ca.js new file mode 100644 index 0000000..791ca16 --- /dev/null +++ b/sources/plugins/sourcearea/lang/ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'ca', { | ||
6 | toolbar: 'Codi font' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/cs.js b/sources/plugins/sourcearea/lang/cs.js new file mode 100644 index 0000000..acbd886 --- /dev/null +++ b/sources/plugins/sourcearea/lang/cs.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'cs', { | ||
6 | toolbar: 'Zdroj' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/cy.js b/sources/plugins/sourcearea/lang/cy.js new file mode 100644 index 0000000..4d2cd74 --- /dev/null +++ b/sources/plugins/sourcearea/lang/cy.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'cy', { | ||
6 | toolbar: 'HTML' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/da.js b/sources/plugins/sourcearea/lang/da.js new file mode 100644 index 0000000..e0a2dfd --- /dev/null +++ b/sources/plugins/sourcearea/lang/da.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'da', { | ||
6 | toolbar: 'Kilde' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/de-ch.js b/sources/plugins/sourcearea/lang/de-ch.js new file mode 100644 index 0000000..37a859d --- /dev/null +++ b/sources/plugins/sourcearea/lang/de-ch.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'de-ch', { | ||
6 | toolbar: 'Quellcode' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/de.js b/sources/plugins/sourcearea/lang/de.js new file mode 100644 index 0000000..102461e --- /dev/null +++ b/sources/plugins/sourcearea/lang/de.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'de', { | ||
6 | toolbar: 'Quellcode' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/el.js b/sources/plugins/sourcearea/lang/el.js new file mode 100644 index 0000000..e830f32 --- /dev/null +++ b/sources/plugins/sourcearea/lang/el.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'el', { | ||
6 | toolbar: 'Κώδικας' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/en-au.js b/sources/plugins/sourcearea/lang/en-au.js new file mode 100644 index 0000000..ce7ac13 --- /dev/null +++ b/sources/plugins/sourcearea/lang/en-au.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'en-au', { | ||
6 | toolbar: 'Source' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/en-ca.js b/sources/plugins/sourcearea/lang/en-ca.js new file mode 100644 index 0000000..302baa0 --- /dev/null +++ b/sources/plugins/sourcearea/lang/en-ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'en-ca', { | ||
6 | toolbar: 'Source' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/en-gb.js b/sources/plugins/sourcearea/lang/en-gb.js new file mode 100644 index 0000000..a42e762 --- /dev/null +++ b/sources/plugins/sourcearea/lang/en-gb.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'en-gb', { | ||
6 | toolbar: 'Source' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/en.js b/sources/plugins/sourcearea/lang/en.js new file mode 100644 index 0000000..fdf25a1 --- /dev/null +++ b/sources/plugins/sourcearea/lang/en.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'en', { | ||
6 | toolbar: 'Source' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/eo.js b/sources/plugins/sourcearea/lang/eo.js new file mode 100644 index 0000000..704bf6a --- /dev/null +++ b/sources/plugins/sourcearea/lang/eo.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'eo', { | ||
6 | toolbar: 'Fonto' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/es.js b/sources/plugins/sourcearea/lang/es.js new file mode 100644 index 0000000..ccca6ac --- /dev/null +++ b/sources/plugins/sourcearea/lang/es.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'es', { | ||
6 | toolbar: 'Fuente HTML' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/et.js b/sources/plugins/sourcearea/lang/et.js new file mode 100644 index 0000000..c892cc3 --- /dev/null +++ b/sources/plugins/sourcearea/lang/et.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'et', { | ||
6 | toolbar: 'Lähtekood' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/eu.js b/sources/plugins/sourcearea/lang/eu.js new file mode 100644 index 0000000..95f2de6 --- /dev/null +++ b/sources/plugins/sourcearea/lang/eu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'eu', { | ||
6 | toolbar: 'Iturburua' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/fa.js b/sources/plugins/sourcearea/lang/fa.js new file mode 100644 index 0000000..c5e7838 --- /dev/null +++ b/sources/plugins/sourcearea/lang/fa.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'fa', { | ||
6 | toolbar: 'منبع' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/fi.js b/sources/plugins/sourcearea/lang/fi.js new file mode 100644 index 0000000..6d0ef2f --- /dev/null +++ b/sources/plugins/sourcearea/lang/fi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'fi', { | ||
6 | toolbar: 'Koodi' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/fo.js b/sources/plugins/sourcearea/lang/fo.js new file mode 100644 index 0000000..7dc96c9 --- /dev/null +++ b/sources/plugins/sourcearea/lang/fo.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'fo', { | ||
6 | toolbar: 'Kelda' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/fr-ca.js b/sources/plugins/sourcearea/lang/fr-ca.js new file mode 100644 index 0000000..7e1f916 --- /dev/null +++ b/sources/plugins/sourcearea/lang/fr-ca.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'fr-ca', { | ||
6 | toolbar: 'Source' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/fr.js b/sources/plugins/sourcearea/lang/fr.js new file mode 100644 index 0000000..4aafadd --- /dev/null +++ b/sources/plugins/sourcearea/lang/fr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'fr', { | ||
6 | toolbar: 'Source' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/gl.js b/sources/plugins/sourcearea/lang/gl.js new file mode 100644 index 0000000..bebc380 --- /dev/null +++ b/sources/plugins/sourcearea/lang/gl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'gl', { | ||
6 | toolbar: 'Orixe' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/gu.js b/sources/plugins/sourcearea/lang/gu.js new file mode 100644 index 0000000..890c949 --- /dev/null +++ b/sources/plugins/sourcearea/lang/gu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'gu', { | ||
6 | toolbar: 'મૂળ કે પ્રાથમિક દસ્તાવેજ' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/he.js b/sources/plugins/sourcearea/lang/he.js new file mode 100644 index 0000000..6012fa2 --- /dev/null +++ b/sources/plugins/sourcearea/lang/he.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'he', { | ||
6 | toolbar: 'מקור' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/hi.js b/sources/plugins/sourcearea/lang/hi.js new file mode 100644 index 0000000..a60ec4f --- /dev/null +++ b/sources/plugins/sourcearea/lang/hi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'hi', { | ||
6 | toolbar: 'सोर्स' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/hr.js b/sources/plugins/sourcearea/lang/hr.js new file mode 100644 index 0000000..a33e9e7 --- /dev/null +++ b/sources/plugins/sourcearea/lang/hr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'hr', { | ||
6 | toolbar: 'Kôd' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/hu.js b/sources/plugins/sourcearea/lang/hu.js new file mode 100644 index 0000000..9177268 --- /dev/null +++ b/sources/plugins/sourcearea/lang/hu.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'hu', { | ||
6 | toolbar: 'Forráskód' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/id.js b/sources/plugins/sourcearea/lang/id.js new file mode 100644 index 0000000..ba31a81 --- /dev/null +++ b/sources/plugins/sourcearea/lang/id.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'id', { | ||
6 | toolbar: 'Sumber' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/is.js b/sources/plugins/sourcearea/lang/is.js new file mode 100644 index 0000000..66b58bb --- /dev/null +++ b/sources/plugins/sourcearea/lang/is.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'is', { | ||
6 | toolbar: 'Kóði' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/it.js b/sources/plugins/sourcearea/lang/it.js new file mode 100644 index 0000000..b6815da --- /dev/null +++ b/sources/plugins/sourcearea/lang/it.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'it', { | ||
6 | toolbar: 'Sorgente' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/ja.js b/sources/plugins/sourcearea/lang/ja.js new file mode 100644 index 0000000..195730a --- /dev/null +++ b/sources/plugins/sourcearea/lang/ja.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'ja', { | ||
6 | toolbar: 'ソース' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/ka.js b/sources/plugins/sourcearea/lang/ka.js new file mode 100644 index 0000000..255951b --- /dev/null +++ b/sources/plugins/sourcearea/lang/ka.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'ka', { | ||
6 | toolbar: 'კოდები' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/km.js b/sources/plugins/sourcearea/lang/km.js new file mode 100644 index 0000000..05630c0 --- /dev/null +++ b/sources/plugins/sourcearea/lang/km.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'km', { | ||
6 | toolbar: 'អក្សរកូដ' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/ko.js b/sources/plugins/sourcearea/lang/ko.js new file mode 100644 index 0000000..535f6a1 --- /dev/null +++ b/sources/plugins/sourcearea/lang/ko.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'ko', { | ||
6 | toolbar: '소스' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/ku.js b/sources/plugins/sourcearea/lang/ku.js new file mode 100644 index 0000000..21c6ace --- /dev/null +++ b/sources/plugins/sourcearea/lang/ku.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'ku', { | ||
6 | toolbar: 'سەرچاوە' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/lt.js b/sources/plugins/sourcearea/lang/lt.js new file mode 100644 index 0000000..99f4ef6 --- /dev/null +++ b/sources/plugins/sourcearea/lang/lt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'lt', { | ||
6 | toolbar: 'Šaltinis' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/lv.js b/sources/plugins/sourcearea/lang/lv.js new file mode 100644 index 0000000..fb155cd --- /dev/null +++ b/sources/plugins/sourcearea/lang/lv.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'lv', { | ||
6 | toolbar: 'HTML kods' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/mk.js b/sources/plugins/sourcearea/lang/mk.js new file mode 100644 index 0000000..37135a1 --- /dev/null +++ b/sources/plugins/sourcearea/lang/mk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'mk', { | ||
6 | toolbar: 'Source' // MISSING | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/mn.js b/sources/plugins/sourcearea/lang/mn.js new file mode 100644 index 0000000..72c0b38 --- /dev/null +++ b/sources/plugins/sourcearea/lang/mn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'mn', { | ||
6 | toolbar: 'Код' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/ms.js b/sources/plugins/sourcearea/lang/ms.js new file mode 100644 index 0000000..1ef521b --- /dev/null +++ b/sources/plugins/sourcearea/lang/ms.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'ms', { | ||
6 | toolbar: 'Sumber' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/nb.js b/sources/plugins/sourcearea/lang/nb.js new file mode 100644 index 0000000..66182bf --- /dev/null +++ b/sources/plugins/sourcearea/lang/nb.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'nb', { | ||
6 | toolbar: 'Kilde' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/nl.js b/sources/plugins/sourcearea/lang/nl.js new file mode 100644 index 0000000..89d2d3c --- /dev/null +++ b/sources/plugins/sourcearea/lang/nl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'nl', { | ||
6 | toolbar: 'Broncode' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/no.js b/sources/plugins/sourcearea/lang/no.js new file mode 100644 index 0000000..81db8ce --- /dev/null +++ b/sources/plugins/sourcearea/lang/no.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'no', { | ||
6 | toolbar: 'Kilde' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/pl.js b/sources/plugins/sourcearea/lang/pl.js new file mode 100644 index 0000000..05bebe8 --- /dev/null +++ b/sources/plugins/sourcearea/lang/pl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'pl', { | ||
6 | toolbar: 'Źródło dokumentu' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/pt-br.js b/sources/plugins/sourcearea/lang/pt-br.js new file mode 100644 index 0000000..663f25b --- /dev/null +++ b/sources/plugins/sourcearea/lang/pt-br.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'pt-br', { | ||
6 | toolbar: 'Código-Fonte' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/pt.js b/sources/plugins/sourcearea/lang/pt.js new file mode 100644 index 0000000..9d97358 --- /dev/null +++ b/sources/plugins/sourcearea/lang/pt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'pt', { | ||
6 | toolbar: 'Fonte' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/ro.js b/sources/plugins/sourcearea/lang/ro.js new file mode 100644 index 0000000..f8e3479 --- /dev/null +++ b/sources/plugins/sourcearea/lang/ro.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'ro', { | ||
6 | toolbar: 'Sursa' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/ru.js b/sources/plugins/sourcearea/lang/ru.js new file mode 100644 index 0000000..2f4299f --- /dev/null +++ b/sources/plugins/sourcearea/lang/ru.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'ru', { | ||
6 | toolbar: 'Источник' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/si.js b/sources/plugins/sourcearea/lang/si.js new file mode 100644 index 0000000..30dc6aa --- /dev/null +++ b/sources/plugins/sourcearea/lang/si.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'si', { | ||
6 | toolbar: 'මුලාශ්රය' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/sk.js b/sources/plugins/sourcearea/lang/sk.js new file mode 100644 index 0000000..7b487a3 --- /dev/null +++ b/sources/plugins/sourcearea/lang/sk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'sk', { | ||
6 | toolbar: 'Zdroj' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/sl.js b/sources/plugins/sourcearea/lang/sl.js new file mode 100644 index 0000000..05a9539 --- /dev/null +++ b/sources/plugins/sourcearea/lang/sl.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'sl', { | ||
6 | toolbar: 'Izvorna koda' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/sq.js b/sources/plugins/sourcearea/lang/sq.js new file mode 100644 index 0000000..989267d --- /dev/null +++ b/sources/plugins/sourcearea/lang/sq.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'sq', { | ||
6 | toolbar: 'Burimi' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/sr-latn.js b/sources/plugins/sourcearea/lang/sr-latn.js new file mode 100644 index 0000000..6084786 --- /dev/null +++ b/sources/plugins/sourcearea/lang/sr-latn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'sr-latn', { | ||
6 | toolbar: 'Kôd' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/sr.js b/sources/plugins/sourcearea/lang/sr.js new file mode 100644 index 0000000..78599cb --- /dev/null +++ b/sources/plugins/sourcearea/lang/sr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'sr', { | ||
6 | toolbar: 'Kôд' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/sv.js b/sources/plugins/sourcearea/lang/sv.js new file mode 100644 index 0000000..571cf07 --- /dev/null +++ b/sources/plugins/sourcearea/lang/sv.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'sv', { | ||
6 | toolbar: 'Källa' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/th.js b/sources/plugins/sourcearea/lang/th.js new file mode 100644 index 0000000..aa6427d --- /dev/null +++ b/sources/plugins/sourcearea/lang/th.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'th', { | ||
6 | toolbar: 'ดูรหัส HTML' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/tr.js b/sources/plugins/sourcearea/lang/tr.js new file mode 100644 index 0000000..54cc744 --- /dev/null +++ b/sources/plugins/sourcearea/lang/tr.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'tr', { | ||
6 | toolbar: 'Kaynak' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/tt.js b/sources/plugins/sourcearea/lang/tt.js new file mode 100644 index 0000000..964102f --- /dev/null +++ b/sources/plugins/sourcearea/lang/tt.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'tt', { | ||
6 | toolbar: 'Чыганак' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/ug.js b/sources/plugins/sourcearea/lang/ug.js new file mode 100644 index 0000000..de30435 --- /dev/null +++ b/sources/plugins/sourcearea/lang/ug.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'ug', { | ||
6 | toolbar: 'مەنبە' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/uk.js b/sources/plugins/sourcearea/lang/uk.js new file mode 100644 index 0000000..f9eea57 --- /dev/null +++ b/sources/plugins/sourcearea/lang/uk.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'uk', { | ||
6 | toolbar: 'Джерело' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/vi.js b/sources/plugins/sourcearea/lang/vi.js new file mode 100644 index 0000000..23f8bef --- /dev/null +++ b/sources/plugins/sourcearea/lang/vi.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'vi', { | ||
6 | toolbar: 'Mã HTML' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/zh-cn.js b/sources/plugins/sourcearea/lang/zh-cn.js new file mode 100644 index 0000000..1bff533 --- /dev/null +++ b/sources/plugins/sourcearea/lang/zh-cn.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'zh-cn', { | ||
6 | toolbar: '源码' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/lang/zh.js b/sources/plugins/sourcearea/lang/zh.js new file mode 100644 index 0000000..2268151 --- /dev/null +++ b/sources/plugins/sourcearea/lang/zh.js | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'sourcearea', 'zh', { | ||
6 | toolbar: '原始碼' | ||
7 | } ); | ||
diff --git a/sources/plugins/sourcearea/plugin.js b/sources/plugins/sourcearea/plugin.js new file mode 100644 index 0000000..7c9ac88 --- /dev/null +++ b/sources/plugins/sourcearea/plugin.js | |||
@@ -0,0 +1,168 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview The Source Editing Area plugin. It registers the "source" editing | ||
8 | * mode, which displays raw HTML data being edited in the editor. | ||
9 | */ | ||
10 | |||
11 | ( function() { | ||
12 | CKEDITOR.plugins.add( 'sourcearea', { | ||
13 | // jscs:disable maximumLineLength | ||
14 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
15 | // jscs:enable maximumLineLength | ||
16 | icons: 'source,source-rtl', // %REMOVE_LINE_CORE% | ||
17 | hidpi: true, // %REMOVE_LINE_CORE% | ||
18 | init: function( editor ) { | ||
19 | // Source mode in inline editors is only available through the "sourcedialog" plugin. | ||
20 | if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ) | ||
21 | return; | ||
22 | |||
23 | var sourcearea = CKEDITOR.plugins.sourcearea; | ||
24 | |||
25 | editor.addMode( 'source', function( callback ) { | ||
26 | var contentsSpace = editor.ui.space( 'contents' ), | ||
27 | textarea = contentsSpace.getDocument().createElement( 'textarea' ); | ||
28 | |||
29 | textarea.setStyles( | ||
30 | CKEDITOR.tools.extend( { | ||
31 | // IE7 has overflow the <textarea> from wrapping table cell. | ||
32 | width: CKEDITOR.env.ie7Compat ? '99%' : '100%', | ||
33 | height: '100%', | ||
34 | resize: 'none', | ||
35 | outline: 'none', | ||
36 | 'text-align': 'left' | ||
37 | }, | ||
38 | CKEDITOR.tools.cssVendorPrefix( 'tab-size', editor.config.sourceAreaTabSize || 4 ) ) ); | ||
39 | |||
40 | // Make sure that source code is always displayed LTR, | ||
41 | // regardless of editor language (#10105). | ||
42 | textarea.setAttribute( 'dir', 'ltr' ); | ||
43 | |||
44 | textarea.addClass( 'cke_source' ).addClass( 'cke_reset' ).addClass( 'cke_enable_context_menu' ); | ||
45 | |||
46 | editor.ui.space( 'contents' ).append( textarea ); | ||
47 | |||
48 | var editable = editor.editable( new sourceEditable( editor, textarea ) ); | ||
49 | |||
50 | // Fill the textarea with the current editor data. | ||
51 | editable.setData( editor.getData( 1 ) ); | ||
52 | |||
53 | // Having to make <textarea> fixed sized to conquer the following bugs: | ||
54 | // 1. The textarea height/width='100%' doesn't constraint to the 'td' in IE6/7. | ||
55 | // 2. Unexpected vertical-scrolling behavior happens whenever focus is moving out of editor | ||
56 | // if text content within it has overflowed. (#4762) | ||
57 | if ( CKEDITOR.env.ie ) { | ||
58 | editable.attachListener( editor, 'resize', onResize, editable ); | ||
59 | editable.attachListener( CKEDITOR.document.getWindow(), 'resize', onResize, editable ); | ||
60 | CKEDITOR.tools.setTimeout( onResize, 0, editable ); | ||
61 | } | ||
62 | |||
63 | editor.fire( 'ariaWidget', this ); | ||
64 | |||
65 | callback(); | ||
66 | } ); | ||
67 | |||
68 | editor.addCommand( 'source', sourcearea.commands.source ); | ||
69 | |||
70 | if ( editor.ui.addButton ) { | ||
71 | editor.ui.addButton( 'Source', { | ||
72 | label: editor.lang.sourcearea.toolbar, | ||
73 | command: 'source', | ||
74 | toolbar: 'mode,10' | ||
75 | } ); | ||
76 | } | ||
77 | |||
78 | editor.on( 'mode', function() { | ||
79 | editor.getCommand( 'source' ).setState( editor.mode == 'source' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); | ||
80 | } ); | ||
81 | |||
82 | var needsFocusHack = CKEDITOR.env.ie && CKEDITOR.env.version == 9; | ||
83 | |||
84 | function onResize() { | ||
85 | // We have to do something with focus on IE9, because if sourcearea had focus | ||
86 | // before being resized, the caret ends somewhere in the editor UI (#11839). | ||
87 | var wasActive = needsFocusHack && this.equals( CKEDITOR.document.getActive() ); | ||
88 | |||
89 | // Holder rectange size is stretched by textarea, | ||
90 | // so hide it just for a moment. | ||
91 | this.hide(); | ||
92 | this.setStyle( 'height', this.getParent().$.clientHeight + 'px' ); | ||
93 | this.setStyle( 'width', this.getParent().$.clientWidth + 'px' ); | ||
94 | // When we have proper holder size, show textarea again. | ||
95 | this.show(); | ||
96 | |||
97 | if ( wasActive ) | ||
98 | this.focus(); | ||
99 | } | ||
100 | } | ||
101 | } ); | ||
102 | |||
103 | var sourceEditable = CKEDITOR.tools.createClass( { | ||
104 | base: CKEDITOR.editable, | ||
105 | proto: { | ||
106 | setData: function( data ) { | ||
107 | this.setValue( data ); | ||
108 | this.status = 'ready'; | ||
109 | this.editor.fire( 'dataReady' ); | ||
110 | }, | ||
111 | |||
112 | getData: function() { | ||
113 | return this.getValue(); | ||
114 | }, | ||
115 | |||
116 | // Insertions are not supported in source editable. | ||
117 | insertHtml: function() {}, | ||
118 | insertElement: function() {}, | ||
119 | insertText: function() {}, | ||
120 | |||
121 | // Read-only support for textarea. | ||
122 | setReadOnly: function( isReadOnly ) { | ||
123 | this[ ( isReadOnly ? 'set' : 'remove' ) + 'Attribute' ]( 'readOnly', 'readonly' ); | ||
124 | }, | ||
125 | |||
126 | detach: function() { | ||
127 | sourceEditable.baseProto.detach.call( this ); | ||
128 | this.clearCustomData(); | ||
129 | this.remove(); | ||
130 | } | ||
131 | } | ||
132 | } ); | ||
133 | } )(); | ||
134 | |||
135 | CKEDITOR.plugins.sourcearea = { | ||
136 | commands: { | ||
137 | source: { | ||
138 | modes: { wysiwyg: 1, source: 1 }, | ||
139 | editorFocus: false, | ||
140 | readOnly: 1, | ||
141 | exec: function( editor ) { | ||
142 | if ( editor.mode == 'wysiwyg' ) | ||
143 | editor.fire( 'saveSnapshot' ); | ||
144 | editor.getCommand( 'source' ).setState( CKEDITOR.TRISTATE_DISABLED ); | ||
145 | editor.setMode( editor.mode == 'source' ? 'wysiwyg' : 'source' ); | ||
146 | }, | ||
147 | |||
148 | canUndo: false | ||
149 | } | ||
150 | } | ||
151 | }; | ||
152 | |||
153 | /** | ||
154 | * Controls the `tab-size` CSS property of the source editing area. Use it to set the width | ||
155 | * of the tab character in the source view. Enter an integer to denote the number of spaces | ||
156 | * that the tab will contain. | ||
157 | * | ||
158 | * **Note:** Works only with {@link #dataIndentationChars} | ||
159 | * set to `'\t'`. Please consider that not all browsers support the `tab-size` CSS | ||
160 | * property yet. | ||
161 | * | ||
162 | * // Set tab-size to 10 characters. | ||
163 | * config.sourceAreaTabSize = 10; | ||
164 | * | ||
165 | * @cfg {Number} [sourceAreaTabSize=4] | ||
166 | * @member CKEDITOR.config | ||
167 | * @see CKEDITOR.config#dataIndentationChars | ||
168 | */ | ||
diff --git a/sources/plugins/tab/plugin.js b/sources/plugins/tab/plugin.js new file mode 100644 index 0000000..cd61b97 --- /dev/null +++ b/sources/plugins/tab/plugin.js | |||
@@ -0,0 +1,302 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | ( function() { | ||
7 | var meta = { | ||
8 | editorFocus: false, | ||
9 | modes: { wysiwyg: 1, source: 1 } | ||
10 | }; | ||
11 | |||
12 | var blurCommand = { | ||
13 | exec: function( editor ) { | ||
14 | editor.container.focusNext( true, editor.tabIndex ); | ||
15 | } | ||
16 | }; | ||
17 | |||
18 | var blurBackCommand = { | ||
19 | exec: function( editor ) { | ||
20 | editor.container.focusPrevious( true, editor.tabIndex ); | ||
21 | } | ||
22 | }; | ||
23 | |||
24 | function selectNextCellCommand( backward ) { | ||
25 | return { | ||
26 | editorFocus: false, | ||
27 | canUndo: false, | ||
28 | modes: { wysiwyg: 1 }, | ||
29 | exec: function( editor ) { | ||
30 | if ( editor.editable().hasFocus ) { | ||
31 | var sel = editor.getSelection(), | ||
32 | path = new CKEDITOR.dom.elementPath( sel.getCommonAncestor(), sel.root ), | ||
33 | cell; | ||
34 | |||
35 | if ( ( cell = path.contains( { td: 1, th: 1 }, 1 ) ) ) { | ||
36 | var resultRange = editor.createRange(), | ||
37 | next = CKEDITOR.tools.tryThese( function() { | ||
38 | var row = cell.getParent(), | ||
39 | next = row.$.cells[ cell.$.cellIndex + ( backward ? -1 : 1 ) ]; | ||
40 | |||
41 | // Invalid any empty value. | ||
42 | next.parentNode.parentNode; | ||
43 | return next; | ||
44 | }, function() { | ||
45 | var row = cell.getParent(), | ||
46 | table = row.getAscendant( 'table' ), | ||
47 | nextRow = table.$.rows[ row.$.rowIndex + ( backward ? -1 : 1 ) ]; | ||
48 | |||
49 | return nextRow.cells[ backward ? nextRow.cells.length - 1 : 0 ]; | ||
50 | } ); | ||
51 | |||
52 | // Clone one more row at the end of table and select the first newly established cell. | ||
53 | if ( !( next || backward ) ) { | ||
54 | var table = cell.getAscendant( 'table' ).$, | ||
55 | cells = cell.getParent().$.cells; | ||
56 | |||
57 | var newRow = new CKEDITOR.dom.element( table.insertRow( -1 ), editor.document ); | ||
58 | |||
59 | for ( var i = 0, count = cells.length; i < count; i++ ) { | ||
60 | var newCell = newRow.append( new CKEDITOR.dom.element( cells[ i ], editor.document ).clone( false, false ) ); | ||
61 | newCell.appendBogus(); | ||
62 | } | ||
63 | |||
64 | resultRange.moveToElementEditStart( newRow ); | ||
65 | } else if ( next ) { | ||
66 | next = new CKEDITOR.dom.element( next ); | ||
67 | resultRange.moveToElementEditStart( next ); | ||
68 | // Avoid selecting empty block makes the cursor blind. | ||
69 | if ( !( resultRange.checkStartOfBlock() && resultRange.checkEndOfBlock() ) ) | ||
70 | resultRange.selectNodeContents( next ); | ||
71 | } else { | ||
72 | return true; | ||
73 | } | ||
74 | |||
75 | resultRange.select( true ); | ||
76 | return true; | ||
77 | } | ||
78 | } | ||
79 | |||
80 | return false; | ||
81 | } | ||
82 | }; | ||
83 | } | ||
84 | |||
85 | CKEDITOR.plugins.add( 'tab', { | ||
86 | init: function( editor ) { | ||
87 | var tabTools = editor.config.enableTabKeyTools !== false, | ||
88 | tabSpaces = editor.config.tabSpaces || 0, | ||
89 | tabText = ''; | ||
90 | |||
91 | while ( tabSpaces-- ) | ||
92 | tabText += '\xa0'; | ||
93 | |||
94 | if ( tabText ) { | ||
95 | editor.on( 'key', function( ev ) { | ||
96 | // TAB. | ||
97 | if ( ev.data.keyCode == 9 ) { | ||
98 | editor.insertText( tabText ); | ||
99 | ev.cancel(); | ||
100 | } | ||
101 | } ); | ||
102 | } | ||
103 | |||
104 | if ( tabTools ) { | ||
105 | editor.on( 'key', function( ev ) { | ||
106 | if ( ev.data.keyCode == 9 && editor.execCommand( 'selectNextCell' ) || // TAB | ||
107 | ev.data.keyCode == ( CKEDITOR.SHIFT + 9 ) && editor.execCommand( 'selectPreviousCell' ) ) // SHIFT+TAB | ||
108 | ev.cancel(); | ||
109 | } ); | ||
110 | } | ||
111 | |||
112 | editor.addCommand( 'blur', CKEDITOR.tools.extend( blurCommand, meta ) ); | ||
113 | editor.addCommand( 'blurBack', CKEDITOR.tools.extend( blurBackCommand, meta ) ); | ||
114 | editor.addCommand( 'selectNextCell', selectNextCellCommand() ); | ||
115 | editor.addCommand( 'selectPreviousCell', selectNextCellCommand( true ) ); | ||
116 | } | ||
117 | } ); | ||
118 | } )(); | ||
119 | |||
120 | /** | ||
121 | * Moves the UI focus to the element following this element in the tabindex order. | ||
122 | * | ||
123 | * var element = CKEDITOR.document.getById( 'example' ); | ||
124 | * element.focusNext(); | ||
125 | * | ||
126 | * @param {Boolean} [ignoreChildren=false] | ||
127 | * @param {Number} [indexToUse] | ||
128 | * @member CKEDITOR.dom.element | ||
129 | */ | ||
130 | CKEDITOR.dom.element.prototype.focusNext = function( ignoreChildren, indexToUse ) { | ||
131 | var curTabIndex = ( indexToUse === undefined ? this.getTabIndex() : indexToUse ), | ||
132 | passedCurrent, enteredCurrent, elected, electedTabIndex, element, elementTabIndex; | ||
133 | |||
134 | if ( curTabIndex <= 0 ) { | ||
135 | // If this element has tabindex <= 0 then we must simply look for any | ||
136 | // element following it containing tabindex=0. | ||
137 | |||
138 | element = this.getNextSourceNode( ignoreChildren, CKEDITOR.NODE_ELEMENT ); | ||
139 | |||
140 | while ( element ) { | ||
141 | if ( element.isVisible() && element.getTabIndex() === 0 ) { | ||
142 | elected = element; | ||
143 | break; | ||
144 | } | ||
145 | |||
146 | element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ); | ||
147 | } | ||
148 | } else { | ||
149 | // If this element has tabindex > 0 then we must look for: | ||
150 | // 1. An element following this element with the same tabindex. | ||
151 | // 2. The first element in source other with the lowest tabindex | ||
152 | // that is higher than this element tabindex. | ||
153 | // 3. The first element with tabindex=0. | ||
154 | |||
155 | element = this.getDocument().getBody().getFirst(); | ||
156 | |||
157 | while ( ( element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) ) { | ||
158 | if ( !passedCurrent ) { | ||
159 | if ( !enteredCurrent && element.equals( this ) ) { | ||
160 | enteredCurrent = true; | ||
161 | |||
162 | // Ignore this element, if required. | ||
163 | if ( ignoreChildren ) { | ||
164 | if ( !( element = element.getNextSourceNode( true, CKEDITOR.NODE_ELEMENT ) ) ) | ||
165 | break; | ||
166 | passedCurrent = 1; | ||
167 | } | ||
168 | } else if ( enteredCurrent && !this.contains( element ) ) { | ||
169 | passedCurrent = 1; | ||
170 | } | ||
171 | } | ||
172 | |||
173 | if ( !element.isVisible() || ( elementTabIndex = element.getTabIndex() ) < 0 ) | ||
174 | continue; | ||
175 | |||
176 | if ( passedCurrent && elementTabIndex == curTabIndex ) { | ||
177 | elected = element; | ||
178 | break; | ||
179 | } | ||
180 | |||
181 | if ( elementTabIndex > curTabIndex && ( !elected || !electedTabIndex || elementTabIndex < electedTabIndex ) ) { | ||
182 | elected = element; | ||
183 | electedTabIndex = elementTabIndex; | ||
184 | } else if ( !elected && elementTabIndex === 0 ) { | ||
185 | elected = element; | ||
186 | electedTabIndex = elementTabIndex; | ||
187 | } | ||
188 | } | ||
189 | } | ||
190 | |||
191 | if ( elected ) | ||
192 | elected.focus(); | ||
193 | }; | ||
194 | |||
195 | /** | ||
196 | * Moves the UI focus to the element before this element in the tabindex order. | ||
197 | * | ||
198 | * var element = CKEDITOR.document.getById( 'example' ); | ||
199 | * element.focusPrevious(); | ||
200 | * | ||
201 | * @param {Boolean} [ignoreChildren=false] | ||
202 | * @param {Number} [indexToUse] | ||
203 | * @member CKEDITOR.dom.element | ||
204 | */ | ||
205 | CKEDITOR.dom.element.prototype.focusPrevious = function( ignoreChildren, indexToUse ) { | ||
206 | var curTabIndex = ( indexToUse === undefined ? this.getTabIndex() : indexToUse ), | ||
207 | passedCurrent, enteredCurrent, elected, | ||
208 | electedTabIndex = 0, | ||
209 | elementTabIndex; | ||
210 | |||
211 | var element = this.getDocument().getBody().getLast(); | ||
212 | |||
213 | while ( ( element = element.getPreviousSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) ) { | ||
214 | if ( !passedCurrent ) { | ||
215 | if ( !enteredCurrent && element.equals( this ) ) { | ||
216 | enteredCurrent = true; | ||
217 | |||
218 | // Ignore this element, if required. | ||
219 | if ( ignoreChildren ) { | ||
220 | if ( !( element = element.getPreviousSourceNode( true, CKEDITOR.NODE_ELEMENT ) ) ) | ||
221 | break; | ||
222 | passedCurrent = 1; | ||
223 | } | ||
224 | } else if ( enteredCurrent && !this.contains( element ) ) { | ||
225 | passedCurrent = 1; | ||
226 | } | ||
227 | } | ||
228 | |||
229 | if ( !element.isVisible() || ( elementTabIndex = element.getTabIndex() ) < 0 ) | ||
230 | continue; | ||
231 | |||
232 | if ( curTabIndex <= 0 ) { | ||
233 | // If this element has tabindex <= 0 then we must look for: | ||
234 | // 1. An element before this one containing tabindex=0. | ||
235 | // 2. The last element with the highest tabindex. | ||
236 | |||
237 | if ( passedCurrent && elementTabIndex === 0 ) { | ||
238 | elected = element; | ||
239 | break; | ||
240 | } | ||
241 | |||
242 | if ( elementTabIndex > electedTabIndex ) { | ||
243 | elected = element; | ||
244 | electedTabIndex = elementTabIndex; | ||
245 | } | ||
246 | } else { | ||
247 | // If this element has tabindex > 0 we must look for: | ||
248 | // 1. An element preceeding this one, with the same tabindex. | ||
249 | // 2. The last element in source other with the highest tabindex | ||
250 | // that is lower than this element tabindex. | ||
251 | |||
252 | if ( passedCurrent && elementTabIndex == curTabIndex ) { | ||
253 | elected = element; | ||
254 | break; | ||
255 | } | ||
256 | |||
257 | if ( elementTabIndex < curTabIndex && ( !elected || elementTabIndex > electedTabIndex ) ) { | ||
258 | elected = element; | ||
259 | electedTabIndex = elementTabIndex; | ||
260 | } | ||
261 | } | ||
262 | } | ||
263 | |||
264 | if ( elected ) | ||
265 | elected.focus(); | ||
266 | }; | ||
267 | |||
268 | /** | ||
269 | * Intructs the editor to add a number of spaces (` `) to the text when | ||
270 | * hitting the <kbd>Tab</kbd> key. If set to zero, the <kbd>Tab</kbd> key will be used to move the | ||
271 | * cursor focus to the next element in the page, out of the editor focus. | ||
272 | * | ||
273 | * config.tabSpaces = 4; | ||
274 | * | ||
275 | * @cfg {Number} [tabSpaces=0] | ||
276 | * @member CKEDITOR.config | ||
277 | */ | ||
278 | |||
279 | /** | ||
280 | * Allow context-sensitive <kbd>Tab</kbd> key behaviors, including the following scenarios: | ||
281 | * | ||
282 | * When selection is anchored inside **table cells**: | ||
283 | * | ||
284 | * * If <kbd>Tab</kbd> is pressed, select the content of the "next" cell. If in the last | ||
285 | * cell in the table, add a new row to it and focus its first cell. | ||
286 | * * If <kbd>Shift+Tab</kbd> is pressed, select the content of the "previous" cell. | ||
287 | * Do nothing when it is in the first cell. | ||
288 | * | ||
289 | * Example: | ||
290 | * | ||
291 | * config.enableTabKeyTools = false; | ||
292 | * | ||
293 | * @cfg {Boolean} [enableTabKeyTools=true] | ||
294 | * @member CKEDITOR.config | ||
295 | */ | ||
296 | |||
297 | // If the <kbd>Tab</kbd> key is not supposed to be enabled for navigation, the following | ||
298 | // settings could be used alternatively: | ||
299 | // config.keystrokes.push( | ||
300 | // [ CKEDITOR.ALT + 38 /*Arrow Up*/, 'selectPreviousCell' ], | ||
301 | // [ CKEDITOR.ALT + 40 /*Arrow Down*/, 'selectNextCell' ] | ||
302 | // ); | ||
diff --git a/sources/plugins/toolbar/lang/af.js b/sources/plugins/toolbar/lang/af.js new file mode 100644 index 0000000..370cf6b --- /dev/null +++ b/sources/plugins/toolbar/lang/af.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'af', { | ||
6 | toolbarCollapse: 'Verklein werkbalk', | ||
7 | toolbarExpand: 'Vergroot werkbalk', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Knipbord/Undo', | ||
11 | editing: 'Verander', | ||
12 | forms: 'Vorms', | ||
13 | basicstyles: 'Eenvoudige Styl', | ||
14 | paragraph: 'Paragraaf', | ||
15 | links: 'Skakels', | ||
16 | insert: 'Toevoeg', | ||
17 | styles: 'Style', | ||
18 | colors: 'Kleure', | ||
19 | tools: 'Gereedskap' | ||
20 | }, | ||
21 | toolbars: 'Werkbalke' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/ar.js b/sources/plugins/toolbar/lang/ar.js new file mode 100644 index 0000000..ecced64 --- /dev/null +++ b/sources/plugins/toolbar/lang/ar.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'ar', { | ||
6 | toolbarCollapse: 'تقليص شريط الأدوت', | ||
7 | toolbarExpand: 'تمديد شريط الأدوات', | ||
8 | toolbarGroups: { | ||
9 | document: 'مستند', | ||
10 | clipboard: 'الحافظة/الرجوع', | ||
11 | editing: 'تحرير', | ||
12 | forms: 'نماذج', | ||
13 | basicstyles: 'نمط بسيط', | ||
14 | paragraph: 'فقرة', | ||
15 | links: 'روابط', | ||
16 | insert: 'إدراج', | ||
17 | styles: 'أنماط', | ||
18 | colors: 'ألوان', | ||
19 | tools: 'أدوات' | ||
20 | }, | ||
21 | toolbars: 'أشرطة أدوات المحرر' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/bg.js b/sources/plugins/toolbar/lang/bg.js new file mode 100644 index 0000000..f256ca9 --- /dev/null +++ b/sources/plugins/toolbar/lang/bg.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'bg', { | ||
6 | toolbarCollapse: 'Свиване на лентата с инструменти', | ||
7 | toolbarExpand: 'Разширяване на лентата с инструменти', | ||
8 | toolbarGroups: { | ||
9 | document: 'Документ', | ||
10 | clipboard: 'Клипборд/Отмяна', | ||
11 | editing: 'Промяна', | ||
12 | forms: 'Форми', | ||
13 | basicstyles: 'Базови стилове', | ||
14 | paragraph: 'Параграф', | ||
15 | links: 'Връзки', | ||
16 | insert: 'Вмъкване', | ||
17 | styles: 'Стилове', | ||
18 | colors: 'Цветове', | ||
19 | tools: 'Инструменти' | ||
20 | }, | ||
21 | toolbars: 'Ленти с инструменти' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/bn.js b/sources/plugins/toolbar/lang/bn.js new file mode 100644 index 0000000..c59c2ed --- /dev/null +++ b/sources/plugins/toolbar/lang/bn.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'bn', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', // MISSING | ||
7 | toolbarExpand: 'Expand Toolbar', // MISSING | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' // MISSING | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/bs.js b/sources/plugins/toolbar/lang/bs.js new file mode 100644 index 0000000..db3f43b --- /dev/null +++ b/sources/plugins/toolbar/lang/bs.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'bs', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', // MISSING | ||
7 | toolbarExpand: 'Expand Toolbar', // MISSING | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' // MISSING | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/ca.js b/sources/plugins/toolbar/lang/ca.js new file mode 100644 index 0000000..45cef50 --- /dev/null +++ b/sources/plugins/toolbar/lang/ca.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'ca', { | ||
6 | toolbarCollapse: 'Redueix la barra d\'eines', | ||
7 | toolbarExpand: 'Amplia la barra d\'eines', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Editor de barra d\'eines' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/cs.js b/sources/plugins/toolbar/lang/cs.js new file mode 100644 index 0000000..1e92738 --- /dev/null +++ b/sources/plugins/toolbar/lang/cs.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'cs', { | ||
6 | toolbarCollapse: 'Skrýt panel nástrojů', | ||
7 | toolbarExpand: 'Zobrazit panel nástrojů', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Schránka/Zpět', | ||
11 | editing: 'Úpravy', | ||
12 | forms: 'Formuláře', | ||
13 | basicstyles: 'Základní styly', | ||
14 | paragraph: 'Odstavec', | ||
15 | links: 'Odkazy', | ||
16 | insert: 'Vložit', | ||
17 | styles: 'Styly', | ||
18 | colors: 'Barvy', | ||
19 | tools: 'Nástroje' | ||
20 | }, | ||
21 | toolbars: 'Panely nástrojů editoru' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/cy.js b/sources/plugins/toolbar/lang/cy.js new file mode 100644 index 0000000..2ce92fa --- /dev/null +++ b/sources/plugins/toolbar/lang/cy.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'cy', { | ||
6 | toolbarCollapse: 'Cyfangu\'r Bar Offer', | ||
7 | toolbarExpand: 'Ehangu\'r Bar Offer', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dogfen', | ||
10 | clipboard: 'Clipfwrdd/Dadwneud', | ||
11 | editing: 'Golygu', | ||
12 | forms: 'Ffurflenni', | ||
13 | basicstyles: 'Arddulliau Sylfaenol', | ||
14 | paragraph: 'Paragraff', | ||
15 | links: 'Dolenni', | ||
16 | insert: 'Mewnosod', | ||
17 | styles: 'Arddulliau', | ||
18 | colors: 'Lliwiau', | ||
19 | tools: 'Offer' | ||
20 | }, | ||
21 | toolbars: 'Bariau offer y golygydd' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/da.js b/sources/plugins/toolbar/lang/da.js new file mode 100644 index 0000000..a36a1a5 --- /dev/null +++ b/sources/plugins/toolbar/lang/da.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'da', { | ||
6 | toolbarCollapse: 'Sammenklap værktøjslinje', | ||
7 | toolbarExpand: 'Udvid værktøjslinje', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Udklipsholder/Fortryd', | ||
11 | editing: 'Redigering', | ||
12 | forms: 'Formularer', | ||
13 | basicstyles: 'Basis styles', | ||
14 | paragraph: 'Paragraf', | ||
15 | links: 'Links', | ||
16 | insert: 'Indsæt', | ||
17 | styles: 'Typografier', | ||
18 | colors: 'Farver', | ||
19 | tools: 'Værktøjer' | ||
20 | }, | ||
21 | toolbars: 'Editors værktøjslinjer' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/de-ch.js b/sources/plugins/toolbar/lang/de-ch.js new file mode 100644 index 0000000..1f23f24 --- /dev/null +++ b/sources/plugins/toolbar/lang/de-ch.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'de-ch', { | ||
6 | toolbarCollapse: 'Werkzeugleiste einklappen', | ||
7 | toolbarExpand: 'Werkzeugleiste ausklappen', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Zwischenablage/Rückgängig', | ||
11 | editing: 'Editieren', | ||
12 | forms: 'Formulare', | ||
13 | basicstyles: 'Grundstile', | ||
14 | paragraph: 'Absatz', | ||
15 | links: 'Links', | ||
16 | insert: 'Einfügen', | ||
17 | styles: 'Stile', | ||
18 | colors: 'Farben', | ||
19 | tools: 'Werkzeuge' | ||
20 | }, | ||
21 | toolbars: 'Editor Werkzeugleisten' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/de.js b/sources/plugins/toolbar/lang/de.js new file mode 100644 index 0000000..0b1d4ba --- /dev/null +++ b/sources/plugins/toolbar/lang/de.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'de', { | ||
6 | toolbarCollapse: 'Werkzeugleiste einklappen', | ||
7 | toolbarExpand: 'Werkzeugleiste ausklappen', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Zwischenablage/Rückgängig', | ||
11 | editing: 'Editieren', | ||
12 | forms: 'Formulare', | ||
13 | basicstyles: 'Grundstile', | ||
14 | paragraph: 'Absatz', | ||
15 | links: 'Links', | ||
16 | insert: 'Einfügen', | ||
17 | styles: 'Stile', | ||
18 | colors: 'Farben', | ||
19 | tools: 'Werkzeuge' | ||
20 | }, | ||
21 | toolbars: 'Editor Werkzeugleisten' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/el.js b/sources/plugins/toolbar/lang/el.js new file mode 100644 index 0000000..b5bd212 --- /dev/null +++ b/sources/plugins/toolbar/lang/el.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'el', { | ||
6 | toolbarCollapse: 'Σύμπτυξη Εργαλειοθήκης', | ||
7 | toolbarExpand: 'Ανάπτυξη Εργαλειοθήκης', | ||
8 | toolbarGroups: { | ||
9 | document: 'Έγγραφο', | ||
10 | clipboard: 'Πρόχειρο/Αναίρεση', | ||
11 | editing: 'Επεξεργασία', | ||
12 | forms: 'Φόρμες', | ||
13 | basicstyles: 'Βασικά Στυλ', | ||
14 | paragraph: 'Παράγραφος', | ||
15 | links: 'Σύνδεσμοι', | ||
16 | insert: 'Εισαγωγή', | ||
17 | styles: 'Στυλ', | ||
18 | colors: 'Χρώματα', | ||
19 | tools: 'Εργαλεία' | ||
20 | }, | ||
21 | toolbars: 'Εργαλειοθήκες επεξεργαστή' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/en-au.js b/sources/plugins/toolbar/lang/en-au.js new file mode 100644 index 0000000..afa15d1 --- /dev/null +++ b/sources/plugins/toolbar/lang/en-au.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'en-au', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', // MISSING | ||
7 | toolbarExpand: 'Expand Toolbar', // MISSING | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/en-ca.js b/sources/plugins/toolbar/lang/en-ca.js new file mode 100644 index 0000000..4dc04a8 --- /dev/null +++ b/sources/plugins/toolbar/lang/en-ca.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'en-ca', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', // MISSING | ||
7 | toolbarExpand: 'Expand Toolbar', // MISSING | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' // MISSING | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/en-gb.js b/sources/plugins/toolbar/lang/en-gb.js new file mode 100644 index 0000000..14993a5 --- /dev/null +++ b/sources/plugins/toolbar/lang/en-gb.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'en-gb', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', | ||
7 | toolbarExpand: 'Expand Toolbar', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/en.js b/sources/plugins/toolbar/lang/en.js new file mode 100644 index 0000000..eeacf38 --- /dev/null +++ b/sources/plugins/toolbar/lang/en.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'en', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', | ||
7 | toolbarExpand: 'Expand Toolbar', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/eo.js b/sources/plugins/toolbar/lang/eo.js new file mode 100644 index 0000000..53f2439 --- /dev/null +++ b/sources/plugins/toolbar/lang/eo.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'eo', { | ||
6 | toolbarCollapse: 'Faldi la ilbreton', | ||
7 | toolbarExpand: 'Malfaldi la ilbreton', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokumento', | ||
10 | clipboard: 'Poŝo/Malfari', | ||
11 | editing: 'Redaktado', | ||
12 | forms: 'Formularoj', | ||
13 | basicstyles: 'Bazaj stiloj', | ||
14 | paragraph: 'Paragrafo', | ||
15 | links: 'Ligiloj', | ||
16 | insert: 'Enmeti', | ||
17 | styles: 'Stiloj', | ||
18 | colors: 'Koloroj', | ||
19 | tools: 'Iloj' | ||
20 | }, | ||
21 | toolbars: 'Ilobretoj de la redaktilo' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/es.js b/sources/plugins/toolbar/lang/es.js new file mode 100644 index 0000000..d00ca66 --- /dev/null +++ b/sources/plugins/toolbar/lang/es.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'es', { | ||
6 | toolbarCollapse: 'Contraer barra de herramientas', | ||
7 | toolbarExpand: 'Expandir barra de herramientas', | ||
8 | toolbarGroups: { | ||
9 | document: 'Documento', | ||
10 | clipboard: 'Portapapeles/Deshacer', | ||
11 | editing: 'Edición', | ||
12 | forms: 'Formularios', | ||
13 | basicstyles: 'Estilos básicos', | ||
14 | paragraph: 'Párrafo', | ||
15 | links: 'Enlaces', | ||
16 | insert: 'Insertar', | ||
17 | styles: 'Estilos', | ||
18 | colors: 'Colores', | ||
19 | tools: 'Herramientas' | ||
20 | }, | ||
21 | toolbars: 'Barras de herramientas del editor' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/et.js b/sources/plugins/toolbar/lang/et.js new file mode 100644 index 0000000..034aac3 --- /dev/null +++ b/sources/plugins/toolbar/lang/et.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'et', { | ||
6 | toolbarCollapse: 'Tööriistariba peitmine', | ||
7 | toolbarExpand: 'Tööriistariba näitamine', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Lõikelaud/tagasivõtmine', | ||
11 | editing: 'Muutmine', | ||
12 | forms: 'Vormid', | ||
13 | basicstyles: 'Põhistiilid', | ||
14 | paragraph: 'Lõik', | ||
15 | links: 'Lingid', | ||
16 | insert: 'Sisesta', | ||
17 | styles: 'Stiilid', | ||
18 | colors: 'Värvid', | ||
19 | tools: 'Tööriistad' | ||
20 | }, | ||
21 | toolbars: 'Redaktori tööriistaribad' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/eu.js b/sources/plugins/toolbar/lang/eu.js new file mode 100644 index 0000000..6ab3973 --- /dev/null +++ b/sources/plugins/toolbar/lang/eu.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'eu', { | ||
6 | toolbarCollapse: 'Tolestu tresna-barra', | ||
7 | toolbarExpand: 'Zabaldu tresna-barra', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokumentua', | ||
10 | clipboard: 'Arbela/Desegin', | ||
11 | editing: 'Editatu', | ||
12 | forms: 'Formularioak', | ||
13 | basicstyles: 'Oinarrizko estiloak', | ||
14 | paragraph: 'Paragrafoa', | ||
15 | links: 'Estekak', | ||
16 | insert: 'Txertatu', | ||
17 | styles: 'Estiloak', | ||
18 | colors: 'Koloreak', | ||
19 | tools: 'Tresnak' | ||
20 | }, | ||
21 | toolbars: 'Editorearen tresna-barrak' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/fa.js b/sources/plugins/toolbar/lang/fa.js new file mode 100644 index 0000000..30d302c --- /dev/null +++ b/sources/plugins/toolbar/lang/fa.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'fa', { | ||
6 | toolbarCollapse: 'بستن نوار ابزار', | ||
7 | toolbarExpand: 'بازکردن نوار ابزار', | ||
8 | toolbarGroups: { | ||
9 | document: 'سند', | ||
10 | clipboard: 'حافظه موقت/برگشت', | ||
11 | editing: 'در حال ویرایش', | ||
12 | forms: 'فرمها', | ||
13 | basicstyles: 'سبکهای پایه', | ||
14 | paragraph: 'بند', | ||
15 | links: 'پیوندها', | ||
16 | insert: 'ورود', | ||
17 | styles: 'سبکها', | ||
18 | colors: 'رنگها', | ||
19 | tools: 'ابزارها' | ||
20 | }, | ||
21 | toolbars: 'نوار ابزارهای ویرایشگر' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/fi.js b/sources/plugins/toolbar/lang/fi.js new file mode 100644 index 0000000..2eb42bd --- /dev/null +++ b/sources/plugins/toolbar/lang/fi.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'fi', { | ||
6 | toolbarCollapse: 'Kutista työkalupalkki', | ||
7 | toolbarExpand: 'Laajenna työkalupalkki', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokumentti', | ||
10 | clipboard: 'Leikepöytä/Kumoa', | ||
11 | editing: 'Muokkaus', | ||
12 | forms: 'Lomakkeet', | ||
13 | basicstyles: 'Perustyylit', | ||
14 | paragraph: 'Kappale', | ||
15 | links: 'Linkit', | ||
16 | insert: 'Lisää', | ||
17 | styles: 'Tyylit', | ||
18 | colors: 'Värit', | ||
19 | tools: 'Työkalut' | ||
20 | }, | ||
21 | toolbars: 'Editorin työkalupalkit' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/fo.js b/sources/plugins/toolbar/lang/fo.js new file mode 100644 index 0000000..93c859d --- /dev/null +++ b/sources/plugins/toolbar/lang/fo.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'fo', { | ||
6 | toolbarCollapse: 'Lat Toolbar aftur', | ||
7 | toolbarExpand: 'Vís Toolbar', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editering', | ||
12 | forms: 'Formar', | ||
13 | basicstyles: 'Grundleggjandi Styles', | ||
14 | paragraph: 'Reglubrot', | ||
15 | links: 'Leinkjur', | ||
16 | insert: 'Set inn', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Litir', | ||
19 | tools: 'Tól' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/fr-ca.js b/sources/plugins/toolbar/lang/fr-ca.js new file mode 100644 index 0000000..06baacf --- /dev/null +++ b/sources/plugins/toolbar/lang/fr-ca.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'fr-ca', { | ||
6 | toolbarCollapse: 'Enrouler la barre d\'outils', | ||
7 | toolbarExpand: 'Dérouler la barre d\'outils', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Presse papier/Annuler', | ||
11 | editing: 'Édition', | ||
12 | forms: 'Formulaires', | ||
13 | basicstyles: 'Styles de base', | ||
14 | paragraph: 'Paragraphe', | ||
15 | links: 'Liens', | ||
16 | insert: 'Insérer', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Couleurs', | ||
19 | tools: 'Outils' | ||
20 | }, | ||
21 | toolbars: 'Barre d\'outils de l\'éditeur' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/fr.js b/sources/plugins/toolbar/lang/fr.js new file mode 100644 index 0000000..ec8a2aa --- /dev/null +++ b/sources/plugins/toolbar/lang/fr.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'fr', { | ||
6 | toolbarCollapse: 'Enrouler la barre d\'outils', | ||
7 | toolbarExpand: 'Dérouler la barre d\'outils', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Presse-papier/Défaire', | ||
11 | editing: 'Editer', | ||
12 | forms: 'Formulaires', | ||
13 | basicstyles: 'Styles de base', | ||
14 | paragraph: 'Paragraphe', | ||
15 | links: 'Liens', | ||
16 | insert: 'Insérer', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Couleurs', | ||
19 | tools: 'Outils' | ||
20 | }, | ||
21 | toolbars: 'Barre d\'outils de l\'éditeur' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/gl.js b/sources/plugins/toolbar/lang/gl.js new file mode 100644 index 0000000..a9517be --- /dev/null +++ b/sources/plugins/toolbar/lang/gl.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'gl', { | ||
6 | toolbarCollapse: 'Contraer a barra de ferramentas', | ||
7 | toolbarExpand: 'Expandir a barra de ferramentas', | ||
8 | toolbarGroups: { | ||
9 | document: 'Documento', | ||
10 | clipboard: 'Portapapeis/desfacer', | ||
11 | editing: 'Edición', | ||
12 | forms: 'Formularios', | ||
13 | basicstyles: 'Estilos básicos', | ||
14 | paragraph: 'Paragrafo', | ||
15 | links: 'Ligazóns', | ||
16 | insert: 'Inserir', | ||
17 | styles: 'Estilos', | ||
18 | colors: 'Cores', | ||
19 | tools: 'Ferramentas' | ||
20 | }, | ||
21 | toolbars: 'Barras de ferramentas do editor' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/gu.js b/sources/plugins/toolbar/lang/gu.js new file mode 100644 index 0000000..65df646 --- /dev/null +++ b/sources/plugins/toolbar/lang/gu.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'gu', { | ||
6 | toolbarCollapse: 'ટૂલબાર નાનું કરવું', | ||
7 | toolbarExpand: 'ટૂલબાર મોટું કરવું', | ||
8 | toolbarGroups: { | ||
9 | document: 'દસ્તાવેજ', | ||
10 | clipboard: 'ક્લિપબોર્ડ/અન', | ||
11 | editing: 'એડીટ કરવું', | ||
12 | forms: 'ફોર્મ', | ||
13 | basicstyles: 'બેસિક્ સ્ટાઇલ', | ||
14 | paragraph: 'ફકરો', | ||
15 | links: 'લીંક', | ||
16 | insert: 'ઉમેરવું', | ||
17 | styles: 'સ્ટાઇલ', | ||
18 | colors: 'રંગ', | ||
19 | tools: 'ટૂલ્સ' | ||
20 | }, | ||
21 | toolbars: 'એડીટર ટૂલ બાર' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/he.js b/sources/plugins/toolbar/lang/he.js new file mode 100644 index 0000000..2de8d23 --- /dev/null +++ b/sources/plugins/toolbar/lang/he.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'he', { | ||
6 | toolbarCollapse: 'מזעור סרגל כלים', | ||
7 | toolbarExpand: 'הרחבת סרגל כלים', | ||
8 | toolbarGroups: { | ||
9 | document: 'מסמך', | ||
10 | clipboard: 'לוח הגזירים (Clipboard)/צעד אחרון', | ||
11 | editing: 'עריכה', | ||
12 | forms: 'טפסים', | ||
13 | basicstyles: 'עיצוב בסיסי', | ||
14 | paragraph: 'פסקה', | ||
15 | links: 'קישורים', | ||
16 | insert: 'הכנסה', | ||
17 | styles: 'עיצוב', | ||
18 | colors: 'צבעים', | ||
19 | tools: 'כלים' | ||
20 | }, | ||
21 | toolbars: 'סרגלי כלים של העורך' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/hi.js b/sources/plugins/toolbar/lang/hi.js new file mode 100644 index 0000000..99a601f --- /dev/null +++ b/sources/plugins/toolbar/lang/hi.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'hi', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', // MISSING | ||
7 | toolbarExpand: 'Expand Toolbar', // MISSING | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'एडिटर टूलबार' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/hr.js b/sources/plugins/toolbar/lang/hr.js new file mode 100644 index 0000000..b636415 --- /dev/null +++ b/sources/plugins/toolbar/lang/hr.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'hr', { | ||
6 | toolbarCollapse: 'Smanji alatnu traku', | ||
7 | toolbarExpand: 'Proširi alatnu traku', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Međuspremnik/Poništi', | ||
11 | editing: 'Uređivanje', | ||
12 | forms: 'Forme', | ||
13 | basicstyles: 'Osnovni stilovi', | ||
14 | paragraph: 'Paragraf', | ||
15 | links: 'Veze', | ||
16 | insert: 'Umetni', | ||
17 | styles: 'Stilovi', | ||
18 | colors: 'Boje', | ||
19 | tools: 'Alatke' | ||
20 | }, | ||
21 | toolbars: 'Alatne trake uređivača teksta' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/hu.js b/sources/plugins/toolbar/lang/hu.js new file mode 100644 index 0000000..e40d853 --- /dev/null +++ b/sources/plugins/toolbar/lang/hu.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'hu', { | ||
6 | toolbarCollapse: 'Eszköztár összecsukása', | ||
7 | toolbarExpand: 'Eszköztár szétnyitása', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokumentum', | ||
10 | clipboard: 'Vágólap/Visszavonás', | ||
11 | editing: 'Szerkesztés', | ||
12 | forms: 'Űrlapok', | ||
13 | basicstyles: 'Alapstílusok', | ||
14 | paragraph: 'Bekezdés', | ||
15 | links: 'Hivatkozások', | ||
16 | insert: 'Beszúrás', | ||
17 | styles: 'Stílusok', | ||
18 | colors: 'Színek', | ||
19 | tools: 'Eszközök' | ||
20 | }, | ||
21 | toolbars: 'Szerkesztő Eszköztár' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/id.js b/sources/plugins/toolbar/lang/id.js new file mode 100644 index 0000000..fc56bba --- /dev/null +++ b/sources/plugins/toolbar/lang/id.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'id', { | ||
6 | toolbarCollapse: 'Ciutkan Toolbar', | ||
7 | toolbarExpand: 'Bentangkan Toolbar', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokumen', | ||
10 | clipboard: 'Papan klip / Kembalikan perlakuan', | ||
11 | editing: 'Sunting', | ||
12 | forms: 'Formulir', | ||
13 | basicstyles: 'Gaya Dasar', | ||
14 | paragraph: 'Paragraf', | ||
15 | links: 'Tautan', | ||
16 | insert: 'Sisip', | ||
17 | styles: 'Gaya', | ||
18 | colors: 'Warna', | ||
19 | tools: 'Alat' | ||
20 | }, | ||
21 | toolbars: 'Toolbar Penyunting' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/is.js b/sources/plugins/toolbar/lang/is.js new file mode 100644 index 0000000..da0617a --- /dev/null +++ b/sources/plugins/toolbar/lang/is.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'is', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', // MISSING | ||
7 | toolbarExpand: 'Expand Toolbar', // MISSING | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' // MISSING | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/it.js b/sources/plugins/toolbar/lang/it.js new file mode 100644 index 0000000..e5e5a0f --- /dev/null +++ b/sources/plugins/toolbar/lang/it.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'it', { | ||
6 | toolbarCollapse: 'Minimizza Toolbar', | ||
7 | toolbarExpand: 'Espandi Toolbar', | ||
8 | toolbarGroups: { | ||
9 | document: 'Documento', | ||
10 | clipboard: 'Copia negli appunti/Annulla', | ||
11 | editing: 'Modifica', | ||
12 | forms: 'Form', | ||
13 | basicstyles: 'Stili di base', | ||
14 | paragraph: 'Paragrafo', | ||
15 | links: 'Link', | ||
16 | insert: 'Inserisci', | ||
17 | styles: 'Stili', | ||
18 | colors: 'Colori', | ||
19 | tools: 'Strumenti' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbar' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/ja.js b/sources/plugins/toolbar/lang/ja.js new file mode 100644 index 0000000..0359199 --- /dev/null +++ b/sources/plugins/toolbar/lang/ja.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'ja', { | ||
6 | toolbarCollapse: 'ツールバーを閉じる', | ||
7 | toolbarExpand: 'ツールバーを開く', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: '編集ツールバー' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/ka.js b/sources/plugins/toolbar/lang/ka.js new file mode 100644 index 0000000..48ef4a4 --- /dev/null +++ b/sources/plugins/toolbar/lang/ka.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'ka', { | ||
6 | toolbarCollapse: 'ხელსაწყოთა ზოლის შეწევა', | ||
7 | toolbarExpand: 'ხელსაწყოთა ზოლის გამოწევა', | ||
8 | toolbarGroups: { | ||
9 | document: 'დოკუმენტი', | ||
10 | clipboard: 'Clipboard/გაუქმება', | ||
11 | editing: 'რედაქტირება', | ||
12 | forms: 'ფორმები', | ||
13 | basicstyles: 'ძირითადი სტილები', | ||
14 | paragraph: 'აბზაცი', | ||
15 | links: 'ბმულები', | ||
16 | insert: 'ჩასმა', | ||
17 | styles: 'სტილები', | ||
18 | colors: 'ფერები', | ||
19 | tools: 'ხელსაწყოები' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' // MISSING | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/km.js b/sources/plugins/toolbar/lang/km.js new file mode 100644 index 0000000..4ceb278 --- /dev/null +++ b/sources/plugins/toolbar/lang/km.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'km', { | ||
6 | toolbarCollapse: 'បង្រួមរបារឧបករណ៍', | ||
7 | toolbarExpand: 'ពង្រីករបារឧបករណ៍', | ||
8 | toolbarGroups: { | ||
9 | document: 'ឯកសារ', | ||
10 | clipboard: 'Clipboard/មិនធ្វើវិញ', | ||
11 | editing: 'ការកែសម្រួល', | ||
12 | forms: 'បែបបទ', | ||
13 | basicstyles: 'រចនាបថមូលដ្ឋាន', | ||
14 | paragraph: 'កថាខណ្ឌ', | ||
15 | links: 'តំណ', | ||
16 | insert: 'បញ្ចូល', | ||
17 | styles: 'រចនាបថ', | ||
18 | colors: 'ពណ៌', | ||
19 | tools: 'ឧបករណ៍' | ||
20 | }, | ||
21 | toolbars: 'របារឧបករណ៍កែសម្រួល' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/ko.js b/sources/plugins/toolbar/lang/ko.js new file mode 100644 index 0000000..323b9b3 --- /dev/null +++ b/sources/plugins/toolbar/lang/ko.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'ko', { | ||
6 | toolbarCollapse: '툴바 줄이기', | ||
7 | toolbarExpand: '툴바 확장', | ||
8 | toolbarGroups: { | ||
9 | document: '문서', | ||
10 | clipboard: '클립보드/실행 취소', | ||
11 | editing: '편집', | ||
12 | forms: '폼', | ||
13 | basicstyles: '기본 스타일', | ||
14 | paragraph: '단락', | ||
15 | links: '링크', | ||
16 | insert: '삽입', | ||
17 | styles: '스타일', | ||
18 | colors: '색상', | ||
19 | tools: '도구' | ||
20 | }, | ||
21 | toolbars: '에디터 툴바' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/ku.js b/sources/plugins/toolbar/lang/ku.js new file mode 100644 index 0000000..4b7cfec --- /dev/null +++ b/sources/plugins/toolbar/lang/ku.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'ku', { | ||
6 | toolbarCollapse: 'شاردنەوی هێڵی تووڵامراز', | ||
7 | toolbarExpand: 'نیشاندانی هێڵی تووڵامراز', | ||
8 | toolbarGroups: { | ||
9 | document: 'پەڕه', | ||
10 | clipboard: 'بڕین/پووچکردنەوە', | ||
11 | editing: 'چاکسازی', | ||
12 | forms: 'داڕشتە', | ||
13 | basicstyles: 'شێوازی بنچینەیی', | ||
14 | paragraph: 'بڕگە', | ||
15 | links: 'بەستەر', | ||
16 | insert: 'خستنە ناو', | ||
17 | styles: 'شێواز', | ||
18 | colors: 'ڕەنگەکان', | ||
19 | tools: 'ئامرازەکان' | ||
20 | }, | ||
21 | toolbars: 'تووڵامرازی دەسکاریکەر' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/lt.js b/sources/plugins/toolbar/lang/lt.js new file mode 100644 index 0000000..2950ff2 --- /dev/null +++ b/sources/plugins/toolbar/lang/lt.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'lt', { | ||
6 | toolbarCollapse: 'Apjungti įrankių juostą', | ||
7 | toolbarExpand: 'Išplėsti įrankių juostą', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokumentas', | ||
10 | clipboard: 'Atmintinė/Atgal', | ||
11 | editing: 'Redagavimas', | ||
12 | forms: 'Formos', | ||
13 | basicstyles: 'Pagrindiniai stiliai', | ||
14 | paragraph: 'Paragrafas', | ||
15 | links: 'Nuorodos', | ||
16 | insert: 'Įterpti', | ||
17 | styles: 'Stiliai', | ||
18 | colors: 'Spalvos', | ||
19 | tools: 'Įrankiai' | ||
20 | }, | ||
21 | toolbars: 'Redaktoriaus įrankiai' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/lv.js b/sources/plugins/toolbar/lang/lv.js new file mode 100644 index 0000000..a57a31e --- /dev/null +++ b/sources/plugins/toolbar/lang/lv.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'lv', { | ||
6 | toolbarCollapse: 'Aizvērt rīkjoslu', | ||
7 | toolbarExpand: 'Atvērt rīkjoslu', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokuments', | ||
10 | clipboard: 'Starpliktuve/Atcelt', | ||
11 | editing: 'Labošana', | ||
12 | forms: 'Formas', | ||
13 | basicstyles: 'Pamata stili', | ||
14 | paragraph: 'Paragrāfs', | ||
15 | links: 'Saites', | ||
16 | insert: 'Ievietot', | ||
17 | styles: 'Stili', | ||
18 | colors: 'Krāsas', | ||
19 | tools: 'Rīki' | ||
20 | }, | ||
21 | toolbars: 'Redaktora rīkjoslas' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/mk.js b/sources/plugins/toolbar/lang/mk.js new file mode 100644 index 0000000..9c5eeaa --- /dev/null +++ b/sources/plugins/toolbar/lang/mk.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'mk', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', // MISSING | ||
7 | toolbarExpand: 'Expand Toolbar', // MISSING | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' // MISSING | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/mn.js b/sources/plugins/toolbar/lang/mn.js new file mode 100644 index 0000000..b3f42e2 --- /dev/null +++ b/sources/plugins/toolbar/lang/mn.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'mn', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', // MISSING | ||
7 | toolbarExpand: 'Expand Toolbar', // MISSING | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Холбоосууд', | ||
16 | insert: 'Оруулах', | ||
17 | styles: 'Загварууд', | ||
18 | colors: 'Онгөнүүд', | ||
19 | tools: 'Хэрэгслүүд' | ||
20 | }, | ||
21 | toolbars: 'Болосруулагчийн хэрэгслийн самбар' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/ms.js b/sources/plugins/toolbar/lang/ms.js new file mode 100644 index 0000000..3f095cf --- /dev/null +++ b/sources/plugins/toolbar/lang/ms.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'ms', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', // MISSING | ||
7 | toolbarExpand: 'Expand Toolbar', // MISSING | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' // MISSING | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/nb.js b/sources/plugins/toolbar/lang/nb.js new file mode 100644 index 0000000..54d47ee --- /dev/null +++ b/sources/plugins/toolbar/lang/nb.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'nb', { | ||
6 | toolbarCollapse: 'Skjul verktøylinje', | ||
7 | toolbarExpand: 'Vis verktøylinje', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Utklippstavle/Angre', | ||
11 | editing: 'Redigering', | ||
12 | forms: 'Skjema', | ||
13 | basicstyles: 'Basisstiler', | ||
14 | paragraph: 'Avsnitt', | ||
15 | links: 'Lenker', | ||
16 | insert: 'Innsetting', | ||
17 | styles: 'Stiler', | ||
18 | colors: 'Farger', | ||
19 | tools: 'Verktøy' | ||
20 | }, | ||
21 | toolbars: 'Verktøylinjer for editor' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/nl.js b/sources/plugins/toolbar/lang/nl.js new file mode 100644 index 0000000..f5e821f --- /dev/null +++ b/sources/plugins/toolbar/lang/nl.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'nl', { | ||
6 | toolbarCollapse: 'Werkbalk inklappen', | ||
7 | toolbarExpand: 'Werkbalk uitklappen', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Klembord/Ongedaan maken', | ||
11 | editing: 'Bewerken', | ||
12 | forms: 'Formulieren', | ||
13 | basicstyles: 'Basisstijlen', | ||
14 | paragraph: 'Paragraaf', | ||
15 | links: 'Links', | ||
16 | insert: 'Invoegen', | ||
17 | styles: 'Stijlen', | ||
18 | colors: 'Kleuren', | ||
19 | tools: 'Toepassingen' | ||
20 | }, | ||
21 | toolbars: 'Werkbalken' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/no.js b/sources/plugins/toolbar/lang/no.js new file mode 100644 index 0000000..64a9cb9 --- /dev/null +++ b/sources/plugins/toolbar/lang/no.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'no', { | ||
6 | toolbarCollapse: 'Skjul verktøylinje', | ||
7 | toolbarExpand: 'Vis verktøylinje', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Utklippstavle/Angre', | ||
11 | editing: 'Redigering', | ||
12 | forms: 'Skjema', | ||
13 | basicstyles: 'Basisstiler', | ||
14 | paragraph: 'Avsnitt', | ||
15 | links: 'Lenker', | ||
16 | insert: 'Innsetting', | ||
17 | styles: 'Stiler', | ||
18 | colors: 'Farger', | ||
19 | tools: 'Verktøy' | ||
20 | }, | ||
21 | toolbars: 'Verktøylinjer for editor' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/pl.js b/sources/plugins/toolbar/lang/pl.js new file mode 100644 index 0000000..036f131 --- /dev/null +++ b/sources/plugins/toolbar/lang/pl.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'pl', { | ||
6 | toolbarCollapse: 'Zwiń pasek narzędzi', | ||
7 | toolbarExpand: 'Rozwiń pasek narzędzi', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Schowek/Wstecz', | ||
11 | editing: 'Edycja', | ||
12 | forms: 'Formularze', | ||
13 | basicstyles: 'Style podstawowe', | ||
14 | paragraph: 'Akapit', | ||
15 | links: 'Hiperłącza', | ||
16 | insert: 'Wstawianie', | ||
17 | styles: 'Style', | ||
18 | colors: 'Kolory', | ||
19 | tools: 'Narzędzia' | ||
20 | }, | ||
21 | toolbars: 'Paski narzędzi edytora' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/pt-br.js b/sources/plugins/toolbar/lang/pt-br.js new file mode 100644 index 0000000..1f31a78 --- /dev/null +++ b/sources/plugins/toolbar/lang/pt-br.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'pt-br', { | ||
6 | toolbarCollapse: 'Diminuir Barra de Ferramentas', | ||
7 | toolbarExpand: 'Aumentar Barra de Ferramentas', | ||
8 | toolbarGroups: { | ||
9 | document: 'Documento', | ||
10 | clipboard: 'Clipboard/Desfazer', | ||
11 | editing: 'Edição', | ||
12 | forms: 'Formulários', | ||
13 | basicstyles: 'Estilos Básicos', | ||
14 | paragraph: 'Paragrafo', | ||
15 | links: 'Links', | ||
16 | insert: 'Inserir', | ||
17 | styles: 'Estilos', | ||
18 | colors: 'Cores', | ||
19 | tools: 'Ferramentas' | ||
20 | }, | ||
21 | toolbars: 'Barra de Ferramentas do Editor' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/pt.js b/sources/plugins/toolbar/lang/pt.js new file mode 100644 index 0000000..2406f60 --- /dev/null +++ b/sources/plugins/toolbar/lang/pt.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'pt', { | ||
6 | toolbarCollapse: 'Ocultar barra de ferramentas', | ||
7 | toolbarExpand: 'Expandir barra de ferramentas', | ||
8 | toolbarGroups: { | ||
9 | document: 'Documento', | ||
10 | clipboard: 'Área de transferência/Anular', | ||
11 | editing: 'Edição', | ||
12 | forms: 'Formulários', | ||
13 | basicstyles: 'Estilos Básicos', | ||
14 | paragraph: 'Parágrafo', | ||
15 | links: 'Hiperligações', | ||
16 | insert: 'Inserir', | ||
17 | styles: 'Estilos', | ||
18 | colors: 'Cores', | ||
19 | tools: 'Ferramentas' | ||
20 | }, | ||
21 | toolbars: 'Editor de Barras de Ferramentas' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/ro.js b/sources/plugins/toolbar/lang/ro.js new file mode 100644 index 0000000..4d3b395 --- /dev/null +++ b/sources/plugins/toolbar/lang/ro.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'ro', { | ||
6 | toolbarCollapse: 'Micșorează Bara', | ||
7 | toolbarExpand: 'Mărește Bara', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Editează bara de unelte' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/ru.js b/sources/plugins/toolbar/lang/ru.js new file mode 100644 index 0000000..2f384c6 --- /dev/null +++ b/sources/plugins/toolbar/lang/ru.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'ru', { | ||
6 | toolbarCollapse: 'Свернуть панель инструментов', | ||
7 | toolbarExpand: 'Развернуть панель инструментов', | ||
8 | toolbarGroups: { | ||
9 | document: 'Документ', | ||
10 | clipboard: 'Буфер обмена / Отмена действий', | ||
11 | editing: 'Корректировка', | ||
12 | forms: 'Формы', | ||
13 | basicstyles: 'Простые стили', | ||
14 | paragraph: 'Абзац', | ||
15 | links: 'Ссылки', | ||
16 | insert: 'Вставка', | ||
17 | styles: 'Стили', | ||
18 | colors: 'Цвета', | ||
19 | tools: 'Инструменты' | ||
20 | }, | ||
21 | toolbars: 'Панели инструментов редактора' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/si.js b/sources/plugins/toolbar/lang/si.js new file mode 100644 index 0000000..e74adbb --- /dev/null +++ b/sources/plugins/toolbar/lang/si.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'si', { | ||
6 | toolbarCollapse: 'මෙවලම් තීරුව හැකුලුම.', | ||
7 | toolbarExpand: 'මෙවලම් තීරුව දීගහැරුම', | ||
8 | toolbarGroups: { | ||
9 | document: 'ලිපිය', | ||
10 | clipboard: 'ඇමිණුම වෙනස් කිරීම', | ||
11 | editing: 'සංස්කරණය', | ||
12 | forms: 'පෝරමය', | ||
13 | basicstyles: 'මුලික විලාසය', | ||
14 | paragraph: 'චේදය', | ||
15 | links: 'සබැඳිය', | ||
16 | insert: 'ඇතුලත් කිරීම', | ||
17 | styles: 'විලාසය', | ||
18 | colors: 'වර්ණය', | ||
19 | tools: 'මෙවලම්' | ||
20 | }, | ||
21 | toolbars: 'සංස්කරණ මෙවලම් තීරුව' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/sk.js b/sources/plugins/toolbar/lang/sk.js new file mode 100644 index 0000000..d1b78cf --- /dev/null +++ b/sources/plugins/toolbar/lang/sk.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'sk', { | ||
6 | toolbarCollapse: 'Zbaliť lištu nástrojov', | ||
7 | toolbarExpand: 'Rozbaliť lištu nástrojov', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Schránka pre kopírovanie/Späť', | ||
11 | editing: 'Upravovanie', | ||
12 | forms: 'Formuláre', | ||
13 | basicstyles: 'Základné štýly', | ||
14 | paragraph: 'Odsek', | ||
15 | links: 'Odkazy', | ||
16 | insert: 'Vložiť', | ||
17 | styles: 'Štýly', | ||
18 | colors: 'Farby', | ||
19 | tools: 'Nástroje' | ||
20 | }, | ||
21 | toolbars: 'Lišty nástrojov editora' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/sl.js b/sources/plugins/toolbar/lang/sl.js new file mode 100644 index 0000000..5bf0e35 --- /dev/null +++ b/sources/plugins/toolbar/lang/sl.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'sl', { | ||
6 | toolbarCollapse: 'Skrči Orodno Vrstico', | ||
7 | toolbarExpand: 'Razširi Orodno Vrstico', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Urejevalnik orodne vrstice' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/sq.js b/sources/plugins/toolbar/lang/sq.js new file mode 100644 index 0000000..1616bdd --- /dev/null +++ b/sources/plugins/toolbar/lang/sq.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'sq', { | ||
6 | toolbarCollapse: 'Zvogëlo Shiritin', | ||
7 | toolbarExpand: 'Zgjero Shiritin', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Tabela Punës/Ribëje', | ||
11 | editing: 'Duke Redaktuar', | ||
12 | forms: 'Formular', | ||
13 | basicstyles: 'Stili Bazë', | ||
14 | paragraph: 'Paragraf', | ||
15 | links: 'Nyjet', | ||
16 | insert: 'Shto', | ||
17 | styles: 'Stil', | ||
18 | colors: 'Ngjyrat', | ||
19 | tools: 'Mjetet' | ||
20 | }, | ||
21 | toolbars: 'Shiritet e Redaktuesit' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/sr-latn.js b/sources/plugins/toolbar/lang/sr-latn.js new file mode 100644 index 0000000..4cb758d --- /dev/null +++ b/sources/plugins/toolbar/lang/sr-latn.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'sr-latn', { | ||
6 | toolbarCollapse: 'Suzi alatnu traku', | ||
7 | toolbarExpand: 'Proširi alatnu traku', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Alatne trake' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/sr.js b/sources/plugins/toolbar/lang/sr.js new file mode 100644 index 0000000..498eebf --- /dev/null +++ b/sources/plugins/toolbar/lang/sr.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'sr', { | ||
6 | toolbarCollapse: 'Склопи алатну траку', | ||
7 | toolbarExpand: 'Прошири алатну траку', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'Едитор алатне траке' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/sv.js b/sources/plugins/toolbar/lang/sv.js new file mode 100644 index 0000000..5a5d1b9 --- /dev/null +++ b/sources/plugins/toolbar/lang/sv.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'sv', { | ||
6 | toolbarCollapse: 'Dölj verktygsfält', | ||
7 | toolbarExpand: 'Visa verktygsfält', | ||
8 | toolbarGroups: { | ||
9 | document: 'Dokument', | ||
10 | clipboard: 'Urklipp/ångra', | ||
11 | editing: 'Redigering', | ||
12 | forms: 'Formulär', | ||
13 | basicstyles: 'Basstilar', | ||
14 | paragraph: 'Paragraf', | ||
15 | links: 'Länkar', | ||
16 | insert: 'Infoga', | ||
17 | styles: 'Stilar', | ||
18 | colors: 'Färger', | ||
19 | tools: 'Verktyg' | ||
20 | }, | ||
21 | toolbars: 'Redigera verktygsfält' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/th.js b/sources/plugins/toolbar/lang/th.js new file mode 100644 index 0000000..3aaa7a5 --- /dev/null +++ b/sources/plugins/toolbar/lang/th.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'th', { | ||
6 | toolbarCollapse: 'ซ่อนแถบเครื่องมือ', | ||
7 | toolbarExpand: 'เปิดแถบเครื่องมือ', | ||
8 | toolbarGroups: { | ||
9 | document: 'Document', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Editing', | ||
12 | forms: 'Forms', | ||
13 | basicstyles: 'Basic Styles', | ||
14 | paragraph: 'Paragraph', | ||
15 | links: 'Links', | ||
16 | insert: 'Insert', | ||
17 | styles: 'Styles', | ||
18 | colors: 'Colors', | ||
19 | tools: 'Tools' | ||
20 | }, | ||
21 | toolbars: 'แถบเครื่องมือช่วยพิมพ์ข้อความ' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/tr.js b/sources/plugins/toolbar/lang/tr.js new file mode 100644 index 0000000..e2a757b --- /dev/null +++ b/sources/plugins/toolbar/lang/tr.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'tr', { | ||
6 | toolbarCollapse: 'Araç çubuklarını topla', | ||
7 | toolbarExpand: 'Araç çubuklarını aç', | ||
8 | toolbarGroups: { | ||
9 | document: 'Belge', | ||
10 | clipboard: 'Pano/Geri al', | ||
11 | editing: 'Düzenleme', | ||
12 | forms: 'Formlar', | ||
13 | basicstyles: 'Temel Stiller', | ||
14 | paragraph: 'Paragraf', | ||
15 | links: 'Bağlantılar', | ||
16 | insert: 'Ekle', | ||
17 | styles: 'Stiller', | ||
18 | colors: 'Renkler', | ||
19 | tools: 'Araçlar' | ||
20 | }, | ||
21 | toolbars: 'Araç çubukları Editörü' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/tt.js b/sources/plugins/toolbar/lang/tt.js new file mode 100644 index 0000000..25df66c --- /dev/null +++ b/sources/plugins/toolbar/lang/tt.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'tt', { | ||
6 | toolbarCollapse: 'Collapse Toolbar', // MISSING | ||
7 | toolbarExpand: 'Expand Toolbar', // MISSING | ||
8 | toolbarGroups: { | ||
9 | document: 'Документ', | ||
10 | clipboard: 'Алмашу буферы/Кайтару', | ||
11 | editing: 'Төзәтү', | ||
12 | forms: 'Формалар', | ||
13 | basicstyles: 'Төп стильләр', | ||
14 | paragraph: 'Параграф', | ||
15 | links: 'Сылталамалар', | ||
16 | insert: 'Өстәү', | ||
17 | styles: 'Стильләр', | ||
18 | colors: 'Төсләр', | ||
19 | tools: 'Кораллар' | ||
20 | }, | ||
21 | toolbars: 'Editor toolbars' // MISSING | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/ug.js b/sources/plugins/toolbar/lang/ug.js new file mode 100644 index 0000000..057552e --- /dev/null +++ b/sources/plugins/toolbar/lang/ug.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'ug', { | ||
6 | toolbarCollapse: 'قورال بالداقنى قاتلا', | ||
7 | toolbarExpand: 'قورال بالداقنى ياي', | ||
8 | toolbarGroups: { | ||
9 | document: 'پۈتۈك', | ||
10 | clipboard: 'چاپلاش تاختىسى/يېنىۋال', | ||
11 | editing: 'تەھرىر', | ||
12 | forms: 'جەدۋەل', | ||
13 | basicstyles: 'ئاساسىي ئۇسلۇب', | ||
14 | paragraph: 'ئابزاس', | ||
15 | links: 'ئۇلانما', | ||
16 | insert: 'قىستۇر', | ||
17 | styles: 'ئۇسلۇب', | ||
18 | colors: 'رەڭ', | ||
19 | tools: 'قورال' | ||
20 | }, | ||
21 | toolbars: 'قورال بالداق' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/uk.js b/sources/plugins/toolbar/lang/uk.js new file mode 100644 index 0000000..c46d122 --- /dev/null +++ b/sources/plugins/toolbar/lang/uk.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'uk', { | ||
6 | toolbarCollapse: 'Згорнути панель інструментів', | ||
7 | toolbarExpand: 'Розгорнути панель інструментів', | ||
8 | toolbarGroups: { | ||
9 | document: 'Документ', | ||
10 | clipboard: 'Буфер обміну / Скасувати', | ||
11 | editing: 'Редагування', | ||
12 | forms: 'Форми', | ||
13 | basicstyles: 'Основний Стиль', | ||
14 | paragraph: 'Параграф', | ||
15 | links: 'Посилання', | ||
16 | insert: 'Вставити', | ||
17 | styles: 'Стилі', | ||
18 | colors: 'Кольори', | ||
19 | tools: 'Інструменти' | ||
20 | }, | ||
21 | toolbars: 'Панель інструментів редактора' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/vi.js b/sources/plugins/toolbar/lang/vi.js new file mode 100644 index 0000000..ff56d9c --- /dev/null +++ b/sources/plugins/toolbar/lang/vi.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'vi', { | ||
6 | toolbarCollapse: 'Thu gọn thanh công cụ', | ||
7 | toolbarExpand: 'Mở rộng thnah công cụ', | ||
8 | toolbarGroups: { | ||
9 | document: 'Tài liệu', | ||
10 | clipboard: 'Clipboard/Undo', | ||
11 | editing: 'Chỉnh sửa', | ||
12 | forms: 'Bảng biểu', | ||
13 | basicstyles: 'Kiểu cơ bản', | ||
14 | paragraph: 'Đoạn', | ||
15 | links: 'Liên kết', | ||
16 | insert: 'Chèn', | ||
17 | styles: 'Kiểu', | ||
18 | colors: 'Màu sắc', | ||
19 | tools: 'Công cụ' | ||
20 | }, | ||
21 | toolbars: 'Thanh công cụ' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/zh-cn.js b/sources/plugins/toolbar/lang/zh-cn.js new file mode 100644 index 0000000..2b69e32 --- /dev/null +++ b/sources/plugins/toolbar/lang/zh-cn.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'zh-cn', { | ||
6 | toolbarCollapse: '折叠工具栏', | ||
7 | toolbarExpand: '展开工具栏', | ||
8 | toolbarGroups: { | ||
9 | document: '文档', | ||
10 | clipboard: '剪贴板/撤销', | ||
11 | editing: '编辑', | ||
12 | forms: '表单', | ||
13 | basicstyles: '基本格式', | ||
14 | paragraph: '段落', | ||
15 | links: '链接', | ||
16 | insert: '插入', | ||
17 | styles: '样式', | ||
18 | colors: '颜色', | ||
19 | tools: '工具' | ||
20 | }, | ||
21 | toolbars: '工具栏' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/lang/zh.js b/sources/plugins/toolbar/lang/zh.js new file mode 100644 index 0000000..285122b --- /dev/null +++ b/sources/plugins/toolbar/lang/zh.js | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | CKEDITOR.plugins.setLang( 'toolbar', 'zh', { | ||
6 | toolbarCollapse: '摺疊工具列', | ||
7 | toolbarExpand: '展開工具列', | ||
8 | toolbarGroups: { | ||
9 | document: '文件', | ||
10 | clipboard: '剪貼簿/復原', | ||
11 | editing: '編輯選項', | ||
12 | forms: '格式', | ||
13 | basicstyles: '基本樣式', | ||
14 | paragraph: '段落', | ||
15 | links: '連結', | ||
16 | insert: '插入', | ||
17 | styles: '樣式', | ||
18 | colors: '顏色', | ||
19 | tools: '工具' | ||
20 | }, | ||
21 | toolbars: '編輯器工具列' | ||
22 | } ); | ||
diff --git a/sources/plugins/toolbar/plugin.js b/sources/plugins/toolbar/plugin.js new file mode 100644 index 0000000..93e6e35 --- /dev/null +++ b/sources/plugins/toolbar/plugin.js | |||
@@ -0,0 +1,803 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview The "toolbar" plugin. Renders the default toolbar interface in | ||
8 | * the editor. | ||
9 | */ | ||
10 | |||
11 | ( function() { | ||
12 | var toolbox = function() { | ||
13 | this.toolbars = []; | ||
14 | this.focusCommandExecuted = false; | ||
15 | }; | ||
16 | |||
17 | toolbox.prototype.focus = function() { | ||
18 | for ( var t = 0, toolbar; toolbar = this.toolbars[ t++ ]; ) { | ||
19 | for ( var i = 0, item; item = toolbar.items[ i++ ]; ) { | ||
20 | if ( item.focus ) { | ||
21 | item.focus(); | ||
22 | return; | ||
23 | } | ||
24 | } | ||
25 | } | ||
26 | }; | ||
27 | |||
28 | var commands = { | ||
29 | toolbarFocus: { | ||
30 | modes: { wysiwyg: 1, source: 1 }, | ||
31 | readOnly: 1, | ||
32 | |||
33 | exec: function( editor ) { | ||
34 | if ( editor.toolbox ) { | ||
35 | editor.toolbox.focusCommandExecuted = true; | ||
36 | |||
37 | // Make the first button focus accessible for IE. (#3417) | ||
38 | // Adobe AIR instead need while of delay. | ||
39 | if ( CKEDITOR.env.ie || CKEDITOR.env.air ) { | ||
40 | setTimeout( function() { | ||
41 | editor.toolbox.focus(); | ||
42 | }, 100 ); | ||
43 | } else { | ||
44 | editor.toolbox.focus(); | ||
45 | } | ||
46 | } | ||
47 | } | ||
48 | } | ||
49 | }; | ||
50 | |||
51 | CKEDITOR.plugins.add( 'toolbar', { | ||
52 | requires: 'button', | ||
53 | // jscs:disable maximumLineLength | ||
54 | lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE% | ||
55 | // jscs:enable maximumLineLength | ||
56 | |||
57 | init: function( editor ) { | ||
58 | var endFlag; | ||
59 | |||
60 | var itemKeystroke = function( item, keystroke ) { | ||
61 | var next, toolbar; | ||
62 | var rtl = editor.lang.dir == 'rtl', | ||
63 | toolbarGroupCycling = editor.config.toolbarGroupCycling, | ||
64 | // Picking right/left key codes. | ||
65 | rightKeyCode = rtl ? 37 : 39, | ||
66 | leftKeyCode = rtl ? 39 : 37; | ||
67 | |||
68 | toolbarGroupCycling = toolbarGroupCycling === undefined || toolbarGroupCycling; | ||
69 | |||
70 | switch ( keystroke ) { | ||
71 | case 9: // TAB | ||
72 | case CKEDITOR.SHIFT + 9: // SHIFT + TAB | ||
73 | // Cycle through the toolbars, starting from the one | ||
74 | // closest to the current item. | ||
75 | while ( !toolbar || !toolbar.items.length ) { | ||
76 | if ( keystroke == 9 ) { | ||
77 | toolbar = ( ( toolbar ? toolbar.next : item.toolbar.next ) || editor.toolbox.toolbars[ 0 ] ); | ||
78 | } else { | ||
79 | toolbar = ( ( toolbar ? toolbar.previous : item.toolbar.previous ) || editor.toolbox.toolbars[ editor.toolbox.toolbars.length - 1 ] ); | ||
80 | } | ||
81 | |||
82 | // Look for the first item that accepts focus. | ||
83 | if ( toolbar.items.length ) { | ||
84 | item = toolbar.items[ endFlag ? ( toolbar.items.length - 1 ) : 0 ]; | ||
85 | while ( item && !item.focus ) { | ||
86 | item = endFlag ? item.previous : item.next; | ||
87 | |||
88 | if ( !item ) | ||
89 | toolbar = 0; | ||
90 | } | ||
91 | } | ||
92 | } | ||
93 | |||
94 | if ( item ) | ||
95 | item.focus(); | ||
96 | |||
97 | return false; | ||
98 | |||
99 | case rightKeyCode: | ||
100 | next = item; | ||
101 | do { | ||
102 | // Look for the next item in the toolbar. | ||
103 | next = next.next; | ||
104 | |||
105 | // If it's the last item, cycle to the first one. | ||
106 | if ( !next && toolbarGroupCycling ) next = item.toolbar.items[ 0 ]; | ||
107 | } | ||
108 | while ( next && !next.focus ); | ||
109 | |||
110 | // If available, just focus it, otherwise focus the | ||
111 | // first one. | ||
112 | if ( next ) | ||
113 | next.focus(); | ||
114 | else | ||
115 | // Send a TAB. | ||
116 | itemKeystroke( item, 9 ); | ||
117 | |||
118 | return false; | ||
119 | case 40: // DOWN-ARROW | ||
120 | if ( item.button && item.button.hasArrow ) { | ||
121 | // Note: code is duplicated in plugins\richcombo\plugin.js in keyDownFn(). | ||
122 | editor.once( 'panelShow', function( evt ) { | ||
123 | evt.data._.panel._.currentBlock.onKeyDown( 40 ); | ||
124 | } ); | ||
125 | item.execute(); | ||
126 | } else { | ||
127 | // Send left arrow key. | ||
128 | itemKeystroke( item, keystroke == 40 ? rightKeyCode : leftKeyCode ); | ||
129 | } | ||
130 | return false; | ||
131 | case leftKeyCode: | ||
132 | case 38: // UP-ARROW | ||
133 | next = item; | ||
134 | do { | ||
135 | // Look for the previous item in the toolbar. | ||
136 | next = next.previous; | ||
137 | |||
138 | // If it's the first item, cycle to the last one. | ||
139 | if ( !next && toolbarGroupCycling ) next = item.toolbar.items[ item.toolbar.items.length - 1 ]; | ||
140 | } | ||
141 | while ( next && !next.focus ); | ||
142 | |||
143 | // If available, just focus it, otherwise focus the | ||
144 | // last one. | ||
145 | if ( next ) | ||
146 | next.focus(); | ||
147 | else { | ||
148 | endFlag = 1; | ||
149 | // Send a SHIFT + TAB. | ||
150 | itemKeystroke( item, CKEDITOR.SHIFT + 9 ); | ||
151 | endFlag = 0; | ||
152 | } | ||
153 | |||
154 | return false; | ||
155 | |||
156 | case 27: // ESC | ||
157 | editor.focus(); | ||
158 | return false; | ||
159 | |||
160 | case 13: // ENTER | ||
161 | case 32: // SPACE | ||
162 | item.execute(); | ||
163 | return false; | ||
164 | } | ||
165 | return true; | ||
166 | }; | ||
167 | |||
168 | editor.on( 'uiSpace', function( event ) { | ||
169 | if ( event.data.space != editor.config.toolbarLocation ) | ||
170 | return; | ||
171 | |||
172 | // Create toolbar only once. | ||
173 | event.removeListener(); | ||
174 | |||
175 | editor.toolbox = new toolbox(); | ||
176 | |||
177 | var labelId = CKEDITOR.tools.getNextId(); | ||
178 | |||
179 | var output = [ | ||
180 | '<span id="', labelId, '" class="cke_voice_label">', editor.lang.toolbar.toolbars, '</span>', | ||
181 | '<span id="' + editor.ui.spaceId( 'toolbox' ) + '" class="cke_toolbox" role="group" aria-labelledby="', labelId, '" onmousedown="return false;">' | ||
182 | ]; | ||
183 | |||
184 | var expanded = editor.config.toolbarStartupExpanded !== false, | ||
185 | groupStarted, pendingSeparator; | ||
186 | |||
187 | // If the toolbar collapser will be available, we'll have | ||
188 | // an additional container for all toolbars. | ||
189 | if ( editor.config.toolbarCanCollapse && editor.elementMode != CKEDITOR.ELEMENT_MODE_INLINE ) | ||
190 | output.push( '<span class="cke_toolbox_main"' + ( expanded ? '>' : ' style="display:none">' ) ); | ||
191 | |||
192 | var toolbars = editor.toolbox.toolbars, | ||
193 | toolbar = getToolbarConfig( editor ); | ||
194 | |||
195 | for ( var r = 0; r < toolbar.length; r++ ) { | ||
196 | var toolbarId, | ||
197 | toolbarObj = 0, | ||
198 | toolbarName, | ||
199 | row = toolbar[ r ], | ||
200 | items; | ||
201 | |||
202 | // It's better to check if the row object is really | ||
203 | // available because it's a common mistake to leave | ||
204 | // an extra comma in the toolbar definition | ||
205 | // settings, which leads on the editor not loading | ||
206 | // at all in IE. (#3983) | ||
207 | if ( !row ) | ||
208 | continue; | ||
209 | |||
210 | if ( groupStarted ) { | ||
211 | output.push( '</span>' ); | ||
212 | groupStarted = 0; | ||
213 | pendingSeparator = 0; | ||
214 | } | ||
215 | |||
216 | if ( row === '/' ) { | ||
217 | output.push( '<span class="cke_toolbar_break"></span>' ); | ||
218 | continue; | ||
219 | } | ||
220 | |||
221 | items = row.items || row; | ||
222 | |||
223 | // Create all items defined for this toolbar. | ||
224 | for ( var i = 0; i < items.length; i++ ) { | ||
225 | var item = items[ i ], | ||
226 | canGroup; | ||
227 | |||
228 | if ( item ) { | ||
229 | if ( item.type == CKEDITOR.UI_SEPARATOR ) { | ||
230 | // Do not add the separator immediately. Just save | ||
231 | // it be included if we already have something in | ||
232 | // the toolbar and if a new item is to be added (later). | ||
233 | pendingSeparator = groupStarted && item; | ||
234 | continue; | ||
235 | } | ||
236 | |||
237 | canGroup = item.canGroup !== false; | ||
238 | |||
239 | // Initialize the toolbar first, if needed. | ||
240 | if ( !toolbarObj ) { | ||
241 | // Create the basic toolbar object. | ||
242 | toolbarId = CKEDITOR.tools.getNextId(); | ||
243 | toolbarObj = { id: toolbarId, items: [] }; | ||
244 | toolbarName = row.name && ( editor.lang.toolbar.toolbarGroups[ row.name ] || row.name ); | ||
245 | |||
246 | // Output the toolbar opener. | ||
247 | output.push( '<span id="', toolbarId, '" class="cke_toolbar"', ( toolbarName ? ' aria-labelledby="' + toolbarId + '_label"' : '' ), ' role="toolbar">' ); | ||
248 | |||
249 | // If a toolbar name is available, send the voice label. | ||
250 | toolbarName && output.push( '<span id="', toolbarId, '_label" class="cke_voice_label">', toolbarName, '</span>' ); | ||
251 | |||
252 | output.push( '<span class="cke_toolbar_start"></span>' ); | ||
253 | |||
254 | // Add the toolbar to the "editor.toolbox.toolbars" | ||
255 | // array. | ||
256 | var index = toolbars.push( toolbarObj ) - 1; | ||
257 | |||
258 | // Create the next/previous reference. | ||
259 | if ( index > 0 ) { | ||
260 | toolbarObj.previous = toolbars[ index - 1 ]; | ||
261 | toolbarObj.previous.next = toolbarObj; | ||
262 | } | ||
263 | } | ||
264 | |||
265 | if ( canGroup ) { | ||
266 | if ( !groupStarted ) { | ||
267 | output.push( '<span class="cke_toolgroup" role="presentation">' ); | ||
268 | groupStarted = 1; | ||
269 | } | ||
270 | } else if ( groupStarted ) { | ||
271 | output.push( '</span>' ); | ||
272 | groupStarted = 0; | ||
273 | } | ||
274 | |||
275 | function addItem( item ) { // jshint ignore:line | ||
276 | var itemObj = item.render( editor, output ); | ||
277 | index = toolbarObj.items.push( itemObj ) - 1; | ||
278 | |||
279 | if ( index > 0 ) { | ||
280 | itemObj.previous = toolbarObj.items[ index - 1 ]; | ||
281 | itemObj.previous.next = itemObj; | ||
282 | } | ||
283 | |||
284 | itemObj.toolbar = toolbarObj; | ||
285 | itemObj.onkey = itemKeystroke; | ||
286 | |||
287 | // Fix for #3052: | ||
288 | // Prevent JAWS from focusing the toolbar after document load. | ||
289 | itemObj.onfocus = function() { | ||
290 | if ( !editor.toolbox.focusCommandExecuted ) | ||
291 | editor.focus(); | ||
292 | }; | ||
293 | } | ||
294 | |||
295 | if ( pendingSeparator ) { | ||
296 | addItem( pendingSeparator ); | ||
297 | pendingSeparator = 0; | ||
298 | } | ||
299 | |||
300 | addItem( item ); | ||
301 | } | ||
302 | } | ||
303 | |||
304 | if ( groupStarted ) { | ||
305 | output.push( '</span>' ); | ||
306 | groupStarted = 0; | ||
307 | pendingSeparator = 0; | ||
308 | } | ||
309 | |||
310 | if ( toolbarObj ) | ||
311 | output.push( '<span class="cke_toolbar_end"></span></span>' ); | ||
312 | } | ||
313 | |||
314 | if ( editor.config.toolbarCanCollapse ) | ||
315 | output.push( '</span>' ); | ||
316 | |||
317 | // Not toolbar collapser for inline mode. | ||
318 | if ( editor.config.toolbarCanCollapse && editor.elementMode != CKEDITOR.ELEMENT_MODE_INLINE ) { | ||
319 | var collapserFn = CKEDITOR.tools.addFunction( function() { | ||
320 | editor.execCommand( 'toolbarCollapse' ); | ||
321 | } ); | ||
322 | |||
323 | editor.on( 'destroy', function() { | ||
324 | CKEDITOR.tools.removeFunction( collapserFn ); | ||
325 | } ); | ||
326 | |||
327 | editor.addCommand( 'toolbarCollapse', { | ||
328 | readOnly: 1, | ||
329 | exec: function( editor ) { | ||
330 | var collapser = editor.ui.space( 'toolbar_collapser' ), | ||
331 | toolbox = collapser.getPrevious(), | ||
332 | contents = editor.ui.space( 'contents' ), | ||
333 | toolboxContainer = toolbox.getParent(), | ||
334 | contentHeight = parseInt( contents.$.style.height, 10 ), | ||
335 | previousHeight = toolboxContainer.$.offsetHeight, | ||
336 | minClass = 'cke_toolbox_collapser_min', | ||
337 | collapsed = collapser.hasClass( minClass ); | ||
338 | |||
339 | if ( !collapsed ) { | ||
340 | toolbox.hide(); | ||
341 | collapser.addClass( minClass ); | ||
342 | collapser.setAttribute( 'title', editor.lang.toolbar.toolbarExpand ); | ||
343 | } else { | ||
344 | toolbox.show(); | ||
345 | collapser.removeClass( minClass ); | ||
346 | collapser.setAttribute( 'title', editor.lang.toolbar.toolbarCollapse ); | ||
347 | } | ||
348 | |||
349 | // Update collapser symbol. | ||
350 | collapser.getFirst().setText( collapsed ? '\u25B2' : // BLACK UP-POINTING TRIANGLE | ||
351 | '\u25C0' ); // BLACK LEFT-POINTING TRIANGLE | ||
352 | |||
353 | var dy = toolboxContainer.$.offsetHeight - previousHeight; | ||
354 | contents.setStyle( 'height', ( contentHeight - dy ) + 'px' ); | ||
355 | |||
356 | editor.fire( 'resize', { | ||
357 | outerHeight: editor.container.$.offsetHeight, | ||
358 | contentsHeight: contents.$.offsetHeight, | ||
359 | outerWidth: editor.container.$.offsetWidth | ||
360 | } ); | ||
361 | }, | ||
362 | |||
363 | modes: { wysiwyg: 1, source: 1 } | ||
364 | } ); | ||
365 | |||
366 | editor.setKeystroke( CKEDITOR.ALT + ( CKEDITOR.env.ie || CKEDITOR.env.webkit ? 189 : 109 ) /*-*/, 'toolbarCollapse' ); | ||
367 | |||
368 | output.push( '<a title="' + ( expanded ? editor.lang.toolbar.toolbarCollapse : editor.lang.toolbar.toolbarExpand ) + | ||
369 | '" id="' + editor.ui.spaceId( 'toolbar_collapser' ) + | ||
370 | '" tabIndex="-1" class="cke_toolbox_collapser' ); | ||
371 | |||
372 | if ( !expanded ) | ||
373 | output.push( ' cke_toolbox_collapser_min' ); | ||
374 | |||
375 | output.push( '" onclick="CKEDITOR.tools.callFunction(' + collapserFn + ')">', '<span class="cke_arrow">▲</span>', // BLACK UP-POINTING TRIANGLE | ||
376 | '</a>' ); | ||
377 | } | ||
378 | |||
379 | output.push( '</span>' ); | ||
380 | event.data.html += output.join( '' ); | ||
381 | } ); | ||
382 | |||
383 | editor.on( 'destroy', function() { | ||
384 | if ( this.toolbox ) { | ||
385 | var toolbars, | ||
386 | index = 0, | ||
387 | i, items, instance; | ||
388 | toolbars = this.toolbox.toolbars; | ||
389 | for ( ; index < toolbars.length; index++ ) { | ||
390 | items = toolbars[ index ].items; | ||
391 | for ( i = 0; i < items.length; i++ ) { | ||
392 | instance = items[ i ]; | ||
393 | if ( instance.clickFn ) | ||
394 | CKEDITOR.tools.removeFunction( instance.clickFn ); | ||
395 | if ( instance.keyDownFn ) | ||
396 | CKEDITOR.tools.removeFunction( instance.keyDownFn ); | ||
397 | } | ||
398 | } | ||
399 | } | ||
400 | } ); | ||
401 | |||
402 | // Manage editor focus when navigating the toolbar. | ||
403 | editor.on( 'uiReady', function() { | ||
404 | var toolbox = editor.ui.space( 'toolbox' ); | ||
405 | toolbox && editor.focusManager.add( toolbox, 1 ); | ||
406 | } ); | ||
407 | |||
408 | editor.addCommand( 'toolbarFocus', commands.toolbarFocus ); | ||
409 | editor.setKeystroke( CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' ); | ||
410 | |||
411 | editor.ui.add( '-', CKEDITOR.UI_SEPARATOR, {} ); | ||
412 | editor.ui.addHandler( CKEDITOR.UI_SEPARATOR, { | ||
413 | create: function() { | ||
414 | return { | ||
415 | render: function( editor, output ) { | ||
416 | output.push( '<span class="cke_toolbar_separator" role="separator"></span>' ); | ||
417 | return {}; | ||
418 | } | ||
419 | }; | ||
420 | } | ||
421 | } ); | ||
422 | } | ||
423 | } ); | ||
424 | |||
425 | function getToolbarConfig( editor ) { | ||
426 | var removeButtons = editor.config.removeButtons; | ||
427 | |||
428 | removeButtons = removeButtons && removeButtons.split( ',' ); | ||
429 | |||
430 | function buildToolbarConfig() { | ||
431 | |||
432 | // Object containing all toolbar groups used by ui items. | ||
433 | var lookup = getItemDefinedGroups(); | ||
434 | |||
435 | // Take the base for the new toolbar, which is basically a toolbar | ||
436 | // definition without items. | ||
437 | var toolbar = CKEDITOR.tools.clone( editor.config.toolbarGroups ) || getPrivateToolbarGroups( editor ); | ||
438 | |||
439 | // Fill the toolbar groups with the available ui items. | ||
440 | for ( var i = 0; i < toolbar.length; i++ ) { | ||
441 | var toolbarGroup = toolbar[ i ]; | ||
442 | |||
443 | // Skip toolbar break. | ||
444 | if ( toolbarGroup == '/' ) | ||
445 | continue; | ||
446 | // Handle simply group name item. | ||
447 | else if ( typeof toolbarGroup == 'string' ) | ||
448 | toolbarGroup = toolbar[ i ] = { name: toolbarGroup }; | ||
449 | |||
450 | var items, subGroups = toolbarGroup.groups; | ||
451 | |||
452 | // Look for items that match sub groups. | ||
453 | if ( subGroups ) { | ||
454 | for ( var j = 0, sub; j < subGroups.length; j++ ) { | ||
455 | sub = subGroups[ j ]; | ||
456 | |||
457 | // If any ui item is registered for this subgroup. | ||
458 | items = lookup[ sub ]; | ||
459 | items && fillGroup( toolbarGroup, items ); | ||
460 | } | ||
461 | } | ||
462 | |||
463 | // Add the main group items as well. | ||
464 | items = lookup[ toolbarGroup.name ]; | ||
465 | items && fillGroup( toolbarGroup, items ); | ||
466 | } | ||
467 | |||
468 | return toolbar; | ||
469 | } | ||
470 | |||
471 | // Returns an object containing all toolbar groups used by ui items. | ||
472 | function getItemDefinedGroups() { | ||
473 | var groups = {}, | ||
474 | itemName, item, itemToolbar, group, order; | ||
475 | |||
476 | for ( itemName in editor.ui.items ) { | ||
477 | item = editor.ui.items[ itemName ]; | ||
478 | itemToolbar = item.toolbar || 'others'; | ||
479 | if ( itemToolbar ) { | ||
480 | // Break the toolbar property into its parts: "group_name[,order]". | ||
481 | itemToolbar = itemToolbar.split( ',' ); | ||
482 | group = itemToolbar[ 0 ]; | ||
483 | order = parseInt( itemToolbar[ 1 ] || -1, 10 ); | ||
484 | |||
485 | // Initialize the group, if necessary. | ||
486 | groups[ group ] || ( groups[ group ] = [] ); | ||
487 | |||
488 | // Push the data used to build the toolbar later. | ||
489 | groups[ group ].push( { name: itemName, order: order } ); | ||
490 | } | ||
491 | } | ||
492 | |||
493 | // Put the items in the right order. | ||
494 | for ( group in groups ) { | ||
495 | groups[ group ] = groups[ group ].sort( function( a, b ) { | ||
496 | return a.order == b.order ? 0 : | ||
497 | b.order < 0 ? -1 : | ||
498 | a.order < 0 ? 1 : | ||
499 | a.order < b.order ? -1 : | ||
500 | 1; | ||
501 | } ); | ||
502 | } | ||
503 | |||
504 | return groups; | ||
505 | } | ||
506 | |||
507 | function fillGroup( toolbarGroup, uiItems ) { | ||
508 | if ( uiItems.length ) { | ||
509 | if ( toolbarGroup.items ) | ||
510 | toolbarGroup.items.push( editor.ui.create( '-' ) ); | ||
511 | else | ||
512 | toolbarGroup.items = []; | ||
513 | |||
514 | var item, name; | ||
515 | while ( ( item = uiItems.shift() ) ) { | ||
516 | name = typeof item == 'string' ? item : item.name; | ||
517 | |||
518 | // Ignore items that are configured to be removed. | ||
519 | if ( !removeButtons || CKEDITOR.tools.indexOf( removeButtons, name ) == -1 ) { | ||
520 | item = editor.ui.create( name ); | ||
521 | |||
522 | if ( !item ) | ||
523 | continue; | ||
524 | |||
525 | if ( !editor.addFeature( item ) ) | ||
526 | continue; | ||
527 | |||
528 | toolbarGroup.items.push( item ); | ||
529 | } | ||
530 | } | ||
531 | } | ||
532 | } | ||
533 | |||
534 | function populateToolbarConfig( config ) { | ||
535 | var toolbar = [], | ||
536 | i, group, newGroup; | ||
537 | |||
538 | for ( i = 0; i < config.length; ++i ) { | ||
539 | group = config[ i ]; | ||
540 | newGroup = {}; | ||
541 | |||
542 | if ( group == '/' ) | ||
543 | toolbar.push( group ); | ||
544 | else if ( CKEDITOR.tools.isArray( group ) ) { | ||
545 | fillGroup( newGroup, CKEDITOR.tools.clone( group ) ); | ||
546 | toolbar.push( newGroup ); | ||
547 | } | ||
548 | else if ( group.items ) { | ||
549 | fillGroup( newGroup, CKEDITOR.tools.clone( group.items ) ); | ||
550 | newGroup.name = group.name; | ||
551 | toolbar.push( newGroup ); | ||
552 | } | ||
553 | } | ||
554 | |||
555 | return toolbar; | ||
556 | } | ||
557 | |||
558 | var toolbar = editor.config.toolbar; | ||
559 | |||
560 | // If it is a string, return the relative "toolbar_name" config. | ||
561 | if ( typeof toolbar == 'string' ) | ||
562 | toolbar = editor.config[ 'toolbar_' + toolbar ]; | ||
563 | |||
564 | return ( editor.toolbar = toolbar ? populateToolbarConfig( toolbar ) : buildToolbarConfig() ); | ||
565 | } | ||
566 | |||
567 | /** | ||
568 | * Adds a toolbar group. See {@link CKEDITOR.config#toolbarGroups} for more details. | ||
569 | * | ||
570 | * **Note:** This method will not modify toolbar groups set explicitly by | ||
571 | * {@link CKEDITOR.config#toolbarGroups}. It will only extend the default setting. | ||
572 | * | ||
573 | * @param {String} name Toolbar group name. | ||
574 | * @param {Number/String} previous The name of the toolbar group after which this one | ||
575 | * should be added or `0` if this group should be the first one. | ||
576 | * @param {String} [subgroupOf] The name of the parent group. | ||
577 | * @member CKEDITOR.ui | ||
578 | */ | ||
579 | CKEDITOR.ui.prototype.addToolbarGroup = function( name, previous, subgroupOf ) { | ||
580 | // The toolbarGroups from the privates is the one we gonna use for automatic toolbar creation. | ||
581 | var toolbarGroups = getPrivateToolbarGroups( this.editor ), | ||
582 | atStart = previous === 0, | ||
583 | newGroup = { name: name }; | ||
584 | |||
585 | if ( subgroupOf ) { | ||
586 | // Transform the subgroupOf name in the real subgroup object. | ||
587 | subgroupOf = CKEDITOR.tools.search( toolbarGroups, function( group ) { | ||
588 | return group.name == subgroupOf; | ||
589 | } ); | ||
590 | |||
591 | if ( subgroupOf ) { | ||
592 | !subgroupOf.groups && ( subgroupOf.groups = [] ) ; | ||
593 | |||
594 | if ( previous ) { | ||
595 | // Search the "previous" item and add the new one after it. | ||
596 | previous = CKEDITOR.tools.indexOf( subgroupOf.groups, previous ); | ||
597 | if ( previous >= 0 ) { | ||
598 | subgroupOf.groups.splice( previous + 1, 0, name ); | ||
599 | return; | ||
600 | } | ||
601 | } | ||
602 | |||
603 | // If no previous found. | ||
604 | |||
605 | if ( atStart ) | ||
606 | subgroupOf.groups.splice( 0, 0, name ); | ||
607 | else | ||
608 | subgroupOf.groups.push( name ); | ||
609 | return; | ||
610 | } else { | ||
611 | // Ignore "previous" if subgroupOf has not been found. | ||
612 | previous = null; | ||
613 | } | ||
614 | } | ||
615 | |||
616 | if ( previous ) { | ||
617 | // Transform the "previous" name into its index. | ||
618 | previous = CKEDITOR.tools.indexOf( toolbarGroups, function( group ) { | ||
619 | return group.name == previous; | ||
620 | } ); | ||
621 | } | ||
622 | |||
623 | if ( atStart ) | ||
624 | toolbarGroups.splice( 0, 0, name ); | ||
625 | else if ( typeof previous == 'number' ) | ||
626 | toolbarGroups.splice( previous + 1, 0, newGroup ); | ||
627 | else | ||
628 | toolbarGroups.push( name ); | ||
629 | }; | ||
630 | |||
631 | function getPrivateToolbarGroups( editor ) { | ||
632 | return editor._.toolbarGroups || ( editor._.toolbarGroups = [ | ||
633 | { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, | ||
634 | { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, | ||
635 | { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, | ||
636 | { name: 'forms' }, | ||
637 | '/', | ||
638 | { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, | ||
639 | { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] }, | ||
640 | { name: 'links' }, | ||
641 | { name: 'insert' }, | ||
642 | '/', | ||
643 | { name: 'styles' }, | ||
644 | { name: 'colors' }, | ||
645 | { name: 'tools' }, | ||
646 | { name: 'others' }, | ||
647 | { name: 'about' } | ||
648 | ] ); | ||
649 | } | ||
650 | } )(); | ||
651 | |||
652 | /** | ||
653 | * Separator UI element. | ||
654 | * | ||
655 | * @readonly | ||
656 | * @property {String} [='separator'] | ||
657 | * @member CKEDITOR | ||
658 | */ | ||
659 | CKEDITOR.UI_SEPARATOR = 'separator'; | ||
660 | |||
661 | /** | ||
662 | * The part of the user interface where the toolbar will be rendered. For the default | ||
663 | * editor implementation, the recommended options are `'top'` and `'bottom'`. | ||
664 | * | ||
665 | * Please note that this option is only applicable to [classic](#!/guide/dev_framed) | ||
666 | * (`iframe`-based) editor. In case of [inline](#!/guide/dev_inline) editor the toolbar | ||
667 | * position is set dynamically depending on the position of the editable element on the screen. | ||
668 | * | ||
669 | * Read more in the [documentation](#!/guide/dev_toolbarlocation) | ||
670 | * and see the [SDK sample](http://sdk.ckeditor.com/samples/toolbarlocation.html). | ||
671 | * | ||
672 | * config.toolbarLocation = 'bottom'; | ||
673 | * | ||
674 | * @cfg | ||
675 | * @member CKEDITOR.config | ||
676 | */ | ||
677 | CKEDITOR.config.toolbarLocation = 'top'; | ||
678 | |||
679 | /** | ||
680 | * The toolbox (alias toolbar) definition. It is a toolbar name or an array of | ||
681 | * toolbars (strips), each one being also an array, containing a list of UI items. | ||
682 | * | ||
683 | * If set to `null`, the toolbar will be generated automatically using all available buttons | ||
684 | * and {@link #toolbarGroups} as a toolbar groups layout. | ||
685 | * | ||
686 | * In CKEditor 4.5+ you can generate your toolbar customization code by using the [visual | ||
687 | * toolbar configurator](http://docs.ckeditor.com/#!/guide/dev_toolbar). | ||
688 | * | ||
689 | * // Defines a toolbar with only one strip containing the "Source" button, a | ||
690 | * // separator, and the "Bold" and "Italic" buttons. | ||
691 | * config.toolbar = [ | ||
692 | * [ 'Source', '-', 'Bold', 'Italic' ] | ||
693 | * ]; | ||
694 | * | ||
695 | * // Similar to the example above, defines a "Basic" toolbar with only one strip containing three buttons. | ||
696 | * // Note that this setting is composed by "toolbar_" added to the toolbar name, which in this case is called "Basic". | ||
697 | * // This second part of the setting name can be anything. You must use this name in the CKEDITOR.config.toolbar setting | ||
698 | * // in order to instruct the editor which `toolbar_(name)` setting should be used. | ||
699 | * config.toolbar_Basic = [ | ||
700 | * [ 'Source', '-', 'Bold', 'Italic' ] | ||
701 | * ]; | ||
702 | * // Load toolbar_Name where Name = Basic. | ||
703 | * config.toolbar = 'Basic'; | ||
704 | * | ||
705 | * @cfg {Array/String} [toolbar=null] | ||
706 | * @member CKEDITOR.config | ||
707 | */ | ||
708 | |||
709 | /** | ||
710 | * The toolbar groups definition. | ||
711 | * | ||
712 | * If the toolbar layout is not explicitly defined by the {@link #toolbar} setting, then | ||
713 | * this setting is used to group all defined buttons (see {@link CKEDITOR.ui#addButton}). | ||
714 | * Buttons are associated with toolbar groups by the `toolbar` property in their definition objects. | ||
715 | * | ||
716 | * New groups may be dynamically added during the editor and plugin initialization by | ||
717 | * {@link CKEDITOR.ui#addToolbarGroup}. This is only possible if the default setting was used. | ||
718 | * | ||
719 | * // Default setting. | ||
720 | * config.toolbarGroups = [ | ||
721 | * { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, | ||
722 | * { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, | ||
723 | * { name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] }, | ||
724 | * { name: 'forms' }, | ||
725 | * '/', | ||
726 | * { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, | ||
727 | * { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] }, | ||
728 | * { name: 'links' }, | ||
729 | * { name: 'insert' }, | ||
730 | * '/', | ||
731 | * { name: 'styles' }, | ||
732 | * { name: 'colors' }, | ||
733 | * { name: 'tools' }, | ||
734 | * { name: 'others' }, | ||
735 | * { name: 'about' } | ||
736 | * ]; | ||
737 | * | ||
738 | * @cfg {Array} [toolbarGroups=see example] | ||
739 | * @member CKEDITOR.config | ||
740 | */ | ||
741 | |||
742 | /** | ||
743 | * Whether the toolbar can be collapsed by the user. If disabled, the Collapse Toolbar | ||
744 | * button will not be displayed. | ||
745 | * | ||
746 | * config.toolbarCanCollapse = true; | ||
747 | * | ||
748 | * @cfg {Boolean} [toolbarCanCollapse=false] | ||
749 | * @member CKEDITOR.config | ||
750 | */ | ||
751 | |||
752 | /** | ||
753 | * Whether the toolbar must start expanded when the editor is loaded. | ||
754 | * | ||
755 | * Setting this option to `false` will affect the toolbar only when | ||
756 | * {@link #toolbarCanCollapse} is set to `true`: | ||
757 | * | ||
758 | * config.toolbarCanCollapse = true; | ||
759 | * config.toolbarStartupExpanded = false; | ||
760 | * | ||
761 | * @cfg {Boolean} [toolbarStartupExpanded=true] | ||
762 | * @member CKEDITOR.config | ||
763 | */ | ||
764 | |||
765 | /** | ||
766 | * When enabled, causes the *Arrow* keys navigation to cycle within the current | ||
767 | * toolbar group. Otherwise the *Arrow* keys will move through all items available in | ||
768 | * the toolbar. The *Tab* key will still be used to quickly jump among the | ||
769 | * toolbar groups. | ||
770 | * | ||
771 | * config.toolbarGroupCycling = false; | ||
772 | * | ||
773 | * @since 3.6 | ||
774 | * @cfg {Boolean} [toolbarGroupCycling=true] | ||
775 | * @member CKEDITOR.config | ||
776 | */ | ||
777 | |||
778 | /** | ||
779 | * List of toolbar button names that must not be rendered. This will also work | ||
780 | * for non-button toolbar items, like the Font drop-down list. | ||
781 | * | ||
782 | * config.removeButtons = 'Underline,JustifyCenter'; | ||
783 | * | ||
784 | * This configuration option should not be overused. The recommended way is to use the | ||
785 | * {@link CKEDITOR.config#removePlugins} setting to remove features from the editor | ||
786 | * or even better, [create a custom editor build](http://ckeditor.com/builder) with | ||
787 | * just the features that you will use. | ||
788 | * In some cases though, a single plugin may define a set of toolbar buttons and | ||
789 | * `removeButtons` may be useful when just a few of them are to be removed. | ||
790 | * | ||
791 | * @cfg {String} [removeButtons] | ||
792 | * @member CKEDITOR.config | ||
793 | */ | ||
794 | |||
795 | /** | ||
796 | * The toolbar definition used by the editor. It is created from the | ||
797 | * {@link CKEDITOR.config#toolbar} option if it is set or automatically | ||
798 | * based on {@link CKEDITOR.config#toolbarGroups}. | ||
799 | * | ||
800 | * @readonly | ||
801 | * @property {Object} toolbar | ||
802 | * @member CKEDITOR.editor | ||
803 | */ | ||
diff --git a/sources/plugins/toolbar/samples/toolbar.html b/sources/plugins/toolbar/samples/toolbar.html new file mode 100644 index 0000000..2d3d25f --- /dev/null +++ b/sources/plugins/toolbar/samples/toolbar.html | |||
@@ -0,0 +1,235 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <!-- | ||
3 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
4 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
5 | --> | ||
6 | <html> | ||
7 | <head> | ||
8 | <meta charset="utf-8"> | ||
9 | <title>Toolbar Configuration — CKEditor Sample</title> | ||
10 | <meta name="ckeditor-sample-name" content="Toolbar Configurations"> | ||
11 | <meta name="ckeditor-sample-group" content="Advanced Samples"> | ||
12 | <meta name="ckeditor-sample-description" content="Configuring CKEditor to display full or custom toolbar layout."> | ||
13 | <script src="../../../ckeditor.js"></script> | ||
14 | <link href="../../../samples/old/sample.css" rel="stylesheet"> | ||
15 | </head> | ||
16 | <body> | ||
17 | <h1 class="samples"> | ||
18 | <a href="../../../samples/old/index.html">CKEditor Samples</a> » Toolbar Configuration | ||
19 | </h1> | ||
20 | <div class="warning deprecated"> | ||
21 | This sample is not maintained anymore. Check out the <a href="../../../samples/toolbarconfigurator/index.html#basic">brand new CKEditor Toolbar Configurator</a>. | ||
22 | </div> | ||
23 | <div class="description"> | ||
24 | <p> | ||
25 | This sample page demonstrates editor with loaded <a href="#fullToolbar">full toolbar</a> (all registered buttons) and, if | ||
26 | current editor's configuration modifies default settings, also editor with <a href="#currentToolbar">modified toolbar</a>. | ||
27 | </p> | ||
28 | |||
29 | <p>Since CKEditor 4 there are two ways to configure toolbar buttons.</p> | ||
30 | |||
31 | <h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbar">config.toolbar</a></h2> | ||
32 | |||
33 | <p> | ||
34 | You can explicitly define which buttons are displayed in which groups and in which order. | ||
35 | This is the more precise setting, but less flexible. If newly added plugin adds its | ||
36 | own button you'll have to add it manually to your <code>config.toolbar</code> setting as well. | ||
37 | </p> | ||
38 | |||
39 | <p>To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:</p> | ||
40 | |||
41 | <pre class="samples"> | ||
42 | CKEDITOR.replace( <em>'textarea_id'</em>, { | ||
43 | <strong>toolbar:</strong> [ | ||
44 | { name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] }, // Defines toolbar group with name (used to create voice label) and items in 3 subgroups. | ||
45 | [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ], // Defines toolbar group without name. | ||
46 | '/', // Line break - next group will be placed in new line. | ||
47 | { name: 'basicstyles', items: [ 'Bold', 'Italic' ] } | ||
48 | ] | ||
49 | });</pre> | ||
50 | |||
51 | <h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbarGroups">config.toolbarGroups</a></h2> | ||
52 | |||
53 | <p> | ||
54 | You can define which groups of buttons (like e.g. <code>basicstyles</code>, <code>clipboard</code> | ||
55 | and <code>forms</code>) are displayed and in which order. Registered buttons are associated | ||
56 | with toolbar groups by <code>toolbar</code> property in their definition. | ||
57 | This setting's advantage is that you don't have to modify toolbar configuration | ||
58 | when adding/removing plugins which register their own buttons. | ||
59 | </p> | ||
60 | |||
61 | <p>To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:</p> | ||
62 | |||
63 | <pre class="samples"> | ||
64 | CKEDITOR.replace( <em>'textarea_id'</em>, { | ||
65 | <strong>toolbarGroups:</strong> [ | ||
66 | { name: 'document', groups: [ 'mode', 'document' ] }, // Displays document group with its two subgroups. | ||
67 | { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, // Group's name will be used to create voice label. | ||
68 | '/', // Line break - next group will be placed in new line. | ||
69 | { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, | ||
70 | { name: 'links' } | ||
71 | ] | ||
72 | |||
73 | // NOTE: Remember to leave 'toolbar' property with the default value (null). | ||
74 | });</pre> | ||
75 | </div> | ||
76 | |||
77 | <div id="currentToolbar" style="display: none"> | ||
78 | <h2 class="samples">Current toolbar configuration</h2> | ||
79 | <p>Below you can see editor with current toolbar definition.</p> | ||
80 | <textarea cols="80" id="editorCurrent" name="editorCurrent" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> | ||
81 | <pre id="editorCurrentCfg" class="samples"></pre> | ||
82 | </div> | ||
83 | |||
84 | <div id="fullToolbar"> | ||
85 | <h2 class="samples">Full toolbar configuration</h2> | ||
86 | <p>Below you can see editor with full toolbar, generated automatically by the editor.</p> | ||
87 | <p> | ||
88 | <strong>Note</strong>: To create editor instance with full toolbar you don't have to set anything. | ||
89 | Just leave <code>toolbar</code> and <code>toolbarGroups</code> with the default, <code>null</code> values. | ||
90 | </p> | ||
91 | <textarea cols="80" id="editorFull" name="editorFull" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea> | ||
92 | <pre id="editorFullCfg" class="samples"></pre> | ||
93 | </div> | ||
94 | |||
95 | <script> | ||
96 | |||
97 | (function() { | ||
98 | 'use strict'; | ||
99 | |||
100 | var buttonsNames; | ||
101 | |||
102 | CKEDITOR.config.extraPlugins = 'toolbar'; | ||
103 | |||
104 | CKEDITOR.on( 'instanceReady', function( evt ) { | ||
105 | var editor = evt.editor, | ||
106 | editorCurrent = editor.name == 'editorCurrent', | ||
107 | defaultToolbar = !( editor.config.toolbar || editor.config.toolbarGroups || editor.config.removeButtons ), | ||
108 | pre = CKEDITOR.document.getById( editor.name + 'Cfg' ), | ||
109 | output = ''; | ||
110 | |||
111 | if ( editorCurrent ) { | ||
112 | // If default toolbar configuration has been modified, show "current toolbar" section. | ||
113 | if ( !defaultToolbar ) | ||
114 | CKEDITOR.document.getById( 'currentToolbar' ).show(); | ||
115 | else | ||
116 | return; | ||
117 | } | ||
118 | |||
119 | if ( !buttonsNames ) | ||
120 | buttonsNames = createButtonsNamesHash( editor.ui.items ); | ||
121 | |||
122 | // Toolbar isn't set explicitly, so it was created automatically from toolbarGroups. | ||
123 | if ( !editor.config.toolbar ) { | ||
124 | output += | ||
125 | '// Toolbar configuration generated automatically by the editor based on config.toolbarGroups.\n' + | ||
126 | dumpToolbarConfiguration( editor ) + | ||
127 | '\n\n' + | ||
128 | '// Toolbar groups configuration.\n' + | ||
129 | dumpToolbarConfiguration( editor, true ) | ||
130 | } | ||
131 | // Toolbar groups doesn't count in this case - print only toolbar. | ||
132 | else { | ||
133 | output += '// Toolbar configuration.\n' + | ||
134 | dumpToolbarConfiguration( editor ); | ||
135 | } | ||
136 | |||
137 | // Recreate to avoid old IE from loosing whitespaces on filling <pre> content. | ||
138 | var preOutput = pre.getOuterHtml().replace( /(?=<\/)/, output ); | ||
139 | CKEDITOR.dom.element.createFromHtml( preOutput ).replace( pre ); | ||
140 | } ); | ||
141 | |||
142 | CKEDITOR.replace( 'editorCurrent', { height: 100 } ); | ||
143 | CKEDITOR.replace( 'editorFull', { | ||
144 | // Reset toolbar settings, so full toolbar will be generated automatically. | ||
145 | toolbar: null, | ||
146 | toolbarGroups: null, | ||
147 | removeButtons: null, | ||
148 | height: 100 | ||
149 | } ); | ||
150 | |||
151 | function dumpToolbarConfiguration( editor, printGroups ) { | ||
152 | var output = [], | ||
153 | toolbar = editor.toolbar; | ||
154 | |||
155 | for ( var i = 0; i < toolbar.length; ++i ) { | ||
156 | var group = dumpToolbarGroup( toolbar[ i ], printGroups ); | ||
157 | if ( group ) | ||
158 | output.push( group ); | ||
159 | } | ||
160 | |||
161 | return 'config.toolbar' + ( printGroups ? 'Groups' : '' ) + ' = [\n\t' + output.join( ',\n\t' ) + '\n];'; | ||
162 | } | ||
163 | |||
164 | function dumpToolbarGroup( group, printGroups ) { | ||
165 | var output = []; | ||
166 | |||
167 | if ( typeof group == 'string' ) | ||
168 | return '\'' + group + '\''; | ||
169 | if ( CKEDITOR.tools.isArray( group ) ) | ||
170 | return dumpToolbarItems( group ); | ||
171 | // Skip group when printing entire toolbar configuration and there are no items in this group. | ||
172 | if ( !printGroups && !group.items ) | ||
173 | return; | ||
174 | |||
175 | if ( group.name ) | ||
176 | output.push( 'name: \'' + group.name + '\'' ); | ||
177 | |||
178 | if ( group.groups ) | ||
179 | output.push( 'groups: ' + dumpToolbarItems( group.groups ) ); | ||
180 | |||
181 | if ( !printGroups ) | ||
182 | output.push( 'items: ' + dumpToolbarItems( group.items ) ); | ||
183 | |||
184 | return '{ ' + output.join( ', ' ) + ' }'; | ||
185 | } | ||
186 | |||
187 | function dumpToolbarItems( items ) { | ||
188 | if ( typeof items == 'string' ) | ||
189 | return '\'' + items + '\''; | ||
190 | |||
191 | var names = [], | ||
192 | i, item; | ||
193 | |||
194 | for ( var i = 0; i < items.length; ++i ) { | ||
195 | item = items[ i ]; | ||
196 | if ( typeof item == 'string' ) | ||
197 | names.push( item ); | ||
198 | else { | ||
199 | if ( item.type == CKEDITOR.UI_SEPARATOR ) | ||
200 | names.push( '-' ); | ||
201 | else | ||
202 | names.push( buttonsNames[ item.name ] ); | ||
203 | } | ||
204 | } | ||
205 | |||
206 | return '[ \'' + names.join( '\', \'' ) + '\' ]'; | ||
207 | } | ||
208 | |||
209 | // Creates { 'lowercased': 'LowerCased' } buttons names hash. | ||
210 | function createButtonsNamesHash( items ) { | ||
211 | var hash = {}, | ||
212 | name; | ||
213 | |||
214 | for ( name in items ) { | ||
215 | hash[ items[ name ].name ] = name; | ||
216 | } | ||
217 | |||
218 | return hash; | ||
219 | } | ||
220 | |||
221 | })(); | ||
222 | </script> | ||
223 | |||
224 | <div id="footer"> | ||
225 | <hr> | ||
226 | <p> | ||
227 | CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> | ||
228 | </p> | ||
229 | <p id="copy"> | ||
230 | Copyright © 2003-2016, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico | ||
231 | Knabben. All rights reserved. | ||
232 | </p> | ||
233 | </div> | ||
234 | </body> | ||
235 | </html> | ||
diff --git a/sources/plugins/wysiwygarea/plugin.js b/sources/plugins/wysiwygarea/plugin.js new file mode 100644 index 0000000..a1ec9e6 --- /dev/null +++ b/sources/plugins/wysiwygarea/plugin.js | |||
@@ -0,0 +1,708 @@ | |||
1 | /** | ||
2 | * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
3 | * For licensing, see LICENSE.md or http://ckeditor.com/license | ||
4 | */ | ||
5 | |||
6 | /** | ||
7 | * @fileOverview The WYSIWYG Area plugin. It registers the "wysiwyg" editing | ||
8 | * mode, which handles the main editing area space. | ||
9 | */ | ||
10 | |||
11 | ( function() { | ||
12 | CKEDITOR.plugins.add( 'wysiwygarea', { | ||
13 | init: function( editor ) { | ||
14 | if ( editor.config.fullPage ) { | ||
15 | editor.addFeature( { | ||
16 | allowedContent: 'html head title; style [media,type]; body (*)[id]; meta link [*]', | ||
17 | requiredContent: 'body' | ||
18 | } ); | ||
19 | } | ||
20 | |||
21 | editor.addMode( 'wysiwyg', function( callback ) { | ||
22 | var src = 'document.open();' + | ||
23 | // In IE, the document domain must be set any time we call document.open(). | ||
24 | ( CKEDITOR.env.ie ? '(' + CKEDITOR.tools.fixDomain + ')();' : '' ) + | ||
25 | 'document.close();'; | ||
26 | |||
27 | // With IE, the custom domain has to be taken care at first, | ||
28 | // for other browers, the 'src' attribute should be left empty to | ||
29 | // trigger iframe's 'load' event. | ||
30 | // Microsoft Edge throws "Permission Denied" if treated like an IE (#13441). | ||
31 | if ( CKEDITOR.env.air ) { | ||
32 | src = 'javascript:void(0)'; // jshint ignore:line | ||
33 | } else if ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) { | ||
34 | src = 'javascript:void(function(){' + encodeURIComponent( src ) + '}())'; // jshint ignore:line | ||
35 | } else { | ||
36 | src = ''; | ||
37 | } | ||
38 | |||
39 | var iframe = CKEDITOR.dom.element.createFromHtml( '<iframe src="' + src + '" frameBorder="0"></iframe>' ); | ||
40 | iframe.setStyles( { width: '100%', height: '100%' } ); | ||
41 | iframe.addClass( 'cke_wysiwyg_frame' ).addClass( 'cke_reset' ); | ||
42 | |||
43 | var contentSpace = editor.ui.space( 'contents' ); | ||
44 | contentSpace.append( iframe ); | ||
45 | |||
46 | |||
47 | // Asynchronous iframe loading is only required in IE>8 and Gecko (other reasons probably). | ||
48 | // Do not use it on WebKit as it'll break the browser-back navigation. | ||
49 | var useOnloadEvent = ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) || CKEDITOR.env.gecko; | ||
50 | if ( useOnloadEvent ) | ||
51 | iframe.on( 'load', onLoad ); | ||
52 | |||
53 | var frameLabel = editor.title, | ||
54 | helpLabel = editor.fire( 'ariaEditorHelpLabel', {} ).label; | ||
55 | |||
56 | if ( frameLabel ) { | ||
57 | if ( CKEDITOR.env.ie && helpLabel ) | ||
58 | frameLabel += ', ' + helpLabel; | ||
59 | |||
60 | iframe.setAttribute( 'title', frameLabel ); | ||
61 | } | ||
62 | |||
63 | if ( helpLabel ) { | ||
64 | var labelId = CKEDITOR.tools.getNextId(), | ||
65 | desc = CKEDITOR.dom.element.createFromHtml( '<span id="' + labelId + '" class="cke_voice_label">' + helpLabel + '</span>' ); | ||
66 | |||
67 | contentSpace.append( desc, 1 ); | ||
68 | iframe.setAttribute( 'aria-describedby', labelId ); | ||
69 | } | ||
70 | |||
71 | // Remove the ARIA description. | ||
72 | editor.on( 'beforeModeUnload', function( evt ) { | ||
73 | evt.removeListener(); | ||
74 | if ( desc ) | ||
75 | desc.remove(); | ||
76 | } ); | ||
77 | |||
78 | iframe.setAttributes( { | ||
79 | tabIndex: editor.tabIndex, | ||
80 | allowTransparency: 'true' | ||
81 | } ); | ||
82 | |||
83 | // Execute onLoad manually for all non IE||Gecko browsers. | ||
84 | !useOnloadEvent && onLoad(); | ||
85 | |||
86 | editor.fire( 'ariaWidget', iframe ); | ||
87 | |||
88 | function onLoad( evt ) { | ||
89 | evt && evt.removeListener(); | ||
90 | editor.editable( new framedWysiwyg( editor, iframe.$.contentWindow.document.body ) ); | ||
91 | editor.setData( editor.getData( 1 ), callback ); | ||
92 | } | ||
93 | } ); | ||
94 | } | ||
95 | } ); | ||
96 | |||
97 | /** | ||
98 | * Adds the path to a stylesheet file to the exisiting {@link CKEDITOR.config#contentsCss} value. | ||
99 | * | ||
100 | * **Note:** This method is available only with the `wysiwygarea` plugin and only affects | ||
101 | * classic editors based on it (so it does not affect inline editors). | ||
102 | * | ||
103 | * editor.addContentsCss( 'assets/contents.css' ); | ||
104 | * | ||
105 | * @since 4.4 | ||
106 | * @param {String} cssPath The path to the stylesheet file which should be added. | ||
107 | * @member CKEDITOR.editor | ||
108 | */ | ||
109 | CKEDITOR.editor.prototype.addContentsCss = function( cssPath ) { | ||
110 | var cfg = this.config, | ||
111 | curContentsCss = cfg.contentsCss; | ||
112 | |||
113 | // Convert current value into array. | ||
114 | if ( !CKEDITOR.tools.isArray( curContentsCss ) ) | ||
115 | cfg.contentsCss = curContentsCss ? [ curContentsCss ] : []; | ||
116 | |||
117 | cfg.contentsCss.push( cssPath ); | ||
118 | }; | ||
119 | |||
120 | function onDomReady( win ) { | ||
121 | var editor = this.editor, | ||
122 | doc = win.document, | ||
123 | body = doc.body; | ||
124 | |||
125 | // Remove helper scripts from the DOM. | ||
126 | var script = doc.getElementById( 'cke_actscrpt' ); | ||
127 | script && script.parentNode.removeChild( script ); | ||
128 | script = doc.getElementById( 'cke_shimscrpt' ); | ||
129 | script && script.parentNode.removeChild( script ); | ||
130 | script = doc.getElementById( 'cke_basetagscrpt' ); | ||
131 | script && script.parentNode.removeChild( script ); | ||
132 | |||
133 | body.contentEditable = true; | ||
134 | |||
135 | if ( CKEDITOR.env.ie ) { | ||
136 | // Don't display the focus border. | ||
137 | body.hideFocus = true; | ||
138 | |||
139 | // Disable and re-enable the body to avoid IE from | ||
140 | // taking the editing focus at startup. (#141 / #523) | ||
141 | body.disabled = true; | ||
142 | body.removeAttribute( 'disabled' ); | ||
143 | } | ||
144 | |||
145 | delete this._.isLoadingData; | ||
146 | |||
147 | // Play the magic to alter element reference to the reloaded one. | ||
148 | this.$ = body; | ||
149 | |||
150 | doc = new CKEDITOR.dom.document( doc ); | ||
151 | |||
152 | this.setup(); | ||
153 | this.fixInitialSelection(); | ||
154 | |||
155 | var editable = this; | ||
156 | |||
157 | // Without it IE8 has problem with removing selection in nested editable. (#13785) | ||
158 | if ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) { | ||
159 | doc.getDocumentElement().addClass( doc.$.compatMode ); | ||
160 | } | ||
161 | |||
162 | // Prevent IE/Edge from leaving a new paragraph/div after deleting all contents in body. (#6966, #13142) | ||
163 | if ( CKEDITOR.env.ie && !CKEDITOR.env.edge && editor.enterMode != CKEDITOR.ENTER_P ) { | ||
164 | removeSuperfluousElement( 'p' ); | ||
165 | } else if ( CKEDITOR.env.edge && editor.enterMode != CKEDITOR.ENTER_DIV ) { | ||
166 | removeSuperfluousElement( 'div' ); | ||
167 | } | ||
168 | |||
169 | // Fix problem with cursor not appearing in Webkit and IE11+ when clicking below the body (#10945, #10906). | ||
170 | // Fix for older IEs (8-10 and QM) is placed inside selection.js. | ||
171 | if ( CKEDITOR.env.webkit || ( CKEDITOR.env.ie && CKEDITOR.env.version > 10 ) ) { | ||
172 | doc.getDocumentElement().on( 'mousedown', function( evt ) { | ||
173 | if ( evt.data.getTarget().is( 'html' ) ) { | ||
174 | // IE needs this timeout. Webkit does not, but it does not cause problems too. | ||
175 | setTimeout( function() { | ||
176 | editor.editable().focus(); | ||
177 | } ); | ||
178 | } | ||
179 | } ); | ||
180 | } | ||
181 | |||
182 | // Config props: disableObjectResizing and disableNativeTableHandles handler. | ||
183 | objectResizeDisabler( editor ); | ||
184 | |||
185 | // Enable dragging of position:absolute elements in IE. | ||
186 | try { | ||
187 | editor.document.$.execCommand( '2D-position', false, true ); | ||
188 | } catch ( e ) {} | ||
189 | |||
190 | if ( CKEDITOR.env.gecko || CKEDITOR.env.ie && editor.document.$.compatMode == 'CSS1Compat' ) { | ||
191 | this.attachListener( this, 'keydown', function( evt ) { | ||
192 | var keyCode = evt.data.getKeystroke(); | ||
193 | |||
194 | // PageUp OR PageDown | ||
195 | if ( keyCode == 33 || keyCode == 34 ) { | ||
196 | // PageUp/PageDown scrolling is broken in document | ||
197 | // with standard doctype, manually fix it. (#4736) | ||
198 | if ( CKEDITOR.env.ie ) { | ||
199 | setTimeout( function() { | ||
200 | editor.getSelection().scrollIntoView(); | ||
201 | }, 0 ); | ||
202 | } | ||
203 | // Page up/down cause editor selection to leak | ||
204 | // outside of editable thus we try to intercept | ||
205 | // the behavior, while it affects only happen | ||
206 | // when editor contents are not overflowed. (#7955) | ||
207 | else if ( editor.window.$.innerHeight > this.$.offsetHeight ) { | ||
208 | var range = editor.createRange(); | ||
209 | range[ keyCode == 33 ? 'moveToElementEditStart' : 'moveToElementEditEnd' ]( this ); | ||
210 | range.select(); | ||
211 | evt.data.preventDefault(); | ||
212 | } | ||
213 | } | ||
214 | } ); | ||
215 | } | ||
216 | |||
217 | if ( CKEDITOR.env.ie ) { | ||
218 | // [IE] Iframe will still keep the selection when blurred, if | ||
219 | // focus is moved onto a non-editing host, e.g. link or button, but | ||
220 | // it becomes a problem for the object type selection, since the resizer | ||
221 | // handler attached on it will mark other part of the UI, especially | ||
222 | // for the dialog. (#8157) | ||
223 | // [IE<8 & Opera] Even worse For old IEs, the cursor will not vanish even if | ||
224 | // the selection has been moved to another text input in some cases. (#4716) | ||
225 | // | ||
226 | // Now the range restore is disabled, so we simply force IE to clean | ||
227 | // up the selection before blur. | ||
228 | this.attachListener( doc, 'blur', function() { | ||
229 | // Error proof when the editor is not visible. (#6375) | ||
230 | try { | ||
231 | doc.$.selection.empty(); | ||
232 | } catch ( er ) {} | ||
233 | } ); | ||
234 | } | ||
235 | |||
236 | if ( CKEDITOR.env.iOS ) { | ||
237 | // [iOS] If touch is bound to any parent of the iframe blur happens on any touch | ||
238 | // event and body becomes the focused element (#10714). | ||
239 | this.attachListener( doc, 'touchend', function() { | ||
240 | win.focus(); | ||
241 | } ); | ||
242 | } | ||
243 | |||
244 | var title = editor.document.getElementsByTag( 'title' ).getItem( 0 ); | ||
245 | // document.title is malfunctioning on Chrome, so get value from the element (#12402). | ||
246 | title.data( 'cke-title', title.getText() ); | ||
247 | |||
248 | // [IE] JAWS will not recognize the aria label we used on the iframe | ||
249 | // unless the frame window title string is used as the voice label, | ||
250 | // backup the original one and restore it on output. | ||
251 | if ( CKEDITOR.env.ie ) | ||
252 | editor.document.$.title = this._.docTitle; | ||
253 | |||
254 | CKEDITOR.tools.setTimeout( function() { | ||
255 | // Editable is ready after first setData. | ||
256 | if ( this.status == 'unloaded' ) | ||
257 | this.status = 'ready'; | ||
258 | |||
259 | editor.fire( 'contentDom' ); | ||
260 | |||
261 | if ( this._.isPendingFocus ) { | ||
262 | editor.focus(); | ||
263 | this._.isPendingFocus = false; | ||
264 | } | ||
265 | |||
266 | setTimeout( function() { | ||
267 | editor.fire( 'dataReady' ); | ||
268 | }, 0 ); | ||
269 | }, 0, this ); | ||
270 | |||
271 | function removeSuperfluousElement( tagName ) { | ||
272 | var lockRetain = false; | ||
273 | |||
274 | // Superfluous elements appear after keydown | ||
275 | // and before keyup, so the procedure is as follows: | ||
276 | // 1. On first keydown mark all elements with | ||
277 | // a specified tag name as non-superfluous. | ||
278 | editable.attachListener( editable, 'keydown', function() { | ||
279 | var body = doc.getBody(), | ||
280 | retained = body.getElementsByTag( tagName ); | ||
281 | |||
282 | if ( !lockRetain ) { | ||
283 | for ( var i = 0; i < retained.count(); i++ ) { | ||
284 | retained.getItem( i ).setCustomData( 'retain', true ); | ||
285 | } | ||
286 | lockRetain = true; | ||
287 | } | ||
288 | }, null, null, 1 ); | ||
289 | |||
290 | // 2. On keyup remove all elements that were not marked | ||
291 | // as non-superfluous (which means they must have had appeared in the meantime). | ||
292 | editable.attachListener( editable, 'keyup', function() { | ||
293 | var elements = doc.getElementsByTag( tagName ); | ||
294 | if ( lockRetain ) { | ||
295 | if ( elements.count() == 1 && !elements.getItem( 0 ).getCustomData( 'retain' ) ) { | ||
296 | elements.getItem( 0 ).remove( 1 ); | ||
297 | } | ||
298 | lockRetain = false; | ||
299 | } | ||
300 | } ); | ||
301 | } | ||
302 | } | ||
303 | |||
304 | var framedWysiwyg = CKEDITOR.tools.createClass( { | ||
305 | $: function() { | ||
306 | this.base.apply( this, arguments ); | ||
307 | |||
308 | this._.frameLoadedHandler = CKEDITOR.tools.addFunction( function( win ) { | ||
309 | // Avoid opening design mode in a frame window thread, | ||
310 | // which will cause host page scrolling.(#4397) | ||
311 | CKEDITOR.tools.setTimeout( onDomReady, 0, this, win ); | ||
312 | }, this ); | ||
313 | |||
314 | this._.docTitle = this.getWindow().getFrame().getAttribute( 'title' ); | ||
315 | }, | ||
316 | |||
317 | base: CKEDITOR.editable, | ||
318 | |||
319 | proto: { | ||
320 | setData: function( data, isSnapshot ) { | ||
321 | var editor = this.editor; | ||
322 | |||
323 | if ( isSnapshot ) { | ||
324 | this.setHtml( data ); | ||
325 | this.fixInitialSelection(); | ||
326 | |||
327 | // Fire dataReady for the consistency with inline editors | ||
328 | // and because it makes sense. (#10370) | ||
329 | editor.fire( 'dataReady' ); | ||
330 | } | ||
331 | else { | ||
332 | this._.isLoadingData = true; | ||
333 | editor._.dataStore = { id: 1 }; | ||
334 | |||
335 | var config = editor.config, | ||
336 | fullPage = config.fullPage, | ||
337 | docType = config.docType; | ||
338 | |||
339 | // Build the additional stuff to be included into <head>. | ||
340 | var headExtra = CKEDITOR.tools.buildStyleHtml( iframeCssFixes() ).replace( /<style>/, '<style data-cke-temp="1">' ); | ||
341 | |||
342 | if ( !fullPage ) | ||
343 | headExtra += CKEDITOR.tools.buildStyleHtml( editor.config.contentsCss ); | ||
344 | |||
345 | var baseTag = config.baseHref ? '<base href="' + config.baseHref + '" data-cke-temp="1" />' : ''; | ||
346 | |||
347 | if ( fullPage ) { | ||
348 | // Search and sweep out the doctype declaration. | ||
349 | data = data.replace( /<!DOCTYPE[^>]*>/i, function( match ) { | ||
350 | editor.docType = docType = match; | ||
351 | return ''; | ||
352 | } ).replace( /<\?xml\s[^\?]*\?>/i, function( match ) { | ||
353 | editor.xmlDeclaration = match; | ||
354 | return ''; | ||
355 | } ); | ||
356 | } | ||
357 | |||
358 | // Get the HTML version of the data. | ||
359 | data = editor.dataProcessor.toHtml( data ); | ||
360 | |||
361 | if ( fullPage ) { | ||
362 | // Check if the <body> tag is available. | ||
363 | if ( !( /<body[\s|>]/ ).test( data ) ) | ||
364 | data = '<body>' + data; | ||
365 | |||
366 | // Check if the <html> tag is available. | ||
367 | if ( !( /<html[\s|>]/ ).test( data ) ) | ||
368 | data = '<html>' + data + '</html>'; | ||
369 | |||
370 | // Check if the <head> tag is available. | ||
371 | if ( !( /<head[\s|>]/ ).test( data ) ) | ||
372 | data = data.replace( /<html[^>]*>/, '$&<head><title></title></head>' ); | ||
373 | else if ( !( /<title[\s|>]/ ).test( data ) ) | ||
374 | data = data.replace( /<head[^>]*>/, '$&<title></title>' ); | ||
375 | |||
376 | // The base must be the first tag in the HEAD, e.g. to get relative | ||
377 | // links on styles. | ||
378 | baseTag && ( data = data.replace( /<head[^>]*?>/, '$&' + baseTag ) ); | ||
379 | |||
380 | // Inject the extra stuff into <head>. | ||
381 | // Attention: do not change it before testing it well. (V2) | ||
382 | // This is tricky... if the head ends with <meta ... content type>, | ||
383 | // Firefox will break. But, it works if we place our extra stuff as | ||
384 | // the last elements in the HEAD. | ||
385 | data = data.replace( /<\/head\s*>/, headExtra + '$&' ); | ||
386 | |||
387 | // Add the DOCTYPE back to it. | ||
388 | data = docType + data; | ||
389 | } else { | ||
390 | data = config.docType + | ||
391 | '<html dir="' + config.contentsLangDirection + '"' + | ||
392 | ' lang="' + ( config.contentsLanguage || editor.langCode ) + '">' + | ||
393 | '<head>' + | ||
394 | '<title>' + this._.docTitle + '</title>' + | ||
395 | baseTag + | ||
396 | headExtra + | ||
397 | '</head>' + | ||
398 | '<body' + ( config.bodyId ? ' id="' + config.bodyId + '"' : '' ) + | ||
399 | ( config.bodyClass ? ' class="' + config.bodyClass + '"' : '' ) + | ||
400 | '>' + | ||
401 | data + | ||
402 | '</body>' + | ||
403 | '</html>'; | ||
404 | } | ||
405 | |||
406 | if ( CKEDITOR.env.gecko ) { | ||
407 | // Hack to make Fx put cursor at the start of doc on fresh focus. | ||
408 | data = data.replace( /<body/, '<body contenteditable="true" ' ); | ||
409 | |||
410 | // Another hack which is used by onDomReady to remove a leading | ||
411 | // <br> which is inserted by Firefox 3.6 when document.write is called. | ||
412 | // This additional <br> is present because of contenteditable="true" | ||
413 | if ( CKEDITOR.env.version < 20000 ) | ||
414 | data = data.replace( /<body[^>]*>/, '$&<!-- cke-content-start -->' ); | ||
415 | } | ||
416 | |||
417 | // The script that launches the bootstrap logic on 'domReady', so the document | ||
418 | // is fully editable even before the editing iframe is fully loaded (#4455). | ||
419 | var bootstrapCode = | ||
420 | '<script id="cke_actscrpt" type="text/javascript"' + ( CKEDITOR.env.ie ? ' defer="defer" ' : '' ) + '>' + | ||
421 | 'var wasLoaded=0;' + // It must be always set to 0 as it remains as a window property. | ||
422 | 'function onload(){' + | ||
423 | 'if(!wasLoaded)' + // FF3.6 calls onload twice when editor.setData. Stop that. | ||
424 | 'window.parent.CKEDITOR.tools.callFunction(' + this._.frameLoadedHandler + ',window);' + | ||
425 | 'wasLoaded=1;' + | ||
426 | '}' + | ||
427 | ( CKEDITOR.env.ie ? 'onload();' : 'document.addEventListener("DOMContentLoaded", onload, false );' ) + | ||
428 | '</script>'; | ||
429 | |||
430 | // For IE<9 add support for HTML5's elements. | ||
431 | // Note: this code must not be deferred. | ||
432 | if ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) { | ||
433 | bootstrapCode += | ||
434 | '<script id="cke_shimscrpt">' + | ||
435 | 'window.parent.CKEDITOR.tools.enableHtml5Elements(document)' + | ||
436 | '</script>'; | ||
437 | } | ||
438 | |||
439 | // IE<10 needs this hack to properly enable <base href="...">. | ||
440 | // See: http://stackoverflow.com/a/13373180/1485219 (#11910). | ||
441 | if ( baseTag && CKEDITOR.env.ie && CKEDITOR.env.version < 10 ) { | ||
442 | bootstrapCode += | ||
443 | '<script id="cke_basetagscrpt">' + | ||
444 | 'var baseTag = document.querySelector( "base" );' + | ||
445 | 'baseTag.href = baseTag.href;' + | ||
446 | '</script>'; | ||
447 | } | ||
448 | |||
449 | data = data.replace( /(?=\s*<\/(:?head)>)/, bootstrapCode ); | ||
450 | |||
451 | // Current DOM will be deconstructed by document.write, cleanup required. | ||
452 | this.clearCustomData(); | ||
453 | this.clearListeners(); | ||
454 | |||
455 | editor.fire( 'contentDomUnload' ); | ||
456 | |||
457 | var doc = this.getDocument(); | ||
458 | |||
459 | // Work around Firefox bug - error prune when called from XUL (#320), | ||
460 | // defer it thanks to the async nature of this method. | ||
461 | try { | ||
462 | doc.write( data ); | ||
463 | } catch ( e ) { | ||
464 | setTimeout( function() { | ||
465 | doc.write( data ); | ||
466 | }, 0 ); | ||
467 | } | ||
468 | } | ||
469 | }, | ||
470 | |||
471 | getData: function( isSnapshot ) { | ||
472 | if ( isSnapshot ) | ||
473 | return this.getHtml(); | ||
474 | else { | ||
475 | var editor = this.editor, | ||
476 | config = editor.config, | ||
477 | fullPage = config.fullPage, | ||
478 | docType = fullPage && editor.docType, | ||
479 | xmlDeclaration = fullPage && editor.xmlDeclaration, | ||
480 | doc = this.getDocument(); | ||
481 | |||
482 | var data = fullPage ? doc.getDocumentElement().getOuterHtml() : doc.getBody().getHtml(); | ||
483 | |||
484 | // BR at the end of document is bogus node for Mozilla. (#5293). | ||
485 | // Prevent BRs from disappearing from the end of the content | ||
486 | // while enterMode is ENTER_BR (#10146). | ||
487 | if ( CKEDITOR.env.gecko && config.enterMode != CKEDITOR.ENTER_BR ) | ||
488 | data = data.replace( /<br>(?=\s*(:?$|<\/body>))/, '' ); | ||
489 | |||
490 | data = editor.dataProcessor.toDataFormat( data ); | ||
491 | |||
492 | if ( xmlDeclaration ) | ||
493 | data = xmlDeclaration + '\n' + data; | ||
494 | if ( docType ) | ||
495 | data = docType + '\n' + data; | ||
496 | |||
497 | return data; | ||
498 | } | ||
499 | }, | ||
500 | |||
501 | focus: function() { | ||
502 | if ( this._.isLoadingData ) | ||
503 | this._.isPendingFocus = true; | ||
504 | else | ||
505 | framedWysiwyg.baseProto.focus.call( this ); | ||
506 | }, | ||
507 | |||
508 | detach: function() { | ||
509 | var editor = this.editor, | ||
510 | doc = editor.document, | ||
511 | iframe, | ||
512 | onResize; | ||
513 | |||
514 | // Trying to access window's frameElement property on Edge throws an exception | ||
515 | // when frame was already removed from DOM. (#13850, #13790) | ||
516 | try { | ||
517 | iframe = editor.window.getFrame(); | ||
518 | } catch ( e ) {} | ||
519 | |||
520 | framedWysiwyg.baseProto.detach.call( this ); | ||
521 | |||
522 | // Memory leak proof. | ||
523 | this.clearCustomData(); | ||
524 | doc.getDocumentElement().clearCustomData(); | ||
525 | CKEDITOR.tools.removeFunction( this._.frameLoadedHandler ); | ||
526 | |||
527 | // On IE, iframe is returned even after remove() method is called on it. | ||
528 | // Checking if parent is present fixes this issue. (#13850) | ||
529 | if ( iframe && iframe.getParent() ) { | ||
530 | iframe.clearCustomData(); | ||
531 | onResize = iframe.removeCustomData( 'onResize' ); | ||
532 | onResize && onResize.removeListener(); | ||
533 | |||
534 | // IE BUG: When destroying editor DOM with the selection remains inside | ||
535 | // editing area would break IE7/8's selection system, we have to put the editing | ||
536 | // iframe offline first. (#3812 and #5441) | ||
537 | iframe.remove(); | ||
538 | } else { | ||
539 | CKEDITOR.warn( 'editor-destroy-iframe' ); | ||
540 | } | ||
541 | } | ||
542 | } | ||
543 | } ); | ||
544 | |||
545 | function objectResizeDisabler( editor ) { | ||
546 | if ( CKEDITOR.env.gecko ) { | ||
547 | // FF allows to change resizing preferences by calling execCommand. | ||
548 | try { | ||
549 | var doc = editor.document.$; | ||
550 | doc.execCommand( 'enableObjectResizing', false, !editor.config.disableObjectResizing ); | ||
551 | doc.execCommand( 'enableInlineTableEditing', false, !editor.config.disableNativeTableHandles ); | ||
552 | } catch ( e ) {} | ||
553 | } else if ( CKEDITOR.env.ie && CKEDITOR.env.version < 11 && editor.config.disableObjectResizing ) { | ||
554 | // It's possible to prevent resizing up to IE10. | ||
555 | blockResizeStart( editor ); | ||
556 | } | ||
557 | |||
558 | // Disables resizing by preventing default action on resizestart event. | ||
559 | function blockResizeStart() { | ||
560 | var lastListeningElement; | ||
561 | |||
562 | // We'll attach only one listener at a time, instead of adding it to every img, input, hr etc. | ||
563 | // Listener will be attached upon selectionChange, we'll also check if there was any element that | ||
564 | // got listener before (lastListeningElement) - if so we need to remove previous listener. | ||
565 | editor.editable().attachListener( editor, 'selectionChange', function() { | ||
566 | var selectedElement = editor.getSelection().getSelectedElement(); | ||
567 | |||
568 | if ( selectedElement ) { | ||
569 | if ( lastListeningElement ) { | ||
570 | lastListeningElement.detachEvent( 'onresizestart', resizeStartListener ); | ||
571 | lastListeningElement = null; | ||
572 | } | ||
573 | |||
574 | // IE requires using attachEvent, because it does not work using W3C compilant addEventListener, | ||
575 | // tested with IE10. | ||
576 | selectedElement.$.attachEvent( 'onresizestart', resizeStartListener ); | ||
577 | lastListeningElement = selectedElement.$; | ||
578 | } | ||
579 | } ); | ||
580 | } | ||
581 | |||
582 | function resizeStartListener( evt ) { | ||
583 | evt.returnValue = false; | ||
584 | } | ||
585 | } | ||
586 | |||
587 | function iframeCssFixes() { | ||
588 | var css = []; | ||
589 | |||
590 | // IE>=8 stricts mode doesn't have 'contentEditable' in effect | ||
591 | // on element unless it has layout. (#5562) | ||
592 | if ( CKEDITOR.document.$.documentMode >= 8 ) { | ||
593 | css.push( 'html.CSS1Compat [contenteditable=false]{min-height:0 !important}' ); | ||
594 | |||
595 | var selectors = []; | ||
596 | |||
597 | for ( var tag in CKEDITOR.dtd.$removeEmpty ) | ||
598 | selectors.push( 'html.CSS1Compat ' + tag + '[contenteditable=false]' ); | ||
599 | |||
600 | css.push( selectors.join( ',' ) + '{display:inline-block}' ); | ||
601 | } | ||
602 | // Set the HTML style to 100% to have the text cursor in affect (#6341) | ||
603 | else if ( CKEDITOR.env.gecko ) { | ||
604 | css.push( 'html{height:100% !important}' ); | ||
605 | css.push( 'img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}' ); | ||
606 | } | ||
607 | |||
608 | // #6341: The text cursor must be set on the editor area. | ||
609 | // #6632: Avoid having "text" shape of cursor in IE7 scrollbars. | ||
610 | css.push( 'html{cursor:text;*cursor:auto}' ); | ||
611 | |||
612 | // Use correct cursor for these elements | ||
613 | css.push( 'img,input,textarea{cursor:default}' ); | ||
614 | |||
615 | return css.join( '\n' ); | ||
616 | } | ||
617 | } )(); | ||
618 | |||
619 | /** | ||
620 | * Disables the ability to resize objects (images and tables) in the editing area. | ||
621 | * | ||
622 | * config.disableObjectResizing = true; | ||
623 | * | ||
624 | * **Note:** Because of incomplete implementation of editing features in browsers | ||
625 | * this option does not work for inline editors (see ticket [#10197](http://dev.ckeditor.com/ticket/10197)), | ||
626 | * does not work in Internet Explorer 11+ (see [#9317](http://dev.ckeditor.com/ticket/9317#comment:16) and | ||
627 | * [IE11+ issue](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements)). | ||
628 | * In Internet Explorer 8-10 this option only blocks resizing, but it is unable to hide the resize handles. | ||
629 | * | ||
630 | * @cfg | ||
631 | * @member CKEDITOR.config | ||
632 | */ | ||
633 | CKEDITOR.config.disableObjectResizing = false; | ||
634 | |||
635 | /** | ||
636 | * Disables the "table tools" offered natively by the browser (currently | ||
637 | * Firefox only) to perform quick table editing operations, like adding or | ||
638 | * deleting rows and columns. | ||
639 | * | ||
640 | * config.disableNativeTableHandles = false; | ||
641 | * | ||
642 | * @cfg | ||
643 | * @member CKEDITOR.config | ||
644 | */ | ||
645 | CKEDITOR.config.disableNativeTableHandles = true; | ||
646 | |||
647 | /** | ||
648 | * Disables the built-in spell checker if the browser provides one. | ||
649 | * | ||
650 | * **Note:** Although word suggestions provided natively by the browsers will | ||
651 | * not appear in CKEditor's default context menu, | ||
652 | * users can always reach the native context menu by holding the | ||
653 | * *Ctrl* key when right-clicking if {@link #browserContextMenuOnCtrl} | ||
654 | * is enabled or you are simply not using the | ||
655 | * [context menu](http://ckeditor.com/addon/contextmenu) plugin. | ||
656 | * | ||
657 | * config.disableNativeSpellChecker = false; | ||
658 | * | ||
659 | * @cfg | ||
660 | * @member CKEDITOR.config | ||
661 | */ | ||
662 | CKEDITOR.config.disableNativeSpellChecker = true; | ||
663 | |||
664 | /** | ||
665 | * Language code of the writing language which is used to author the editor | ||
666 | * content. This option accepts one single entry value in the format defined in the | ||
667 | * [Tags for Identifying Languages (BCP47)](http://www.ietf.org/rfc/bcp/bcp47.txt) | ||
668 | * IETF document and is used in the `lang` attribute. | ||
669 | * | ||
670 | * config.contentsLanguage = 'fr'; | ||
671 | * | ||
672 | * @cfg {String} [contentsLanguage=same value with editor's UI language] | ||
673 | * @member CKEDITOR.config | ||
674 | */ | ||
675 | |||
676 | /** | ||
677 | * The base href URL used to resolve relative and absolute URLs in the | ||
678 | * editor content. | ||
679 | * | ||
680 | * config.baseHref = 'http://www.example.com/path/'; | ||
681 | * | ||
682 | * @cfg {String} [baseHref=''] | ||
683 | * @member CKEDITOR.config | ||
684 | */ | ||
685 | |||
686 | /** | ||
687 | * Whether to automatically create wrapping blocks around inline content inside the document body. | ||
688 | * This helps to ensure the integrity of the block *Enter* mode. | ||
689 | * | ||
690 | * **Note:** This option is deprecated. Changing the default value might introduce unpredictable usability issues and is | ||
691 | * highly unrecommended. | ||
692 | * | ||
693 | * config.autoParagraph = false; | ||
694 | * | ||
695 | * @deprecated | ||
696 | * @since 3.6 | ||
697 | * @cfg {Boolean} [autoParagraph=true] | ||
698 | * @member CKEDITOR.config | ||
699 | */ | ||
700 | |||
701 | /** | ||
702 | * Fired when some elements are added to the document. | ||
703 | * | ||
704 | * @event ariaWidget | ||
705 | * @member CKEDITOR.editor | ||
706 | * @param {CKEDITOR.editor} editor This editor instance. | ||
707 | * @param {CKEDITOR.dom.element} data The element being added. | ||
708 | */ | ||
diff --git a/sources/plugins/wysiwygarea/samples/fullpage.html b/sources/plugins/wysiwygarea/samples/fullpage.html new file mode 100644 index 0000000..341a4e7 --- /dev/null +++ b/sources/plugins/wysiwygarea/samples/fullpage.html | |||
@@ -0,0 +1,80 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <!-- | ||
3 | Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. | ||
4 | For licensing, see LICENSE.md or http://ckeditor.com/license | ||
5 | --> | ||
6 | <html> | ||
7 | <head> | ||
8 | <meta charset="utf-8"> | ||
9 | <title>Full Page Editing — CKEditor Sample</title> | ||
10 | <script src="../../../ckeditor.js"></script> | ||
11 | <script src="../../../samples/old/sample.js"></script> | ||
12 | <link rel="stylesheet" href="../../../samples/old/sample.css"> | ||
13 | <meta name="ckeditor-sample-required-plugins" content="sourcearea"> | ||
14 | <meta name="ckeditor-sample-name" content="Full page support"> | ||
15 | <meta name="ckeditor-sample-group" content="Plugins"> | ||
16 | <meta name="ckeditor-sample-description" content="CKEditor inserted with a JavaScript call and used to edit the whole page from <html> to </html>."> | ||
17 | </head> | ||
18 | <body> | ||
19 | <h1 class="samples"> | ||
20 | <a href="../../../samples/old/index.html">CKEditor Samples</a> » Full Page Editing | ||
21 | </h1> | ||
22 | <div class="warning deprecated"> | ||
23 | This sample is not maintained anymore. Check out its <a href="http://sdk.ckeditor.com/samples/fullpage.html">brand new version in CKEditor SDK</a>. | ||
24 | </div> | ||
25 | <div class="description"> | ||
26 | <p> | ||
27 | This sample shows how to configure CKEditor to edit entire HTML pages, from the | ||
28 | <code><html></code> tag to the <code></html></code> tag. | ||
29 | </p> | ||
30 | <p> | ||
31 | The CKEditor instance below is inserted with a JavaScript call using the following code: | ||
32 | </p> | ||
33 | <pre class="samples"> | ||
34 | CKEDITOR.replace( '<em>textarea_id</em>', { | ||
35 | <strong>fullPage: true</strong>, | ||
36 | <strong>allowedContent: true</strong> | ||
37 | }); | ||
38 | </pre> | ||
39 | <p> | ||
40 | Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of | ||
41 | the <code><textarea></code> element to be replaced. | ||
42 | </p> | ||
43 | <p> | ||
44 | The <code><em>allowedContent</em></code> in the code above is set to <code>true</code> to disable content filtering. | ||
45 | Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations. | ||
46 | </p> | ||
47 | </div> | ||
48 | <form action="../../../samples/sample_posteddata.php" method="post"> | ||
49 | <label for="editor1"> | ||
50 | CKEditor output the entire page including content outside of | ||
51 | <code><body></code> element, so content like meta and title can be changed: | ||
52 | </label> | ||
53 | <textarea cols="80" id="editor1" name="editor1" rows="10"> | ||
54 | <h1><img align="right" alt="Saturn V carrying Apollo 11" src="../../../samples/old/assets/sample.jpg"/> Apollo 11</h1> <p><b>Apollo 11</b> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p> <p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)" title="Michael Collins (astronaut)">Michael Collins</a>, piloted the <a href="http://en.wikipedia.org/wiki/Apollo_Command/Service_Module" title="Apollo Command/Service Module">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.</p> <h2>Broadcasting and <em>quotes</em> <a id="quotes" name="quotes"></a></h2> <p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:</p> <blockquote><p>One small step for [a] man, one giant leap for mankind.</p></blockquote> <p>Apollo 11 effectively ended the <a href="http://en.wikipedia.org/wiki/Space_Race" title="Space Race">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href="http://en.wikipedia.org/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a> in a speech before the United States Congress:</p> <blockquote><p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.</p></blockquote> <h2>Technical details <a id="tech-details" name="tech-details"></a></h2> <table align="right" border="1" bordercolor="#ccc" cellpadding="5" cellspacing="0" style="border-collapse:collapse;margin:10px 0 10px 15px;"> <caption><strong>Mission crew</strong></caption> <thead> <tr> <th scope="col">Position</th> <th scope="col">Astronaut</th> </tr> </thead> <tbody> <tr> <td>Commander</td> <td>Neil A. Armstrong</td> </tr> <tr> <td>Command Module Pilot</td> <td>Michael Collins</td> </tr> <tr> <td>Lunar Module Pilot</td> <td>Edwin &quot;Buzz&quot; E. Aldrin, Jr.</td> </tr> </tbody> </table> <p>Launched by a <strong>Saturn V</strong> rocket from <a href="http://en.wikipedia.org/wiki/Kennedy_Space_Center" title="Kennedy Space Center">Kennedy Space Center</a> in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of <a href="http://en.wikipedia.org/wiki/NASA" title="NASA">NASA</a>&#39;s Apollo program. The Apollo spacecraft had three parts:</p> <ol> <li><strong>Command Module</strong> with a cabin for the three astronauts which was the only part which landed back on Earth</li> <li><strong>Service Module</strong> which supported the Command Module with propulsion, electrical power, oxygen and water</li> <li><strong>Lunar Module</strong> for landing on the Moon.</li> </ol> <p>After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the <a href="http://en.wikipedia.org/wiki/Mare_Tranquillitatis" title="Mare Tranquillitatis">Sea of Tranquility</a>. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the <a href="http://en.wikipedia.org/wiki/Pacific_Ocean" title="Pacific Ocean">Pacific Ocean</a> on July 24.</p> <hr/> <p style="text-align: right;"><small>Source: <a href="http://en.wikipedia.org/wiki/Apollo_11">Wikipedia.org</a></small></p> | ||
55 | </textarea> | ||
56 | <script> | ||
57 | |||
58 | CKEDITOR.replace( 'editor1', { | ||
59 | fullPage: true, | ||
60 | allowedContent: true, | ||
61 | extraPlugins: 'wysiwygarea' | ||
62 | }); | ||
63 | |||
64 | </script> | ||
65 | <p> | ||
66 | <input type="submit" value="Submit"> | ||
67 | </p> | ||
68 | </form> | ||
69 | <div id="footer"> | ||
70 | <hr> | ||
71 | <p> | ||
72 | CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a> | ||
73 | </p> | ||
74 | <p id="copy"> | ||
75 | Copyright © 2003-2016, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico | ||
76 | Knabben. All rights reserved. | ||
77 | </p> | ||
78 | </div> | ||
79 | </body> | ||
80 | </html> | ||