aboutsummaryrefslogtreecommitdiff
path: root/sources/plugins/image
diff options
context:
space:
mode:
Diffstat (limited to 'sources/plugins/image')
-rw-r--r--sources/plugins/image/dialogs/image.js1254
-rw-r--r--sources/plugins/image/icons/hidpi/image.pngbin0 -> 905 bytes
-rw-r--r--sources/plugins/image/icons/image.pngbin0 -> 498 bytes
-rw-r--r--sources/plugins/image/images/noimage.pngbin0 -> 1610 bytes
-rw-r--r--sources/plugins/image/lang/af.js25
-rw-r--r--sources/plugins/image/lang/ar.js25
-rw-r--r--sources/plugins/image/lang/az.js25
-rw-r--r--sources/plugins/image/lang/bg.js25
-rw-r--r--sources/plugins/image/lang/bn.js25
-rw-r--r--sources/plugins/image/lang/bs.js25
-rw-r--r--sources/plugins/image/lang/ca.js25
-rw-r--r--sources/plugins/image/lang/cs.js25
-rw-r--r--sources/plugins/image/lang/cy.js25
-rw-r--r--sources/plugins/image/lang/da.js25
-rw-r--r--sources/plugins/image/lang/de-ch.js25
-rw-r--r--sources/plugins/image/lang/de.js25
-rw-r--r--sources/plugins/image/lang/el.js25
-rw-r--r--sources/plugins/image/lang/en-au.js25
-rw-r--r--sources/plugins/image/lang/en-ca.js25
-rw-r--r--sources/plugins/image/lang/en-gb.js25
-rw-r--r--sources/plugins/image/lang/en.js25
-rw-r--r--sources/plugins/image/lang/eo.js25
-rw-r--r--sources/plugins/image/lang/es.js25
-rw-r--r--sources/plugins/image/lang/et.js25
-rw-r--r--sources/plugins/image/lang/eu.js25
-rw-r--r--sources/plugins/image/lang/fa.js25
-rw-r--r--sources/plugins/image/lang/fi.js25
-rw-r--r--sources/plugins/image/lang/fo.js25
-rw-r--r--sources/plugins/image/lang/fr-ca.js25
-rw-r--r--sources/plugins/image/lang/fr.js25
-rw-r--r--sources/plugins/image/lang/gl.js25
-rw-r--r--sources/plugins/image/lang/gu.js25
-rw-r--r--sources/plugins/image/lang/he.js25
-rw-r--r--sources/plugins/image/lang/hi.js25
-rw-r--r--sources/plugins/image/lang/hr.js25
-rw-r--r--sources/plugins/image/lang/hu.js25
-rw-r--r--sources/plugins/image/lang/id.js25
-rw-r--r--sources/plugins/image/lang/is.js25
-rw-r--r--sources/plugins/image/lang/it.js25
-rw-r--r--sources/plugins/image/lang/ja.js25
-rw-r--r--sources/plugins/image/lang/ka.js25
-rw-r--r--sources/plugins/image/lang/km.js25
-rw-r--r--sources/plugins/image/lang/ko.js25
-rw-r--r--sources/plugins/image/lang/ku.js25
-rw-r--r--sources/plugins/image/lang/lt.js25
-rw-r--r--sources/plugins/image/lang/lv.js25
-rw-r--r--sources/plugins/image/lang/mk.js25
-rw-r--r--sources/plugins/image/lang/mn.js25
-rw-r--r--sources/plugins/image/lang/ms.js25
-rw-r--r--sources/plugins/image/lang/nb.js25
-rw-r--r--sources/plugins/image/lang/nl.js25
-rw-r--r--sources/plugins/image/lang/no.js25
-rw-r--r--sources/plugins/image/lang/oc.js25
-rw-r--r--sources/plugins/image/lang/pl.js25
-rw-r--r--sources/plugins/image/lang/pt-br.js25
-rw-r--r--sources/plugins/image/lang/pt.js25
-rw-r--r--sources/plugins/image/lang/ro.js25
-rw-r--r--sources/plugins/image/lang/ru.js25
-rw-r--r--sources/plugins/image/lang/si.js25
-rw-r--r--sources/plugins/image/lang/sk.js25
-rw-r--r--sources/plugins/image/lang/sl.js25
-rw-r--r--sources/plugins/image/lang/sq.js25
-rw-r--r--sources/plugins/image/lang/sr-latn.js25
-rw-r--r--sources/plugins/image/lang/sr.js25
-rw-r--r--sources/plugins/image/lang/sv.js25
-rw-r--r--sources/plugins/image/lang/th.js25
-rw-r--r--sources/plugins/image/lang/tr.js25
-rw-r--r--sources/plugins/image/lang/tt.js25
-rw-r--r--sources/plugins/image/lang/ug.js25
-rw-r--r--sources/plugins/image/lang/uk.js25
-rw-r--r--sources/plugins/image/lang/vi.js25
-rw-r--r--sources/plugins/image/lang/zh-cn.js25
-rw-r--r--sources/plugins/image/lang/zh.js25
-rw-r--r--sources/plugins/image/plugin.js183
74 files changed, 3162 insertions, 0 deletions
diff --git a/sources/plugins/image/dialogs/image.js b/sources/plugins/image/dialogs/image.js
new file mode 100644
index 0000000..7d7537a
--- /dev/null
+++ b/sources/plugins/image/dialogs/image.js
@@ -0,0 +1,1254 @@
1/**
2 * @license Copyright (c) 2003-2017, 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: ( CKEDITOR.skinName || editor.config.skin ) == 'moono-lisa' ? 500 : 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 className: 'cke_dialog_image_url',
494 children: [ {
495 id: 'txtUrl',
496 type: 'text',
497 label: editor.lang.common.url,
498 required: true,
499 onChange: function() {
500 var dialog = this.getDialog(),
501 newUrl = this.getValue();
502
503 // Update original image.
504 // Prevent from load before onShow.
505 if ( newUrl.length > 0 ) {
506 dialog = this.getDialog();
507 var original = dialog.originalElement;
508
509 if ( dialog.preview ) {
510 dialog.preview.removeStyle( 'display' );
511 }
512
513 original.setCustomData( 'isReady', 'false' );
514 // Show loader.
515 var loader = CKEDITOR.document.getById( imagePreviewLoaderId );
516 if ( loader )
517 loader.setStyle( 'display', '' );
518
519 original.on( 'load', onImgLoadEvent, dialog );
520 original.on( 'error', onImgLoadErrorEvent, dialog );
521 original.on( 'abort', onImgLoadErrorEvent, dialog );
522 original.setAttribute( 'src', newUrl );
523
524 if ( dialog.preview ) {
525 // Query the preloader to figure out the url impacted by based href.
526 previewPreloader.setAttribute( 'src', newUrl );
527 dialog.preview.setAttribute( 'src', previewPreloader.$.src );
528 updatePreview( dialog );
529 }
530 }
531 // Dont show preview if no URL given.
532 else if ( dialog.preview ) {
533 dialog.preview.removeAttribute( 'src' );
534 dialog.preview.setStyle( 'display', 'none' );
535 }
536 },
537 setup: function( type, element ) {
538 if ( type == IMAGE ) {
539 var url = element.data( 'cke-saved-src' ) || element.getAttribute( 'src' );
540 var field = this;
541
542 this.getDialog().dontResetSize = true;
543
544 field.setValue( url ); // And call this.onChange()
545 // Manually set the initial value.(#4191)
546 field.setInitValue();
547 }
548 },
549 commit: function( type, element ) {
550 if ( type == IMAGE && ( this.getValue() || this.isChanged() ) ) {
551 element.data( 'cke-saved-src', this.getValue() );
552 element.setAttribute( 'src', this.getValue() );
553 } else if ( type == CLEANUP ) {
554 element.setAttribute( 'src', '' ); // If removeAttribute doesn't work.
555 element.removeAttribute( 'src' );
556 }
557 },
558 validate: CKEDITOR.dialog.validate.notEmpty( editor.lang.image.urlMissing )
559 },
560 {
561 type: 'button',
562 id: 'browse',
563 // v-align with the 'txtUrl' field.
564 // TODO: We need something better than a fixed size here.
565 style: 'display:inline-block;margin-top:14px;',
566 align: 'center',
567 label: editor.lang.common.browseServer,
568 hidden: true,
569 filebrowser: 'info:txtUrl'
570 } ]
571 } ]
572 },
573 {
574 id: 'txtAlt',
575 type: 'text',
576 label: editor.lang.image.alt,
577 accessKey: 'T',
578 'default': '',
579 onChange: function() {
580 updatePreview( this.getDialog() );
581 },
582 setup: function( type, element ) {
583 if ( type == IMAGE )
584 this.setValue( element.getAttribute( 'alt' ) );
585 },
586 commit: function( type, element ) {
587 if ( type == IMAGE ) {
588 if ( this.getValue() || this.isChanged() )
589 element.setAttribute( 'alt', this.getValue() );
590 } else if ( type == PREVIEW )
591 element.setAttribute( 'alt', this.getValue() );
592 else if ( type == CLEANUP ) {
593 element.removeAttribute( 'alt' );
594 }
595
596 }
597 },
598 {
599 type: 'hbox',
600 children: [ {
601 id: 'basic',
602 type: 'vbox',
603 children: [ {
604 type: 'hbox',
605 requiredContent: 'img{width,height}',
606 widths: [ '50%', '50%' ],
607 children: [ {
608 type: 'vbox',
609 padding: 1,
610 children: [ {
611 type: 'text',
612 width: '45px',
613 id: 'txtWidth',
614 label: editor.lang.common.width,
615 onKeyUp: onSizeChange,
616 onChange: function() {
617 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
618 },
619 validate: function() {
620 var aMatch = this.getValue().match( regexGetSizeOrEmpty ),
621 isValid = !!( aMatch && parseInt( aMatch[ 1 ], 10 ) !== 0 );
622 if ( !isValid )
623 alert( editor.lang.common.invalidWidth ); // jshint ignore:line
624 return isValid;
625 },
626 setup: setupDimension,
627 commit: function( type, element ) {
628 var value = this.getValue();
629 if ( type == IMAGE ) {
630 if ( value && editor.activeFilter.check( 'img{width,height}' ) )
631 element.setStyle( 'width', CKEDITOR.tools.cssLength( value ) );
632 else
633 element.removeStyle( 'width' );
634
635 element.removeAttribute( 'width' );
636 } else if ( type == PREVIEW ) {
637 var aMatch = value.match( regexGetSize );
638 if ( !aMatch ) {
639 var oImageOriginal = this.getDialog().originalElement;
640 if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )
641 element.setStyle( 'width', oImageOriginal.$.width + 'px' );
642 } else {
643 element.setStyle( 'width', CKEDITOR.tools.cssLength( value ) );
644 }
645 } else if ( type == CLEANUP ) {
646 element.removeAttribute( 'width' );
647 element.removeStyle( 'width' );
648 }
649 }
650 },
651 {
652 type: 'text',
653 id: 'txtHeight',
654 width: '45px',
655 label: editor.lang.common.height,
656 onKeyUp: onSizeChange,
657 onChange: function() {
658 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
659 },
660 validate: function() {
661 var aMatch = this.getValue().match( regexGetSizeOrEmpty ),
662 isValid = !!( aMatch && parseInt( aMatch[ 1 ], 10 ) !== 0 );
663 if ( !isValid )
664 alert( editor.lang.common.invalidHeight ); // jshint ignore:line
665 return isValid;
666 },
667 setup: setupDimension,
668 commit: function( type, element ) {
669 var value = this.getValue();
670 if ( type == IMAGE ) {
671 if ( value && editor.activeFilter.check( 'img{width,height}' ) )
672 element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) );
673 else
674 element.removeStyle( 'height' );
675
676 element.removeAttribute( 'height' );
677 } else if ( type == PREVIEW ) {
678 var aMatch = value.match( regexGetSize );
679 if ( !aMatch ) {
680 var oImageOriginal = this.getDialog().originalElement;
681 if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )
682 element.setStyle( 'height', oImageOriginal.$.height + 'px' );
683 } else {
684 element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) );
685 }
686 } else if ( type == CLEANUP ) {
687 element.removeAttribute( 'height' );
688 element.removeStyle( 'height' );
689 }
690 }
691 } ]
692 },
693 {
694 id: 'ratioLock',
695 type: 'html',
696 className: 'cke_dialog_image_ratiolock',
697 style: 'margin-top:30px;width:40px;height:40px;',
698 onLoad: function() {
699 // Activate Reset button
700 var resetButton = CKEDITOR.document.getById( btnResetSizeId ),
701 ratioButton = CKEDITOR.document.getById( btnLockSizesId );
702 if ( resetButton ) {
703 resetButton.on( 'click', function( evt ) {
704 resetSize( this );
705 evt.data && evt.data.preventDefault();
706 }, this.getDialog() );
707 resetButton.on( 'mouseover', function() {
708 this.addClass( 'cke_btn_over' );
709 }, resetButton );
710 resetButton.on( 'mouseout', function() {
711 this.removeClass( 'cke_btn_over' );
712 }, resetButton );
713 }
714 // Activate (Un)LockRatio button
715 if ( ratioButton ) {
716 ratioButton.on( 'click', function( evt ) {
717 switchLockRatio( this );
718
719 var oImageOriginal = this.originalElement,
720 width = this.getValueOf( 'info', 'txtWidth' );
721
722 if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' && width ) {
723 var height = oImageOriginal.$.height / oImageOriginal.$.width * width;
724 if ( !isNaN( height ) ) {
725 this.setValueOf( 'info', 'txtHeight', Math.round( height ) );
726 updatePreview( this );
727 }
728 }
729 evt.data && evt.data.preventDefault();
730 }, this.getDialog() );
731 ratioButton.on( 'mouseover', function() {
732 this.addClass( 'cke_btn_over' );
733 }, ratioButton );
734 ratioButton.on( 'mouseout', function() {
735 this.removeClass( 'cke_btn_over' );
736 }, ratioButton );
737 }
738 },
739 html: '<div>' +
740 '<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.lockRatio +
741 '" class="cke_btn_locked" id="' + btnLockSizesId + '" role="checkbox"><span class="cke_icon"></span><span class="cke_label">' + editor.lang.image.lockRatio + '</span></a>' +
742 '<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.resetSize +
743 '" class="cke_btn_reset" id="' + btnResetSizeId + '" role="button"><span class="cke_label">' + editor.lang.image.resetSize + '</span></a>' +
744 '</div>'
745 } ]
746 },
747 {
748 type: 'vbox',
749 padding: 1,
750 children: [ {
751 type: 'text',
752 id: 'txtBorder',
753 requiredContent: 'img{border-width}',
754 width: '60px',
755 label: editor.lang.image.border,
756 'default': '',
757 onKeyUp: function() {
758 updatePreview( this.getDialog() );
759 },
760 onChange: function() {
761 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
762 },
763 validate: CKEDITOR.dialog.validate.integer( editor.lang.image.validateBorder ),
764 setup: function( type, element ) {
765 if ( type == IMAGE ) {
766 var value,
767 borderStyle = element.getStyle( 'border-width' );
768 borderStyle = borderStyle && borderStyle.match( /^(\d+px)(?: \1 \1 \1)?$/ );
769 value = borderStyle && parseInt( borderStyle[ 1 ], 10 );
770 isNaN( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'border' ) );
771 this.setValue( value );
772 }
773 },
774 commit: function( type, element ) {
775 var value = parseInt( this.getValue(), 10 );
776 if ( type == IMAGE || type == PREVIEW ) {
777 if ( !isNaN( value ) ) {
778 element.setStyle( 'border-width', CKEDITOR.tools.cssLength( value ) );
779 element.setStyle( 'border-style', 'solid' );
780 } else if ( !value && this.isChanged() ) {
781 element.removeStyle( 'border' );
782 }
783
784 if ( type == IMAGE )
785 element.removeAttribute( 'border' );
786 } else if ( type == CLEANUP ) {
787 element.removeAttribute( 'border' );
788 element.removeStyle( 'border-width' );
789 element.removeStyle( 'border-style' );
790 element.removeStyle( 'border-color' );
791 }
792 }
793 },
794 {
795 type: 'text',
796 id: 'txtHSpace',
797 requiredContent: 'img{margin-left,margin-right}',
798 width: '60px',
799 label: editor.lang.image.hSpace,
800 'default': '',
801 onKeyUp: function() {
802 updatePreview( this.getDialog() );
803 },
804 onChange: function() {
805 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
806 },
807 validate: CKEDITOR.dialog.validate.integer( editor.lang.image.validateHSpace ),
808 setup: function( type, element ) {
809 if ( type == IMAGE ) {
810 var value, marginLeftPx, marginRightPx,
811 marginLeftStyle = element.getStyle( 'margin-left' ),
812 marginRightStyle = element.getStyle( 'margin-right' );
813
814 marginLeftStyle = marginLeftStyle && marginLeftStyle.match( pxLengthRegex );
815 marginRightStyle = marginRightStyle && marginRightStyle.match( pxLengthRegex );
816 marginLeftPx = parseInt( marginLeftStyle, 10 );
817 marginRightPx = parseInt( marginRightStyle, 10 );
818
819 value = ( marginLeftPx == marginRightPx ) && marginLeftPx;
820 isNaN( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'hspace' ) );
821
822 this.setValue( value );
823 }
824 },
825 commit: function( type, element ) {
826 var value = parseInt( this.getValue(), 10 );
827 if ( type == IMAGE || type == PREVIEW ) {
828 if ( !isNaN( value ) ) {
829 element.setStyle( 'margin-left', CKEDITOR.tools.cssLength( value ) );
830 element.setStyle( 'margin-right', CKEDITOR.tools.cssLength( value ) );
831 } else if ( !value && this.isChanged() ) {
832 element.removeStyle( 'margin-left' );
833 element.removeStyle( 'margin-right' );
834 }
835
836 if ( type == IMAGE )
837 element.removeAttribute( 'hspace' );
838 } else if ( type == CLEANUP ) {
839 element.removeAttribute( 'hspace' );
840 element.removeStyle( 'margin-left' );
841 element.removeStyle( 'margin-right' );
842 }
843 }
844 },
845 {
846 type: 'text',
847 id: 'txtVSpace',
848 requiredContent: 'img{margin-top,margin-bottom}',
849 width: '60px',
850 label: editor.lang.image.vSpace,
851 'default': '',
852 onKeyUp: function() {
853 updatePreview( this.getDialog() );
854 },
855 onChange: function() {
856 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
857 },
858 validate: CKEDITOR.dialog.validate.integer( editor.lang.image.validateVSpace ),
859 setup: function( type, element ) {
860 if ( type == IMAGE ) {
861 var value, marginTopPx, marginBottomPx,
862 marginTopStyle = element.getStyle( 'margin-top' ),
863 marginBottomStyle = element.getStyle( 'margin-bottom' );
864
865 marginTopStyle = marginTopStyle && marginTopStyle.match( pxLengthRegex );
866 marginBottomStyle = marginBottomStyle && marginBottomStyle.match( pxLengthRegex );
867 marginTopPx = parseInt( marginTopStyle, 10 );
868 marginBottomPx = parseInt( marginBottomStyle, 10 );
869
870 value = ( marginTopPx == marginBottomPx ) && marginTopPx;
871 isNaN( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'vspace' ) );
872 this.setValue( value );
873 }
874 },
875 commit: function( type, element ) {
876 var value = parseInt( this.getValue(), 10 );
877 if ( type == IMAGE || type == PREVIEW ) {
878 if ( !isNaN( value ) ) {
879 element.setStyle( 'margin-top', CKEDITOR.tools.cssLength( value ) );
880 element.setStyle( 'margin-bottom', CKEDITOR.tools.cssLength( value ) );
881 } else if ( !value && this.isChanged() ) {
882 element.removeStyle( 'margin-top' );
883 element.removeStyle( 'margin-bottom' );
884 }
885
886 if ( type == IMAGE )
887 element.removeAttribute( 'vspace' );
888 } else if ( type == CLEANUP ) {
889 element.removeAttribute( 'vspace' );
890 element.removeStyle( 'margin-top' );
891 element.removeStyle( 'margin-bottom' );
892 }
893 }
894 },
895 {
896 id: 'cmbAlign',
897 requiredContent: 'img{float}',
898 type: 'select',
899 widths: [ '35%', '65%' ],
900 style: 'width:90px',
901 label: editor.lang.common.align,
902 'default': '',
903 items: [
904 [ editor.lang.common.notSet, '' ],
905 [ editor.lang.common.alignLeft, 'left' ],
906 [ editor.lang.common.alignRight, 'right' ]
907 // Backward compatible with v2 on setup when specified as attribute value,
908 // while these values are no more available as select options.
909 // [ editor.lang.image.alignAbsBottom , 'absBottom'],
910 // [ editor.lang.image.alignAbsMiddle , 'absMiddle'],
911 // [ editor.lang.image.alignBaseline , 'baseline'],
912 // [ editor.lang.image.alignTextTop , 'text-top'],
913 // [ editor.lang.image.alignBottom , 'bottom'],
914 // [ editor.lang.image.alignMiddle , 'middle'],
915 // [ editor.lang.image.alignTop , 'top']
916 ],
917 onChange: function() {
918 updatePreview( this.getDialog() );
919 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
920 },
921 setup: function( type, element ) {
922 if ( type == IMAGE ) {
923 var value = element.getStyle( 'float' );
924 switch ( value ) {
925 // Ignore those unrelated values.
926 case 'inherit':
927 case 'none':
928 value = '';
929 }
930
931 !value && ( value = ( element.getAttribute( 'align' ) || '' ).toLowerCase() );
932 this.setValue( value );
933 }
934 },
935 commit: function( type, element ) {
936 var value = this.getValue();
937 if ( type == IMAGE || type == PREVIEW ) {
938 if ( value )
939 element.setStyle( 'float', value );
940 else
941 element.removeStyle( 'float' );
942
943 if ( type == IMAGE ) {
944 value = ( element.getAttribute( 'align' ) || '' ).toLowerCase();
945 switch ( value ) {
946 // we should remove it only if it matches "left" or "right",
947 // otherwise leave it intact.
948 case 'left':
949 case 'right':
950 element.removeAttribute( 'align' );
951 }
952 }
953 } else if ( type == CLEANUP ) {
954 element.removeStyle( 'float' );
955 }
956 }
957 } ]
958 } ]
959 },
960 {
961 type: 'vbox',
962 height: '250px',
963 children: [ {
964 type: 'html',
965 id: 'htmlPreview',
966 style: 'width:95%;',
967 html: '<div>' + CKEDITOR.tools.htmlEncode( editor.lang.common.preview ) + '<br>' +
968 '<div id="' + imagePreviewLoaderId + '" class="ImagePreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div>' +
969 '<div class="ImagePreviewBox"><table><tr><td>' +
970 '<a href="javascript:void(0)" target="_blank" onclick="return false;" id="' + previewLinkId + '">' +
971 '<img id="' + previewImageId + '" alt="" /></a>' +
972 // jscs:disable maximumLineLength
973 ( editor.config.image_previewText || 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. ' +
974 'Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, ' +
975 '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.' ) +
976 // jscs:enable maximumLineLength
977 '</td></tr></table></div></div>'
978 } ]
979 } ]
980 } ]
981 },
982 {
983 id: 'Link',
984 requiredContent: 'a[href]',
985 label: editor.lang.image.linkTab,
986 padding: 0,
987 elements: [ {
988 id: 'txtUrl',
989 type: 'text',
990 label: editor.lang.common.url,
991 style: 'width: 100%',
992 'default': '',
993 setup: function( type, element ) {
994 if ( type == LINK ) {
995 var href = element.data( 'cke-saved-href' );
996 if ( !href )
997 href = element.getAttribute( 'href' );
998 this.setValue( href );
999 }
1000 },
1001 commit: function( type, element ) {
1002 if ( type == LINK ) {
1003 if ( this.getValue() || this.isChanged() ) {
1004 var url = this.getValue();
1005 element.data( 'cke-saved-href', url );
1006 element.setAttribute( 'href', url );
1007
1008 if ( this.getValue() || !editor.config.image_removeLinkByEmptyURL )
1009 this.getDialog().addLink = true;
1010 else
1011 this.getDialog().addLink = false;
1012 }
1013 }
1014 }
1015 },
1016 {
1017 type: 'button',
1018 id: 'browse',
1019 className: 'cke_dialog_image_browse',
1020 filebrowser: {
1021 action: 'Browse',
1022 target: 'Link:txtUrl',
1023 url: editor.config.filebrowserImageBrowseLinkUrl
1024 },
1025 style: 'float:right',
1026 hidden: true,
1027 label: editor.lang.common.browseServer
1028 },
1029 {
1030 id: 'cmbTarget',
1031 type: 'select',
1032 requiredContent: 'a[target]',
1033 label: editor.lang.common.target,
1034 'default': '',
1035 items: [
1036 [ editor.lang.common.notSet, '' ],
1037 [ editor.lang.common.targetNew, '_blank' ],
1038 [ editor.lang.common.targetTop, '_top' ],
1039 [ editor.lang.common.targetSelf, '_self' ],
1040 [ editor.lang.common.targetParent, '_parent' ]
1041 ],
1042 setup: function( type, element ) {
1043 if ( type == LINK )
1044 this.setValue( element.getAttribute( 'target' ) || '' );
1045 },
1046 commit: function( type, element ) {
1047 if ( type == LINK ) {
1048 if ( this.getValue() || this.isChanged() )
1049 element.setAttribute( 'target', this.getValue() );
1050 }
1051 }
1052 } ]
1053 },
1054 {
1055 id: 'Upload',
1056 hidden: true,
1057 filebrowser: 'uploadButton',
1058 label: editor.lang.image.upload,
1059 elements: [ {
1060 type: 'file',
1061 id: 'upload',
1062 label: editor.lang.image.btnUpload,
1063 style: 'height:40px',
1064 size: 38
1065 },
1066 {
1067 type: 'fileButton',
1068 id: 'uploadButton',
1069 filebrowser: 'info:txtUrl',
1070 label: editor.lang.image.btnUpload,
1071 'for': [ 'Upload', 'upload' ]
1072 } ]
1073 },
1074 {
1075 id: 'advanced',
1076 label: editor.lang.common.advancedTab,
1077 elements: [ {
1078 type: 'hbox',
1079 widths: [ '50%', '25%', '25%' ],
1080 children: [ {
1081 type: 'text',
1082 id: 'linkId',
1083 requiredContent: 'img[id]',
1084 label: editor.lang.common.id,
1085 setup: function( type, element ) {
1086 if ( type == IMAGE )
1087 this.setValue( element.getAttribute( 'id' ) );
1088 },
1089 commit: function( type, element ) {
1090 if ( type == IMAGE ) {
1091 if ( this.getValue() || this.isChanged() )
1092 element.setAttribute( 'id', this.getValue() );
1093 }
1094 }
1095 },
1096 {
1097 id: 'cmbLangDir',
1098 type: 'select',
1099 requiredContent: 'img[dir]',
1100 style: 'width : 100px;',
1101 label: editor.lang.common.langDir,
1102 'default': '',
1103 items: [
1104 [ editor.lang.common.notSet, '' ],
1105 [ editor.lang.common.langDirLtr, 'ltr' ],
1106 [ editor.lang.common.langDirRtl, 'rtl' ]
1107 ],
1108 setup: function( type, element ) {
1109 if ( type == IMAGE )
1110 this.setValue( element.getAttribute( 'dir' ) );
1111 },
1112 commit: function( type, element ) {
1113 if ( type == IMAGE ) {
1114 if ( this.getValue() || this.isChanged() )
1115 element.setAttribute( 'dir', this.getValue() );
1116 }
1117 }
1118 },
1119 {
1120 type: 'text',
1121 id: 'txtLangCode',
1122 requiredContent: 'img[lang]',
1123 label: editor.lang.common.langCode,
1124 'default': '',
1125 setup: function( type, element ) {
1126 if ( type == IMAGE )
1127 this.setValue( element.getAttribute( 'lang' ) );
1128 },
1129 commit: function( type, element ) {
1130 if ( type == IMAGE ) {
1131 if ( this.getValue() || this.isChanged() )
1132 element.setAttribute( 'lang', this.getValue() );
1133 }
1134 }
1135 } ]
1136 },
1137 {
1138 type: 'text',
1139 id: 'txtGenLongDescr',
1140 requiredContent: 'img[longdesc]',
1141 label: editor.lang.common.longDescr,
1142 setup: function( type, element ) {
1143 if ( type == IMAGE )
1144 this.setValue( element.getAttribute( 'longDesc' ) );
1145 },
1146 commit: function( type, element ) {
1147 if ( type == IMAGE ) {
1148 if ( this.getValue() || this.isChanged() )
1149 element.setAttribute( 'longDesc', this.getValue() );
1150 }
1151 }
1152 },
1153 {
1154 type: 'hbox',
1155 widths: [ '50%', '50%' ],
1156 children: [ {
1157 type: 'text',
1158 id: 'txtGenClass',
1159 requiredContent: 'img(cke-xyz)', // Random text like 'xyz' will check if all are allowed.
1160 label: editor.lang.common.cssClass,
1161 'default': '',
1162 setup: function( type, element ) {
1163 if ( type == IMAGE )
1164 this.setValue( element.getAttribute( 'class' ) );
1165 },
1166 commit: function( type, element ) {
1167 if ( type == IMAGE ) {
1168 if ( this.getValue() || this.isChanged() )
1169 element.setAttribute( 'class', this.getValue() );
1170 }
1171 }
1172 },
1173 {
1174 type: 'text',
1175 id: 'txtGenTitle',
1176 requiredContent: 'img[title]',
1177 label: editor.lang.common.advisoryTitle,
1178 'default': '',
1179 onChange: function() {
1180 updatePreview( this.getDialog() );
1181 },
1182 setup: function( type, element ) {
1183 if ( type == IMAGE )
1184 this.setValue( element.getAttribute( 'title' ) );
1185 },
1186 commit: function( type, element ) {
1187 if ( type == IMAGE ) {
1188 if ( this.getValue() || this.isChanged() )
1189 element.setAttribute( 'title', this.getValue() );
1190 } else if ( type == PREVIEW )
1191 element.setAttribute( 'title', this.getValue() );
1192 else if ( type == CLEANUP ) {
1193 element.removeAttribute( 'title' );
1194 }
1195 }
1196 } ]
1197 },
1198 {
1199 type: 'text',
1200 id: 'txtdlgGenStyle',
1201 requiredContent: 'img{cke-xyz}', // Random text like 'xyz' will check if all are allowed.
1202 label: editor.lang.common.cssStyle,
1203 validate: CKEDITOR.dialog.validate.inlineStyle( editor.lang.common.invalidInlineStyle ),
1204 'default': '',
1205 setup: function( type, element ) {
1206 if ( type == IMAGE ) {
1207 var genStyle = element.getAttribute( 'style' );
1208 if ( !genStyle && element.$.style.cssText )
1209 genStyle = element.$.style.cssText;
1210 this.setValue( genStyle );
1211
1212 var height = element.$.style.height,
1213 width = element.$.style.width,
1214 aMatchH = ( height ? height : '' ).match( regexGetSize ),
1215 aMatchW = ( width ? width : '' ).match( regexGetSize );
1216
1217 this.attributesInStyle = {
1218 height: !!aMatchH,
1219 width: !!aMatchW
1220 };
1221 }
1222 },
1223 onChange: function() {
1224 commitInternally.call(
1225 this, [
1226 'info:cmbFloat',
1227 'info:cmbAlign',
1228 'info:txtVSpace',
1229 'info:txtHSpace',
1230 'info:txtBorder',
1231 'info:txtWidth',
1232 'info:txtHeight'
1233 ]
1234 );
1235 updatePreview( this );
1236 },
1237 commit: function( type, element ) {
1238 if ( type == IMAGE && ( this.getValue() || this.isChanged() ) )
1239 element.setAttribute( 'style', this.getValue() );
1240
1241 }
1242 } ]
1243 } ]
1244 };
1245 };
1246
1247 CKEDITOR.dialog.add( 'image', function( editor ) {
1248 return imageDialog( editor, 'image' );
1249 } );
1250
1251 CKEDITOR.dialog.add( 'imagebutton', function( editor ) {
1252 return imageDialog( editor, 'imagebutton' );
1253 } );
1254} )();
diff --git a/sources/plugins/image/icons/hidpi/image.png b/sources/plugins/image/icons/hidpi/image.png
new file mode 100644
index 0000000..d0f21ae
--- /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..8ea9725
--- /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..8cc5b5f
--- /dev/null
+++ b/sources/plugins/image/lang/af.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..a755b3e
--- /dev/null
+++ b/sources/plugins/image/lang/ar.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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/az.js b/sources/plugins/image/lang/az.js
new file mode 100644
index 0000000..79009fa
--- /dev/null
+++ b/sources/plugins/image/lang/az.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'image', 'az', {
6 alt: 'Alternativ mətn',
7 border: 'Sərhəd',
8 btnUpload: 'Serverə yüklə',
9 button2Img: 'Şəkil tipli düyməni şəklə çevirmək istədiyinizə əminsinizmi?',
10 hSpace: 'Üfüqi boşluq',
11 img2Button: 'Şəkli şəkil tipli düyməyə çevirmək istədiyinizə əminsinizmi?',
12 infoTab: 'Şəkil haqqında məlumat',
13 linkTab: 'Link',
14 lockRatio: 'Ölçülərin uyğunluğu saxla',
15 menu: 'Şəklin seçimləri',
16 resetSize: 'Ölçüləri qaytar',
17 title: 'Şəklin seçimləri',
18 titleButton: 'Şəkil tipli düyməsinin seçimləri',
19 upload: 'Serverə yüklə',
20 urlMissing: 'Şəklin ünvanı yanlışdır.',
21 vSpace: 'Şaquli boşluq',
22 validateBorder: 'Sərhədin eni rəqəm olmalıdır.',
23 validateHSpace: 'Üfüqi boşluq rəqəm olmalıdır.',
24 validateVSpace: 'Şaquli boşluq rəqəm olmalıdır.'
25} );
diff --git a/sources/plugins/image/lang/bg.js b/sources/plugins/image/lang/bg.js
new file mode 100644
index 0000000..6c0b064
--- /dev/null
+++ b/sources/plugins/image/lang/bg.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..bbecfc6
--- /dev/null
+++ b/sources/plugins/image/lang/bn.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..06dd8bf
--- /dev/null
+++ b/sources/plugins/image/lang/bs.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..858013e
--- /dev/null
+++ b/sources/plugins/image/lang/ca.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..a18a753
--- /dev/null
+++ b/sources/plugins/image/lang/cs.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..7407310
--- /dev/null
+++ b/sources/plugins/image/lang/cy.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..bec69ba
--- /dev/null
+++ b/sources/plugins/image/lang/da.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..6ba1570
--- /dev/null
+++ b/sources/plugins/image/lang/de-ch.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..a391934
--- /dev/null
+++ b/sources/plugins/image/lang/de.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..3453c3d
--- /dev/null
+++ b/sources/plugins/image/lang/el.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..dba29c7
--- /dev/null
+++ b/sources/plugins/image/lang/en-au.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..e78f83e
--- /dev/null
+++ b/sources/plugins/image/lang/en-ca.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..dcf335e
--- /dev/null
+++ b/sources/plugins/image/lang/en-gb.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..4d0f50b
--- /dev/null
+++ b/sources/plugins/image/lang/en.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..276ef33
--- /dev/null
+++ b/sources/plugins/image/lang/eo.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..1302a19
--- /dev/null
+++ b/sources/plugins/image/lang/es.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..4c7153a
--- /dev/null
+++ b/sources/plugins/image/lang/et.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..52f8289
--- /dev/null
+++ b/sources/plugins/image/lang/eu.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..6628e99
--- /dev/null
+++ b/sources/plugins/image/lang/fa.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..665b615
--- /dev/null
+++ b/sources/plugins/image/lang/fi.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..8332a38
--- /dev/null
+++ b/sources/plugins/image/lang/fo.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..644a9f3
--- /dev/null
+++ b/sources/plugins/image/lang/fr-ca.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..299c379
--- /dev/null
+++ b/sources/plugins/image/lang/fr.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'image', 'fr', {
6 alt: 'Texte alternatif',
7 border: 'Bordure',
8 btnUpload: 'Envoyer sur le serveur',
9 button2Img: 'Voulez-vous transformer le bouton avec image sélectionné en simple image ?',
10 hSpace: 'Espacement horizontal',
11 img2Button: 'Voulez-vous transformer l\'image sélectionnée en bouton avec 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: 'Réinitialiser la taille',
17 title: 'Propriétés de l\'image',
18 titleButton: 'Propriétés du bouton avec image',
19 upload: 'Téléverser',
20 urlMissing: 'L\'URL source de l\'image est manquante.',
21 vSpace: 'Espacement vertical',
22 validateBorder: 'La bordure doit être un nombre entier.',
23 validateHSpace: 'L\'espacement horizontal doit être un nombre entier.',
24 validateVSpace: 'L\'espacement vertical doit être un nombre entier.'
25} );
diff --git a/sources/plugins/image/lang/gl.js b/sources/plugins/image/lang/gl.js
new file mode 100644
index 0000000..ba632b8
--- /dev/null
+++ b/sources/plugins/image/lang/gl.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..f70ae28
--- /dev/null
+++ b/sources/plugins/image/lang/gu.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..41f207a
--- /dev/null
+++ b/sources/plugins/image/lang/he.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..d4604b3
--- /dev/null
+++ b/sources/plugins/image/lang/hi.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..8c272eb
--- /dev/null
+++ b/sources/plugins/image/lang/hr.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..5a9e990
--- /dev/null
+++ b/sources/plugins/image/lang/hu.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..8d27ad6
--- /dev/null
+++ b/sources/plugins/image/lang/id.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..fc02308
--- /dev/null
+++ b/sources/plugins/image/lang/is.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..7b066ca
--- /dev/null
+++ b/sources/plugins/image/lang/it.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..a2d500c
--- /dev/null
+++ b/sources/plugins/image/lang/ja.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..0a634f0
--- /dev/null
+++ b/sources/plugins/image/lang/ka.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..d60562a
--- /dev/null
+++ b/sources/plugins/image/lang/km.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..75e5252
--- /dev/null
+++ b/sources/plugins/image/lang/ko.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..2b70145
--- /dev/null
+++ b/sources/plugins/image/lang/ku.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..2343934
--- /dev/null
+++ b/sources/plugins/image/lang/lt.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..cf20166
--- /dev/null
+++ b/sources/plugins/image/lang/lv.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..9dd01cc
--- /dev/null
+++ b/sources/plugins/image/lang/mk.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..4daf38a
--- /dev/null
+++ b/sources/plugins/image/lang/mn.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..28511d0
--- /dev/null
+++ b/sources/plugins/image/lang/ms.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..87208af
--- /dev/null
+++ b/sources/plugins/image/lang/nb.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..bbe4943
--- /dev/null
+++ b/sources/plugins/image/lang/nl.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..9d4898a
--- /dev/null
+++ b/sources/plugins/image/lang/no.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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/oc.js b/sources/plugins/image/lang/oc.js
new file mode 100644
index 0000000..fa595c6
--- /dev/null
+++ b/sources/plugins/image/lang/oc.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'image', 'oc', {
6 alt: 'Tèxte alternatiu',
7 border: 'Bordadura',
8 btnUpload: 'Mandar sul servidor',
9 button2Img: 'Volètz transformar lo boton amb imatge seleccionat en imatge simple ?',
10 hSpace: 'Espaçament orizontal',
11 img2Button: 'Volètz transformar l\'imatge seleccionat en boton amb imatge ?',
12 infoTab: 'Informacions sus l\'imatge',
13 linkTab: 'Ligam',
14 lockRatio: 'Conservar las proporcions',
15 menu: 'Proprietats de l\'imatge',
16 resetSize: 'Reïnicializar la talha',
17 title: 'Proprietats de l\'imatge',
18 titleButton: 'Proprietats del boton amb imatge',
19 upload: 'Mandar',
20 urlMissing: 'L\'URL font de l\'imatge es mancanta.',
21 vSpace: 'Espaçament vertical',
22 validateBorder: 'La bordadura deu èsser un nombre entièr.',
23 validateHSpace: 'L\'espaçament orizontal deu èsser un nombre entièr.',
24 validateVSpace: 'L\'espaçament vertical deu èsser un nombre entièr.'
25} );
diff --git a/sources/plugins/image/lang/pl.js b/sources/plugins/image/lang/pl.js
new file mode 100644
index 0000000..93afb85
--- /dev/null
+++ b/sources/plugins/image/lang/pl.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..0d13a9a
--- /dev/null
+++ b/sources/plugins/image/lang/pt-br.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..2b8f50c
--- /dev/null
+++ b/sources/plugins/image/lang/pt.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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 imagem',
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..067dee2
--- /dev/null
+++ b/sources/plugins/image/lang/ro.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..cb937c9
--- /dev/null
+++ b/sources/plugins/image/lang/ru.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..84cbace
--- /dev/null
+++ b/sources/plugins/image/lang/si.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..38bc38a
--- /dev/null
+++ b/sources/plugins/image/lang/sk.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..29c440f
--- /dev/null
+++ b/sources/plugins/image/lang/sl.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'image', 'sl', {
6 alt: 'Nadomestno besedilo',
7 border: 'Obroba',
8 btnUpload: 'Pošlji na strežnik',
9 button2Img: 'Želite pretvoriti izbrani gumb s sliko v preprosto sliko?',
10 hSpace: 'Vodoravni odmik',
11 img2Button: 'Želite 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: 'Naloži',
20 urlMissing: 'Manjka URL vira slike.',
21 vSpace: 'Navpični odmik',
22 validateBorder: 'Meja mora biti celo število.',
23 validateHSpace: 'Vodoravni odmik 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..072a96d
--- /dev/null
+++ b/sources/plugins/image/lang/sq.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..b3c2a98
--- /dev/null
+++ b/sources/plugins/image/lang/sr-latn.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..4a269d9
--- /dev/null
+++ b/sources/plugins/image/lang/sr.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..db07c37
--- /dev/null
+++ b/sources/plugins/image/lang/sv.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..0d33bb3
--- /dev/null
+++ b/sources/plugins/image/lang/th.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..2f707a1
--- /dev/null
+++ b/sources/plugins/image/lang/tr.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..e659066
--- /dev/null
+++ b/sources/plugins/image/lang/tt.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..d2a28ef
--- /dev/null
+++ b/sources/plugins/image/lang/ug.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..ace2eea
--- /dev/null
+++ b/sources/plugins/image/lang/uk.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..4c33fd5
--- /dev/null
+++ b/sources/plugins/image/lang/vi.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..287a362
--- /dev/null
+++ b/sources/plugins/image/lang/zh-cn.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..920b554
--- /dev/null
+++ b/sources/plugins/image/lang/zh.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.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..1394510
--- /dev/null
+++ b/sources/plugins/image/plugin.js
@@ -0,0 +1,183 @@
1/**
2 * @license Copyright (c) 2003-2017, 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,az,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,oc,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 */
174CKEDITOR.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 */