aboutsummaryrefslogtreecommitdiff
path: root/sources/plugins/image
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2016-01-25 17:45:33 +0100
committerIsmaël Bouya <ismael.bouya@normalesup.org>2016-01-25 18:00:33 +0100
commit7adcb81e4f83f98c468889aaa5a85558ba88c770 (patch)
tree0d6ede733777b29060b48df4afaa2c64bfbae276 /sources/plugins/image
downloadconnexionswing-ckeditor-component-7adcb81e4f83f98c468889aaa5a85558ba88c770.tar.gz
connexionswing-ckeditor-component-7adcb81e4f83f98c468889aaa5a85558ba88c770.tar.zst
connexionswing-ckeditor-component-7adcb81e4f83f98c468889aaa5a85558ba88c770.zip
Initial commit4.5.6
Diffstat (limited to 'sources/plugins/image')
-rw-r--r--sources/plugins/image/dialogs/image.js1251
-rw-r--r--sources/plugins/image/icons/hidpi/image.pngbin0 -> 1745 bytes
-rw-r--r--sources/plugins/image/icons/image.pngbin0 -> 756 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/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.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/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
71 files changed, 3084 insertions, 0 deletions
diff --git a/sources/plugins/image/dialogs/image.js b/sources/plugins/image/dialogs/image.js
new file mode 100644
index 00000000..7daf4aa3
--- /dev/null
+++ b/sources/plugins/image/dialogs/image.js
@@ -0,0 +1,1251 @@
1/**
2 * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3 * For licensing, see LICENSE.md or http://ckeditor.com/license
4 */
5
6( function() {
7 var imageDialog = function( editor, dialogType ) {
8 // Load image preview.
9 var IMAGE = 1,
10 LINK = 2,
11 PREVIEW = 4,
12 CLEANUP = 8,
13 regexGetSize = /^\s*(\d+)((px)|\%)?\s*$/i,
14 regexGetSizeOrEmpty = /(^\s*(\d+)((px)|\%)?\s*$)|^$/i,
15 pxLengthRegex = /^\d+px$/;
16
17 var onSizeChange = function() {
18 var value = this.getValue(),
19 // This = input element.
20 dialog = this.getDialog(),
21 aMatch = value.match( regexGetSize ); // Check value
22 if ( aMatch ) {
23 if ( aMatch[ 2 ] == '%' ) // % is allowed - > unlock ratio.
24 switchLockRatio( dialog, false ); // Unlock.
25 value = aMatch[ 1 ];
26 }
27
28 // Only if ratio is locked
29 if ( dialog.lockRatio ) {
30 var oImageOriginal = dialog.originalElement;
31 if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' ) {
32 if ( this.id == 'txtHeight' ) {
33 if ( value && value != '0' )
34 value = Math.round( oImageOriginal.$.width * ( value / oImageOriginal.$.height ) );
35 if ( !isNaN( value ) )
36 dialog.setValueOf( 'info', 'txtWidth', value );
37 }
38 // this.id = txtWidth.
39 else {
40 if ( value && value != '0' )
41 value = Math.round( oImageOriginal.$.height * ( value / oImageOriginal.$.width ) );
42 if ( !isNaN( value ) )
43 dialog.setValueOf( 'info', 'txtHeight', value );
44 }
45 }
46 }
47 updatePreview( dialog );
48 };
49
50 var updatePreview = function( dialog ) {
51 //Don't load before onShow.
52 if ( !dialog.originalElement || !dialog.preview )
53 return 1;
54
55 // Read attributes and update imagePreview;
56 dialog.commitContent( PREVIEW, dialog.preview );
57 return 0;
58 };
59
60 // Custom commit dialog logic, where we're intended to give inline style
61 // field (txtdlgGenStyle) higher priority to avoid overwriting styles contribute
62 // by other fields.
63 function commitContent() {
64 var args = arguments;
65 var inlineStyleField = this.getContentElement( 'advanced', 'txtdlgGenStyle' );
66 inlineStyleField && inlineStyleField.commit.apply( inlineStyleField, args );
67
68 this.foreach( function( widget ) {
69 if ( widget.commit && widget.id != 'txtdlgGenStyle' )
70 widget.commit.apply( widget, args );
71 } );
72 }
73
74 // Avoid recursions.
75 var incommit;
76
77 // Synchronous field values to other impacted fields is required, e.g. border
78 // size change should alter inline-style text as well.
79 function commitInternally( targetFields ) {
80 if ( incommit )
81 return;
82
83 incommit = 1;
84
85 var dialog = this.getDialog(),
86 element = dialog.imageElement;
87 if ( element ) {
88 // Commit this field and broadcast to target fields.
89 this.commit( IMAGE, element );
90
91 targetFields = [].concat( targetFields );
92 var length = targetFields.length,
93 field;
94 for ( var i = 0; i < length; i++ ) {
95 field = dialog.getContentElement.apply( dialog, targetFields[ i ].split( ':' ) );
96 // May cause recursion.
97 field && field.setup( IMAGE, element );
98 }
99 }
100
101 incommit = 0;
102 }
103
104 var switchLockRatio = function( dialog, value ) {
105 if ( !dialog.getContentElement( 'info', 'ratioLock' ) )
106 return null;
107
108 var oImageOriginal = dialog.originalElement;
109
110 // Dialog may already closed. (#5505)
111 if ( !oImageOriginal )
112 return null;
113
114 // Check image ratio and original image ratio, but respecting user's preference.
115 if ( value == 'check' ) {
116 if ( !dialog.userlockRatio && oImageOriginal.getCustomData( 'isReady' ) == 'true' ) {
117 var width = dialog.getValueOf( 'info', 'txtWidth' ),
118 height = dialog.getValueOf( 'info', 'txtHeight' ),
119 originalRatio = oImageOriginal.$.width * 1000 / oImageOriginal.$.height,
120 thisRatio = width * 1000 / height;
121 dialog.lockRatio = false; // Default: unlock ratio
122
123 if ( !width && !height )
124 dialog.lockRatio = true;
125 else if ( !isNaN( originalRatio ) && !isNaN( thisRatio ) ) {
126 if ( Math.round( originalRatio ) == Math.round( thisRatio ) )
127 dialog.lockRatio = true;
128 }
129 }
130 } else if ( value !== undefined )
131 dialog.lockRatio = value;
132 else {
133 dialog.userlockRatio = 1;
134 dialog.lockRatio = !dialog.lockRatio;
135 }
136
137 var ratioButton = CKEDITOR.document.getById( btnLockSizesId );
138 if ( dialog.lockRatio )
139 ratioButton.removeClass( 'cke_btn_unlocked' );
140 else
141 ratioButton.addClass( 'cke_btn_unlocked' );
142
143 ratioButton.setAttribute( 'aria-checked', dialog.lockRatio );
144
145 // Ratio button hc presentation - WHITE SQUARE / BLACK SQUARE
146 if ( CKEDITOR.env.hc ) {
147 var icon = ratioButton.getChild( 0 );
148 icon.setHtml( dialog.lockRatio ? CKEDITOR.env.ie ? '\u25A0' : '\u25A3' : CKEDITOR.env.ie ? '\u25A1' : '\u25A2' );
149 }
150
151 return dialog.lockRatio;
152 };
153
154 var resetSize = function( dialog, emptyValues ) {
155 var oImageOriginal = dialog.originalElement,
156 ready = oImageOriginal.getCustomData( 'isReady' ) == 'true';
157
158 if ( ready ) {
159 var widthField = dialog.getContentElement( 'info', 'txtWidth' ),
160 heightField = dialog.getContentElement( 'info', 'txtHeight' ),
161 widthValue, heightValue;
162
163 if ( emptyValues ) {
164 widthValue = 0;
165 heightValue = 0;
166 } else {
167 widthValue = oImageOriginal.$.width;
168 heightValue = oImageOriginal.$.height;
169 }
170
171 widthField && widthField.setValue( widthValue );
172 heightField && heightField.setValue( heightValue );
173 }
174 updatePreview( dialog );
175 };
176
177 var setupDimension = function( type, element ) {
178 if ( type != IMAGE )
179 return;
180
181 function checkDimension( size, defaultValue ) {
182 var aMatch = size.match( regexGetSize );
183 if ( aMatch ) {
184 // % is allowed.
185 if ( aMatch[ 2 ] == '%' ) {
186 aMatch[ 1 ] += '%';
187 switchLockRatio( dialog, false ); // Unlock ratio
188 }
189 return aMatch[ 1 ];
190 }
191 return defaultValue;
192 }
193
194 var dialog = this.getDialog(),
195 value = '',
196 dimension = this.id == 'txtWidth' ? 'width' : 'height',
197 size = element.getAttribute( dimension );
198
199 if ( size )
200 value = checkDimension( size, value );
201 value = checkDimension( element.getStyle( dimension ), value );
202
203 this.setValue( value );
204 };
205
206 var previewPreloader;
207
208 var onImgLoadEvent = function() {
209 // Image is ready.
210 var original = this.originalElement,
211 loader = CKEDITOR.document.getById( imagePreviewLoaderId );
212
213 original.setCustomData( 'isReady', 'true' );
214 original.removeListener( 'load', onImgLoadEvent );
215 original.removeListener( 'error', onImgLoadErrorEvent );
216 original.removeListener( 'abort', onImgLoadErrorEvent );
217
218 // Hide loader.
219 if ( loader )
220 loader.setStyle( 'display', 'none' );
221
222 // New image -> new dimensions
223 if ( !this.dontResetSize ) {
224 resetSize( this, editor.config.image_prefillDimensions === false );
225 }
226
227 if ( this.firstLoad ) {
228 CKEDITOR.tools.setTimeout( function() {
229 switchLockRatio( this, 'check' );
230 }, 0, this );
231 }
232
233 this.firstLoad = false;
234 this.dontResetSize = false;
235
236 // Possible fix for #12818.
237 updatePreview( this );
238 };
239
240 var onImgLoadErrorEvent = function() {
241 // Error. Image is not loaded.
242 var original = this.originalElement,
243 loader = CKEDITOR.document.getById( imagePreviewLoaderId );
244
245 original.removeListener( 'load', onImgLoadEvent );
246 original.removeListener( 'error', onImgLoadErrorEvent );
247 original.removeListener( 'abort', onImgLoadErrorEvent );
248
249 // Set Error image.
250 var noimage = CKEDITOR.getUrl( CKEDITOR.plugins.get( 'image' ).path + 'images/noimage.png' );
251
252 if ( this.preview )
253 this.preview.setAttribute( 'src', noimage );
254
255 // Hide loader.
256 if ( loader )
257 loader.setStyle( 'display', 'none' );
258
259 switchLockRatio( this, false ); // Unlock.
260 };
261
262 var numbering = function( id ) {
263 return CKEDITOR.tools.getNextId() + '_' + id;
264 },
265 btnLockSizesId = numbering( 'btnLockSizes' ),
266 btnResetSizeId = numbering( 'btnResetSize' ),
267 imagePreviewLoaderId = numbering( 'ImagePreviewLoader' ),
268 previewLinkId = numbering( 'previewLink' ),
269 previewImageId = numbering( 'previewImage' );
270
271 return {
272 title: editor.lang.image[ dialogType == 'image' ? 'title' : 'titleButton' ],
273 minWidth: 420,
274 minHeight: 360,
275 onShow: function() {
276 this.imageElement = false;
277 this.linkElement = false;
278
279 // Default: create a new element.
280 this.imageEditMode = false;
281 this.linkEditMode = false;
282
283 this.lockRatio = true;
284 this.userlockRatio = 0;
285 this.dontResetSize = false;
286 this.firstLoad = true;
287 this.addLink = false;
288
289 var editor = this.getParentEditor(),
290 sel = editor.getSelection(),
291 element = sel && sel.getSelectedElement(),
292 link = element && editor.elementPath( element ).contains( 'a', 1 ),
293 loader = CKEDITOR.document.getById( imagePreviewLoaderId );
294
295 // Hide loader.
296 if ( loader )
297 loader.setStyle( 'display', 'none' );
298
299 // Create the preview before setup the dialog contents.
300 previewPreloader = new CKEDITOR.dom.element( 'img', editor.document );
301 this.preview = CKEDITOR.document.getById( previewImageId );
302
303 // Copy of the image
304 this.originalElement = editor.document.createElement( 'img' );
305 this.originalElement.setAttribute( 'alt', '' );
306 this.originalElement.setCustomData( 'isReady', 'false' );
307
308 if ( link ) {
309 this.linkElement = link;
310 this.linkEditMode = true;
311
312 // If there is an existing link, by default keep it (true).
313 // It will be removed if certain conditions are met and Link tab is enabled. (#13351)
314 this.addLink = true;
315
316 // Look for Image element.
317 var linkChildren = link.getChildren();
318 if ( linkChildren.count() == 1 ) {
319 var childTag = linkChildren.getItem( 0 );
320
321 if ( childTag.type == CKEDITOR.NODE_ELEMENT ) {
322 if ( childTag.is( 'img' ) || childTag.is( 'input' ) ) {
323 this.imageElement = linkChildren.getItem( 0 );
324 if ( this.imageElement.is( 'img' ) )
325 this.imageEditMode = 'img';
326 else if ( this.imageElement.is( 'input' ) )
327 this.imageEditMode = 'input';
328 }
329 }
330 }
331 // Fill out all fields.
332 if ( dialogType == 'image' )
333 this.setupContent( LINK, link );
334 }
335
336 // Edit given image element instead the one from selection.
337 if ( this.customImageElement ) {
338 this.imageEditMode = 'img';
339 this.imageElement = this.customImageElement;
340 delete this.customImageElement;
341 }
342 else if ( element && element.getName() == 'img' && !element.data( 'cke-realelement' ) ||
343 element && element.getName() == 'input' && element.getAttribute( 'type' ) == 'image' ) {
344 this.imageEditMode = element.getName();
345 this.imageElement = element;
346 }
347
348 if ( this.imageEditMode ) {
349 // Use the original element as a buffer from since we don't want
350 // temporary changes to be committed, e.g. if the dialog is canceled.
351 this.cleanImageElement = this.imageElement;
352 this.imageElement = this.cleanImageElement.clone( true, true );
353
354 // Fill out all fields.
355 this.setupContent( IMAGE, this.imageElement );
356 }
357
358 // Refresh LockRatio button
359 switchLockRatio( this, true );
360
361 // Dont show preview if no URL given.
362 if ( !CKEDITOR.tools.trim( this.getValueOf( 'info', 'txtUrl' ) ) ) {
363 this.preview.removeAttribute( 'src' );
364 this.preview.setStyle( 'display', 'none' );
365 }
366 },
367 onOk: function() {
368 // Edit existing Image.
369 if ( this.imageEditMode ) {
370 var imgTagName = this.imageEditMode;
371
372 // Image dialog and Input element.
373 if ( dialogType == 'image' && imgTagName == 'input' && confirm( editor.lang.image.button2Img ) ) { // jshint ignore:line
374 // Replace INPUT-> IMG
375 imgTagName = 'img';
376 this.imageElement = editor.document.createElement( 'img' );
377 this.imageElement.setAttribute( 'alt', '' );
378 editor.insertElement( this.imageElement );
379 }
380 // ImageButton dialog and Image element.
381 else if ( dialogType != 'image' && imgTagName == 'img' && confirm( editor.lang.image.img2Button ) ) { // jshint ignore:line
382 // Replace IMG -> INPUT
383 imgTagName = 'input';
384 this.imageElement = editor.document.createElement( 'input' );
385 this.imageElement.setAttributes( {
386 type: 'image',
387 alt: ''
388 } );
389 editor.insertElement( this.imageElement );
390 } else {
391 // Restore the original element before all commits.
392 this.imageElement = this.cleanImageElement;
393 delete this.cleanImageElement;
394 }
395 }
396 // Create a new image.
397 else {
398 // Image dialog -> create IMG element.
399 if ( dialogType == 'image' )
400 this.imageElement = editor.document.createElement( 'img' );
401 else {
402 this.imageElement = editor.document.createElement( 'input' );
403 this.imageElement.setAttribute( 'type', 'image' );
404 }
405 this.imageElement.setAttribute( 'alt', '' );
406 }
407
408 // Create a new link.
409 if ( !this.linkEditMode )
410 this.linkElement = editor.document.createElement( 'a' );
411
412 // Set attributes.
413 this.commitContent( IMAGE, this.imageElement );
414 this.commitContent( LINK, this.linkElement );
415
416 // Remove empty style attribute.
417 if ( !this.imageElement.getAttribute( 'style' ) )
418 this.imageElement.removeAttribute( 'style' );
419
420 // Insert a new Image.
421 if ( !this.imageEditMode ) {
422 if ( this.addLink ) {
423 if ( !this.linkEditMode ) {
424 // Insert a new link.
425 editor.insertElement( this.linkElement );
426 this.linkElement.append( this.imageElement, false );
427 } else {
428 // We already have a link in editor.
429 if ( this.linkElement.equals( editor.getSelection().getSelectedElement() ) ) {
430 // If the link is selected outside, replace it's content rather than the link itself. ([<a>foo</a>])
431 this.linkElement.setHtml( '' );
432 this.linkElement.append( this.imageElement, false );
433 } else {
434 // Only inside of the link is selected, so replace it with image. (<a>[foo]</a>, <a>[f]oo</a>)
435 editor.insertElement( this.imageElement );
436 }
437 }
438 } else {
439 editor.insertElement( this.imageElement );
440 }
441 }
442 // Image already exists.
443 else {
444 // Add a new link element.
445 if ( !this.linkEditMode && this.addLink ) {
446 editor.insertElement( this.linkElement );
447 this.imageElement.appendTo( this.linkElement );
448 }
449 // Remove Link, Image exists.
450 else if ( this.linkEditMode && !this.addLink ) {
451 editor.getSelection().selectElement( this.linkElement );
452 editor.insertElement( this.imageElement );
453 }
454 }
455 },
456 onLoad: function() {
457 if ( dialogType != 'image' )
458 this.hidePage( 'Link' ); //Hide Link tab.
459 var doc = this._.element.getDocument();
460
461 if ( this.getContentElement( 'info', 'ratioLock' ) ) {
462 this.addFocusable( doc.getById( btnResetSizeId ), 5 );
463 this.addFocusable( doc.getById( btnLockSizesId ), 5 );
464 }
465
466 this.commitContent = commitContent;
467 },
468 onHide: function() {
469 if ( this.preview )
470 this.commitContent( CLEANUP, this.preview );
471
472 if ( this.originalElement ) {
473 this.originalElement.removeListener( 'load', onImgLoadEvent );
474 this.originalElement.removeListener( 'error', onImgLoadErrorEvent );
475 this.originalElement.removeListener( 'abort', onImgLoadErrorEvent );
476 this.originalElement.remove();
477 this.originalElement = false; // Dialog is closed.
478 }
479
480 delete this.imageElement;
481 },
482 contents: [ {
483 id: 'info',
484 label: editor.lang.image.infoTab,
485 accessKey: 'I',
486 elements: [ {
487 type: 'vbox',
488 padding: 0,
489 children: [ {
490 type: 'hbox',
491 widths: [ '280px', '110px' ],
492 align: 'right',
493 children: [ {
494 id: 'txtUrl',
495 type: 'text',
496 label: editor.lang.common.url,
497 required: true,
498 onChange: function() {
499 var dialog = this.getDialog(),
500 newUrl = this.getValue();
501
502 // Update original image.
503 // Prevent from load before onShow.
504 if ( newUrl.length > 0 ) {
505 dialog = this.getDialog();
506 var original = dialog.originalElement;
507
508 if ( dialog.preview ) {
509 dialog.preview.removeStyle( 'display' );
510 }
511
512 original.setCustomData( 'isReady', 'false' );
513 // Show loader.
514 var loader = CKEDITOR.document.getById( imagePreviewLoaderId );
515 if ( loader )
516 loader.setStyle( 'display', '' );
517
518 original.on( 'load', onImgLoadEvent, dialog );
519 original.on( 'error', onImgLoadErrorEvent, dialog );
520 original.on( 'abort', onImgLoadErrorEvent, dialog );
521 original.setAttribute( 'src', newUrl );
522
523 if ( dialog.preview ) {
524 // Query the preloader to figure out the url impacted by based href.
525 previewPreloader.setAttribute( 'src', newUrl );
526 dialog.preview.setAttribute( 'src', previewPreloader.$.src );
527 updatePreview( dialog );
528 }
529 }
530 // Dont show preview if no URL given.
531 else if ( dialog.preview ) {
532 dialog.preview.removeAttribute( 'src' );
533 dialog.preview.setStyle( 'display', 'none' );
534 }
535 },
536 setup: function( type, element ) {
537 if ( type == IMAGE ) {
538 var url = element.data( 'cke-saved-src' ) || element.getAttribute( 'src' );
539 var field = this;
540
541 this.getDialog().dontResetSize = true;
542
543 field.setValue( url ); // And call this.onChange()
544 // Manually set the initial value.(#4191)
545 field.setInitValue();
546 }
547 },
548 commit: function( type, element ) {
549 if ( type == IMAGE && ( this.getValue() || this.isChanged() ) ) {
550 element.data( 'cke-saved-src', this.getValue() );
551 element.setAttribute( 'src', this.getValue() );
552 } else if ( type == CLEANUP ) {
553 element.setAttribute( 'src', '' ); // If removeAttribute doesn't work.
554 element.removeAttribute( 'src' );
555 }
556 },
557 validate: CKEDITOR.dialog.validate.notEmpty( editor.lang.image.urlMissing )
558 },
559 {
560 type: 'button',
561 id: 'browse',
562 // v-align with the 'txtUrl' field.
563 // TODO: We need something better than a fixed size here.
564 style: 'display:inline-block;margin-top:14px;',
565 align: 'center',
566 label: editor.lang.common.browseServer,
567 hidden: true,
568 filebrowser: 'info:txtUrl'
569 } ]
570 } ]
571 },
572 {
573 id: 'txtAlt',
574 type: 'text',
575 label: editor.lang.image.alt,
576 accessKey: 'T',
577 'default': '',
578 onChange: function() {
579 updatePreview( this.getDialog() );
580 },
581 setup: function( type, element ) {
582 if ( type == IMAGE )
583 this.setValue( element.getAttribute( 'alt' ) );
584 },
585 commit: function( type, element ) {
586 if ( type == IMAGE ) {
587 if ( this.getValue() || this.isChanged() )
588 element.setAttribute( 'alt', this.getValue() );
589 } else if ( type == PREVIEW )
590 element.setAttribute( 'alt', this.getValue() );
591 else if ( type == CLEANUP ) {
592 element.removeAttribute( 'alt' );
593 }
594
595 }
596 },
597 {
598 type: 'hbox',
599 children: [ {
600 id: 'basic',
601 type: 'vbox',
602 children: [ {
603 type: 'hbox',
604 requiredContent: 'img{width,height}',
605 widths: [ '50%', '50%' ],
606 children: [ {
607 type: 'vbox',
608 padding: 1,
609 children: [ {
610 type: 'text',
611 width: '45px',
612 id: 'txtWidth',
613 label: editor.lang.common.width,
614 onKeyUp: onSizeChange,
615 onChange: function() {
616 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
617 },
618 validate: function() {
619 var aMatch = this.getValue().match( regexGetSizeOrEmpty ),
620 isValid = !!( aMatch && parseInt( aMatch[ 1 ], 10 ) !== 0 );
621 if ( !isValid )
622 alert( editor.lang.common.invalidWidth ); // jshint ignore:line
623 return isValid;
624 },
625 setup: setupDimension,
626 commit: function( type, element ) {
627 var value = this.getValue();
628 if ( type == IMAGE ) {
629 if ( value && editor.activeFilter.check( 'img{width,height}' ) )
630 element.setStyle( 'width', CKEDITOR.tools.cssLength( value ) );
631 else
632 element.removeStyle( 'width' );
633
634 element.removeAttribute( 'width' );
635 } else if ( type == PREVIEW ) {
636 var aMatch = value.match( regexGetSize );
637 if ( !aMatch ) {
638 var oImageOriginal = this.getDialog().originalElement;
639 if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )
640 element.setStyle( 'width', oImageOriginal.$.width + 'px' );
641 } else {
642 element.setStyle( 'width', CKEDITOR.tools.cssLength( value ) );
643 }
644 } else if ( type == CLEANUP ) {
645 element.removeAttribute( 'width' );
646 element.removeStyle( 'width' );
647 }
648 }
649 },
650 {
651 type: 'text',
652 id: 'txtHeight',
653 width: '45px',
654 label: editor.lang.common.height,
655 onKeyUp: onSizeChange,
656 onChange: function() {
657 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
658 },
659 validate: function() {
660 var aMatch = this.getValue().match( regexGetSizeOrEmpty ),
661 isValid = !!( aMatch && parseInt( aMatch[ 1 ], 10 ) !== 0 );
662 if ( !isValid )
663 alert( editor.lang.common.invalidHeight ); // jshint ignore:line
664 return isValid;
665 },
666 setup: setupDimension,
667 commit: function( type, element ) {
668 var value = this.getValue();
669 if ( type == IMAGE ) {
670 if ( value && editor.activeFilter.check( 'img{width,height}' ) )
671 element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) );
672 else
673 element.removeStyle( 'height' );
674
675 element.removeAttribute( 'height' );
676 } else if ( type == PREVIEW ) {
677 var aMatch = value.match( regexGetSize );
678 if ( !aMatch ) {
679 var oImageOriginal = this.getDialog().originalElement;
680 if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )
681 element.setStyle( 'height', oImageOriginal.$.height + 'px' );
682 } else {
683 element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) );
684 }
685 } else if ( type == CLEANUP ) {
686 element.removeAttribute( 'height' );
687 element.removeStyle( 'height' );
688 }
689 }
690 } ]
691 },
692 {
693 id: 'ratioLock',
694 type: 'html',
695 style: 'margin-top:30px;width:40px;height:40px;',
696 onLoad: function() {
697 // Activate Reset button
698 var resetButton = CKEDITOR.document.getById( btnResetSizeId ),
699 ratioButton = CKEDITOR.document.getById( btnLockSizesId );
700 if ( resetButton ) {
701 resetButton.on( 'click', function( evt ) {
702 resetSize( this );
703 evt.data && evt.data.preventDefault();
704 }, this.getDialog() );
705 resetButton.on( 'mouseover', function() {
706 this.addClass( 'cke_btn_over' );
707 }, resetButton );
708 resetButton.on( 'mouseout', function() {
709 this.removeClass( 'cke_btn_over' );
710 }, resetButton );
711 }
712 // Activate (Un)LockRatio button
713 if ( ratioButton ) {
714 ratioButton.on( 'click', function( evt ) {
715 switchLockRatio( this );
716
717 var oImageOriginal = this.originalElement,
718 width = this.getValueOf( 'info', 'txtWidth' );
719
720 if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' && width ) {
721 var height = oImageOriginal.$.height / oImageOriginal.$.width * width;
722 if ( !isNaN( height ) ) {
723 this.setValueOf( 'info', 'txtHeight', Math.round( height ) );
724 updatePreview( this );
725 }
726 }
727 evt.data && evt.data.preventDefault();
728 }, this.getDialog() );
729 ratioButton.on( 'mouseover', function() {
730 this.addClass( 'cke_btn_over' );
731 }, ratioButton );
732 ratioButton.on( 'mouseout', function() {
733 this.removeClass( 'cke_btn_over' );
734 }, ratioButton );
735 }
736 },
737 html: '<div>' +
738 '<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.lockRatio +
739 '" class="cke_btn_locked" id="' + btnLockSizesId + '" role="checkbox"><span class="cke_icon"></span><span class="cke_label">' + editor.lang.image.lockRatio + '</span></a>' +
740 '<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.resetSize +
741 '" class="cke_btn_reset" id="' + btnResetSizeId + '" role="button"><span class="cke_label">' + editor.lang.image.resetSize + '</span></a>' +
742 '</div>'
743 } ]
744 },
745 {
746 type: 'vbox',
747 padding: 1,
748 children: [ {
749 type: 'text',
750 id: 'txtBorder',
751 requiredContent: 'img{border-width}',
752 width: '60px',
753 label: editor.lang.image.border,
754 'default': '',
755 onKeyUp: function() {
756 updatePreview( this.getDialog() );
757 },
758 onChange: function() {
759 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
760 },
761 validate: CKEDITOR.dialog.validate.integer( editor.lang.image.validateBorder ),
762 setup: function( type, element ) {
763 if ( type == IMAGE ) {
764 var value,
765 borderStyle = element.getStyle( 'border-width' );
766 borderStyle = borderStyle && borderStyle.match( /^(\d+px)(?: \1 \1 \1)?$/ );
767 value = borderStyle && parseInt( borderStyle[ 1 ], 10 );
768 isNaN( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'border' ) );
769 this.setValue( value );
770 }
771 },
772 commit: function( type, element ) {
773 var value = parseInt( this.getValue(), 10 );
774 if ( type == IMAGE || type == PREVIEW ) {
775 if ( !isNaN( value ) ) {
776 element.setStyle( 'border-width', CKEDITOR.tools.cssLength( value ) );
777 element.setStyle( 'border-style', 'solid' );
778 } else if ( !value && this.isChanged() ) {
779 element.removeStyle( 'border' );
780 }
781
782 if ( type == IMAGE )
783 element.removeAttribute( 'border' );
784 } else if ( type == CLEANUP ) {
785 element.removeAttribute( 'border' );
786 element.removeStyle( 'border-width' );
787 element.removeStyle( 'border-style' );
788 element.removeStyle( 'border-color' );
789 }
790 }
791 },
792 {
793 type: 'text',
794 id: 'txtHSpace',
795 requiredContent: 'img{margin-left,margin-right}',
796 width: '60px',
797 label: editor.lang.image.hSpace,
798 'default': '',
799 onKeyUp: function() {
800 updatePreview( this.getDialog() );
801 },
802 onChange: function() {
803 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
804 },
805 validate: CKEDITOR.dialog.validate.integer( editor.lang.image.validateHSpace ),
806 setup: function( type, element ) {
807 if ( type == IMAGE ) {
808 var value, marginLeftPx, marginRightPx,
809 marginLeftStyle = element.getStyle( 'margin-left' ),
810 marginRightStyle = element.getStyle( 'margin-right' );
811
812 marginLeftStyle = marginLeftStyle && marginLeftStyle.match( pxLengthRegex );
813 marginRightStyle = marginRightStyle && marginRightStyle.match( pxLengthRegex );
814 marginLeftPx = parseInt( marginLeftStyle, 10 );
815 marginRightPx = parseInt( marginRightStyle, 10 );
816
817 value = ( marginLeftPx == marginRightPx ) && marginLeftPx;
818 isNaN( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'hspace' ) );
819
820 this.setValue( value );
821 }
822 },
823 commit: function( type, element ) {
824 var value = parseInt( this.getValue(), 10 );
825 if ( type == IMAGE || type == PREVIEW ) {
826 if ( !isNaN( value ) ) {
827 element.setStyle( 'margin-left', CKEDITOR.tools.cssLength( value ) );
828 element.setStyle( 'margin-right', CKEDITOR.tools.cssLength( value ) );
829 } else if ( !value && this.isChanged() ) {
830 element.removeStyle( 'margin-left' );
831 element.removeStyle( 'margin-right' );
832 }
833
834 if ( type == IMAGE )
835 element.removeAttribute( 'hspace' );
836 } else if ( type == CLEANUP ) {
837 element.removeAttribute( 'hspace' );
838 element.removeStyle( 'margin-left' );
839 element.removeStyle( 'margin-right' );
840 }
841 }
842 },
843 {
844 type: 'text',
845 id: 'txtVSpace',
846 requiredContent: 'img{margin-top,margin-bottom}',
847 width: '60px',
848 label: editor.lang.image.vSpace,
849 'default': '',
850 onKeyUp: function() {
851 updatePreview( this.getDialog() );
852 },
853 onChange: function() {
854 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
855 },
856 validate: CKEDITOR.dialog.validate.integer( editor.lang.image.validateVSpace ),
857 setup: function( type, element ) {
858 if ( type == IMAGE ) {
859 var value, marginTopPx, marginBottomPx,
860 marginTopStyle = element.getStyle( 'margin-top' ),
861 marginBottomStyle = element.getStyle( 'margin-bottom' );
862
863 marginTopStyle = marginTopStyle && marginTopStyle.match( pxLengthRegex );
864 marginBottomStyle = marginBottomStyle && marginBottomStyle.match( pxLengthRegex );
865 marginTopPx = parseInt( marginTopStyle, 10 );
866 marginBottomPx = parseInt( marginBottomStyle, 10 );
867
868 value = ( marginTopPx == marginBottomPx ) && marginTopPx;
869 isNaN( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'vspace' ) );
870 this.setValue( value );
871 }
872 },
873 commit: function( type, element ) {
874 var value = parseInt( this.getValue(), 10 );
875 if ( type == IMAGE || type == PREVIEW ) {
876 if ( !isNaN( value ) ) {
877 element.setStyle( 'margin-top', CKEDITOR.tools.cssLength( value ) );
878 element.setStyle( 'margin-bottom', CKEDITOR.tools.cssLength( value ) );
879 } else if ( !value && this.isChanged() ) {
880 element.removeStyle( 'margin-top' );
881 element.removeStyle( 'margin-bottom' );
882 }
883
884 if ( type == IMAGE )
885 element.removeAttribute( 'vspace' );
886 } else if ( type == CLEANUP ) {
887 element.removeAttribute( 'vspace' );
888 element.removeStyle( 'margin-top' );
889 element.removeStyle( 'margin-bottom' );
890 }
891 }
892 },
893 {
894 id: 'cmbAlign',
895 requiredContent: 'img{float}',
896 type: 'select',
897 widths: [ '35%', '65%' ],
898 style: 'width:90px',
899 label: editor.lang.common.align,
900 'default': '',
901 items: [
902 [ editor.lang.common.notSet, '' ],
903 [ editor.lang.common.alignLeft, 'left' ],
904 [ editor.lang.common.alignRight, 'right' ]
905 // Backward compatible with v2 on setup when specified as attribute value,
906 // while these values are no more available as select options.
907 // [ editor.lang.image.alignAbsBottom , 'absBottom'],
908 // [ editor.lang.image.alignAbsMiddle , 'absMiddle'],
909 // [ editor.lang.image.alignBaseline , 'baseline'],
910 // [ editor.lang.image.alignTextTop , 'text-top'],
911 // [ editor.lang.image.alignBottom , 'bottom'],
912 // [ editor.lang.image.alignMiddle , 'middle'],
913 // [ editor.lang.image.alignTop , 'top']
914 ],
915 onChange: function() {
916 updatePreview( this.getDialog() );
917 commitInternally.call( this, 'advanced:txtdlgGenStyle' );
918 },
919 setup: function( type, element ) {
920 if ( type == IMAGE ) {
921 var value = element.getStyle( 'float' );
922 switch ( value ) {
923 // Ignore those unrelated values.
924 case 'inherit':
925 case 'none':
926 value = '';
927 }
928
929 !value && ( value = ( element.getAttribute( 'align' ) || '' ).toLowerCase() );
930 this.setValue( value );
931 }
932 },
933 commit: function( type, element ) {
934 var value = this.getValue();
935 if ( type == IMAGE || type == PREVIEW ) {
936 if ( value )
937 element.setStyle( 'float', value );
938 else
939 element.removeStyle( 'float' );
940
941 if ( type == IMAGE ) {
942 value = ( element.getAttribute( 'align' ) || '' ).toLowerCase();
943 switch ( value ) {
944 // we should remove it only if it matches "left" or "right",
945 // otherwise leave it intact.
946 case 'left':
947 case 'right':
948 element.removeAttribute( 'align' );
949 }
950 }
951 } else if ( type == CLEANUP ) {
952 element.removeStyle( 'float' );
953 }
954 }
955 } ]
956 } ]
957 },
958 {
959 type: 'vbox',
960 height: '250px',
961 children: [ {
962 type: 'html',
963 id: 'htmlPreview',
964 style: 'width:95%;',
965 html: '<div>' + CKEDITOR.tools.htmlEncode( editor.lang.common.preview ) + '<br>' +
966 '<div id="' + imagePreviewLoaderId + '" class="ImagePreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div>' +
967 '<div class="ImagePreviewBox"><table><tr><td>' +
968 '<a href="javascript:void(0)" target="_blank" onclick="return false;" id="' + previewLinkId + '">' +
969 '<img id="' + previewImageId + '" alt="" /></a>' +
970 // jscs:disable maximumLineLength
971 ( editor.config.image_previewText || 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. ' +
972 'Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, ' +
973 'nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.' ) +
974 // jscs:enable maximumLineLength
975 '</td></tr></table></div></div>'
976 } ]
977 } ]
978 } ]
979 },
980 {
981 id: 'Link',
982 requiredContent: 'a[href]',
983 label: editor.lang.image.linkTab,
984 padding: 0,
985 elements: [ {
986 id: 'txtUrl',
987 type: 'text',
988 label: editor.lang.common.url,
989 style: 'width: 100%',
990 'default': '',
991 setup: function( type, element ) {
992 if ( type == LINK ) {
993 var href = element.data( 'cke-saved-href' );
994 if ( !href )
995 href = element.getAttribute( 'href' );
996 this.setValue( href );
997 }
998 },
999 commit: function( type, element ) {
1000 if ( type == LINK ) {
1001 if ( this.getValue() || this.isChanged() ) {
1002 var url = this.getValue();
1003 element.data( 'cke-saved-href', url );
1004 element.setAttribute( 'href', url );
1005
1006 if ( this.getValue() || !editor.config.image_removeLinkByEmptyURL )
1007 this.getDialog().addLink = true;
1008 else
1009 this.getDialog().addLink = false;
1010 }
1011 }
1012 }
1013 },
1014 {
1015 type: 'button',
1016 id: 'browse',
1017 filebrowser: {
1018 action: 'Browse',
1019 target: 'Link:txtUrl',
1020 url: editor.config.filebrowserImageBrowseLinkUrl
1021 },
1022 style: 'float:right',
1023 hidden: true,
1024 label: editor.lang.common.browseServer
1025 },
1026 {
1027 id: 'cmbTarget',
1028 type: 'select',
1029 requiredContent: 'a[target]',
1030 label: editor.lang.common.target,
1031 'default': '',
1032 items: [
1033 [ editor.lang.common.notSet, '' ],
1034 [ editor.lang.common.targetNew, '_blank' ],
1035 [ editor.lang.common.targetTop, '_top' ],
1036 [ editor.lang.common.targetSelf, '_self' ],
1037 [ editor.lang.common.targetParent, '_parent' ]
1038 ],
1039 setup: function( type, element ) {
1040 if ( type == LINK )
1041 this.setValue( element.getAttribute( 'target' ) || '' );
1042 },
1043 commit: function( type, element ) {
1044 if ( type == LINK ) {
1045 if ( this.getValue() || this.isChanged() )
1046 element.setAttribute( 'target', this.getValue() );
1047 }
1048 }
1049 } ]
1050 },
1051 {
1052 id: 'Upload',
1053 hidden: true,
1054 filebrowser: 'uploadButton',
1055 label: editor.lang.image.upload,
1056 elements: [ {
1057 type: 'file',
1058 id: 'upload',
1059 label: editor.lang.image.btnUpload,
1060 style: 'height:40px',
1061 size: 38
1062 },
1063 {
1064 type: 'fileButton',
1065 id: 'uploadButton',
1066 filebrowser: 'info:txtUrl',
1067 label: editor.lang.image.btnUpload,
1068 'for': [ 'Upload', 'upload' ]
1069 } ]
1070 },
1071 {
1072 id: 'advanced',
1073 label: editor.lang.common.advancedTab,
1074 elements: [ {
1075 type: 'hbox',
1076 widths: [ '50%', '25%', '25%' ],
1077 children: [ {
1078 type: 'text',
1079 id: 'linkId',
1080 requiredContent: 'img[id]',
1081 label: editor.lang.common.id,
1082 setup: function( type, element ) {
1083 if ( type == IMAGE )
1084 this.setValue( element.getAttribute( 'id' ) );
1085 },
1086 commit: function( type, element ) {
1087 if ( type == IMAGE ) {
1088 if ( this.getValue() || this.isChanged() )
1089 element.setAttribute( 'id', this.getValue() );
1090 }
1091 }
1092 },
1093 {
1094 id: 'cmbLangDir',
1095 type: 'select',
1096 requiredContent: 'img[dir]',
1097 style: 'width : 100px;',
1098 label: editor.lang.common.langDir,
1099 'default': '',
1100 items: [
1101 [ editor.lang.common.notSet, '' ],
1102 [ editor.lang.common.langDirLtr, 'ltr' ],
1103 [ editor.lang.common.langDirRtl, 'rtl' ]
1104 ],
1105 setup: function( type, element ) {
1106 if ( type == IMAGE )
1107 this.setValue( element.getAttribute( 'dir' ) );
1108 },
1109 commit: function( type, element ) {
1110 if ( type == IMAGE ) {
1111 if ( this.getValue() || this.isChanged() )
1112 element.setAttribute( 'dir', this.getValue() );
1113 }
1114 }
1115 },
1116 {
1117 type: 'text',
1118 id: 'txtLangCode',
1119 requiredContent: 'img[lang]',
1120 label: editor.lang.common.langCode,
1121 'default': '',
1122 setup: function( type, element ) {
1123 if ( type == IMAGE )
1124 this.setValue( element.getAttribute( 'lang' ) );
1125 },
1126 commit: function( type, element ) {
1127 if ( type == IMAGE ) {
1128 if ( this.getValue() || this.isChanged() )
1129 element.setAttribute( 'lang', this.getValue() );
1130 }
1131 }
1132 } ]
1133 },
1134 {
1135 type: 'text',
1136 id: 'txtGenLongDescr',
1137 requiredContent: 'img[longdesc]',
1138 label: editor.lang.common.longDescr,
1139 setup: function( type, element ) {
1140 if ( type == IMAGE )
1141 this.setValue( element.getAttribute( 'longDesc' ) );
1142 },
1143 commit: function( type, element ) {
1144 if ( type == IMAGE ) {
1145 if ( this.getValue() || this.isChanged() )
1146 element.setAttribute( 'longDesc', this.getValue() );
1147 }
1148 }
1149 },
1150 {
1151 type: 'hbox',
1152 widths: [ '50%', '50%' ],
1153 children: [ {
1154 type: 'text',
1155 id: 'txtGenClass',
1156 requiredContent: 'img(cke-xyz)', // Random text like 'xyz' will check if all are allowed.
1157 label: editor.lang.common.cssClass,
1158 'default': '',
1159 setup: function( type, element ) {
1160 if ( type == IMAGE )
1161 this.setValue( element.getAttribute( 'class' ) );
1162 },
1163 commit: function( type, element ) {
1164 if ( type == IMAGE ) {
1165 if ( this.getValue() || this.isChanged() )
1166 element.setAttribute( 'class', this.getValue() );
1167 }
1168 }
1169 },
1170 {
1171 type: 'text',
1172 id: 'txtGenTitle',
1173 requiredContent: 'img[title]',
1174 label: editor.lang.common.advisoryTitle,
1175 'default': '',
1176 onChange: function() {
1177 updatePreview( this.getDialog() );
1178 },
1179 setup: function( type, element ) {
1180 if ( type == IMAGE )
1181 this.setValue( element.getAttribute( 'title' ) );
1182 },
1183 commit: function( type, element ) {
1184 if ( type == IMAGE ) {
1185 if ( this.getValue() || this.isChanged() )
1186 element.setAttribute( 'title', this.getValue() );
1187 } else if ( type == PREVIEW )
1188 element.setAttribute( 'title', this.getValue() );
1189 else if ( type == CLEANUP ) {
1190 element.removeAttribute( 'title' );
1191 }
1192 }
1193 } ]
1194 },
1195 {
1196 type: 'text',
1197 id: 'txtdlgGenStyle',
1198 requiredContent: 'img{cke-xyz}', // Random text like 'xyz' will check if all are allowed.
1199 label: editor.lang.common.cssStyle,
1200 validate: CKEDITOR.dialog.validate.inlineStyle( editor.lang.common.invalidInlineStyle ),
1201 'default': '',
1202 setup: function( type, element ) {
1203 if ( type == IMAGE ) {
1204 var genStyle = element.getAttribute( 'style' );
1205 if ( !genStyle && element.$.style.cssText )
1206 genStyle = element.$.style.cssText;
1207 this.setValue( genStyle );
1208
1209 var height = element.$.style.height,
1210 width = element.$.style.width,
1211 aMatchH = ( height ? height : '' ).match( regexGetSize ),
1212 aMatchW = ( width ? width : '' ).match( regexGetSize );
1213
1214 this.attributesInStyle = {
1215 height: !!aMatchH,
1216 width: !!aMatchW
1217 };
1218 }
1219 },
1220 onChange: function() {
1221 commitInternally.call(
1222 this, [
1223 'info:cmbFloat',
1224 'info:cmbAlign',
1225 'info:txtVSpace',
1226 'info:txtHSpace',
1227 'info:txtBorder',
1228 'info:txtWidth',
1229 'info:txtHeight'
1230 ]
1231 );
1232 updatePreview( this );
1233 },
1234 commit: function( type, element ) {
1235 if ( type == IMAGE && ( this.getValue() || this.isChanged() ) )
1236 element.setAttribute( 'style', this.getValue() );
1237
1238 }
1239 } ]
1240 } ]
1241 };
1242 };
1243
1244 CKEDITOR.dialog.add( 'image', function( editor ) {
1245 return imageDialog( editor, 'image' );
1246 } );
1247
1248 CKEDITOR.dialog.add( 'imagebutton', function( editor ) {
1249 return imageDialog( editor, 'imagebutton' );
1250 } );
1251} )();
diff --git a/sources/plugins/image/icons/hidpi/image.png b/sources/plugins/image/icons/hidpi/image.png
new file mode 100644
index 00000000..b3c7ade5
--- /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 00000000..fcf61b5f
--- /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 00000000..74c6ee92
--- /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 00000000..f81dd0f2
--- /dev/null
+++ b/sources/plugins/image/lang/af.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..f15aacd4
--- /dev/null
+++ b/sources/plugins/image/lang/ar.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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/bg.js b/sources/plugins/image/lang/bg.js
new file mode 100644
index 00000000..f6533aee
--- /dev/null
+++ b/sources/plugins/image/lang/bg.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..fc8131db
--- /dev/null
+++ b/sources/plugins/image/lang/bn.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..885b6cf1
--- /dev/null
+++ b/sources/plugins/image/lang/bs.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..d7fcbb9d
--- /dev/null
+++ b/sources/plugins/image/lang/ca.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..dac2bd85
--- /dev/null
+++ b/sources/plugins/image/lang/cs.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..0049154c
--- /dev/null
+++ b/sources/plugins/image/lang/cy.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..e468277c
--- /dev/null
+++ b/sources/plugins/image/lang/da.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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.js b/sources/plugins/image/lang/de.js
new file mode 100644
index 00000000..68ba4ae1
--- /dev/null
+++ b/sources/plugins/image/lang/de.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..8bd9dc06
--- /dev/null
+++ b/sources/plugins/image/lang/el.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..b5a87de7
--- /dev/null
+++ b/sources/plugins/image/lang/en-au.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..3289e498
--- /dev/null
+++ b/sources/plugins/image/lang/en-ca.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..add0adbc
--- /dev/null
+++ b/sources/plugins/image/lang/en-gb.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..18af4b88
--- /dev/null
+++ b/sources/plugins/image/lang/en.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..de3b73cf
--- /dev/null
+++ b/sources/plugins/image/lang/eo.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..35310e00
--- /dev/null
+++ b/sources/plugins/image/lang/es.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..00559b5c
--- /dev/null
+++ b/sources/plugins/image/lang/et.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..874dd697
--- /dev/null
+++ b/sources/plugins/image/lang/eu.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..90dbd907
--- /dev/null
+++ b/sources/plugins/image/lang/fa.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..f324e88f
--- /dev/null
+++ b/sources/plugins/image/lang/fi.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..d3b78085
--- /dev/null
+++ b/sources/plugins/image/lang/fo.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..69b9d843
--- /dev/null
+++ b/sources/plugins/image/lang/fr-ca.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..cfd2feac
--- /dev/null
+++ b/sources/plugins/image/lang/fr.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 de remplacement',
7 border: 'Bordure',
8 btnUpload: 'Envoyer sur le serveur',
9 button2Img: 'Voulez-vous transformer le bouton image sélectionné en simple image?',
10 hSpace: 'Espacement horizontal',
11 img2Button: 'Voulez-vous transformer l\'image en bouton image?',
12 infoTab: 'Informations sur l\'image',
13 linkTab: 'Lien',
14 lockRatio: 'Conserver les proportions',
15 menu: 'Propriétés de l\'image',
16 resetSize: 'Taille d\'origine',
17 title: 'Propriétés de l\'image',
18 titleButton: 'Propriétés du bouton image',
19 upload: 'Envoyer',
20 urlMissing: 'L\'adresse source de l\'image est manquante.',
21 vSpace: 'Espacement vertical',
22 validateBorder: 'Bordure doit être un entier.',
23 validateHSpace: 'HSpace doit être un entier.',
24 validateVSpace: 'VSpace doit être un entier.'
25} );
diff --git a/sources/plugins/image/lang/gl.js b/sources/plugins/image/lang/gl.js
new file mode 100644
index 00000000..28aaba94
--- /dev/null
+++ b/sources/plugins/image/lang/gl.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..b62fad85
--- /dev/null
+++ b/sources/plugins/image/lang/gu.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..21fe73fa
--- /dev/null
+++ b/sources/plugins/image/lang/he.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..2c0c3822
--- /dev/null
+++ b/sources/plugins/image/lang/hi.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..d4b05252
--- /dev/null
+++ b/sources/plugins/image/lang/hr.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..f615b713
--- /dev/null
+++ b/sources/plugins/image/lang/hu.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..e91f4ebf
--- /dev/null
+++ b/sources/plugins/image/lang/id.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..d4cb57d1
--- /dev/null
+++ b/sources/plugins/image/lang/is.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..24b60d39
--- /dev/null
+++ b/sources/plugins/image/lang/it.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..74a99fc5
--- /dev/null
+++ b/sources/plugins/image/lang/ja.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..d388c5a3
--- /dev/null
+++ b/sources/plugins/image/lang/ka.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..12eb6d27
--- /dev/null
+++ b/sources/plugins/image/lang/km.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..0bb99907
--- /dev/null
+++ b/sources/plugins/image/lang/ko.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..5273fc56
--- /dev/null
+++ b/sources/plugins/image/lang/ku.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..55f24281
--- /dev/null
+++ b/sources/plugins/image/lang/lt.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..8b962442
--- /dev/null
+++ b/sources/plugins/image/lang/lv.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..bfd943e8
--- /dev/null
+++ b/sources/plugins/image/lang/mk.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3For licensing, see LICENSE.md or http://ckeditor.com/license
4*/
5CKEDITOR.plugins.setLang( 'image', 'mk', {
6 alt: 'Alternative Text', // MISSING
7 border: 'Border', // MISSING
8 btnUpload: 'Send it to the Server', // MISSING
9 button2Img: 'Do you want to transform the selected image button on a simple image?', // MISSING
10 hSpace: 'HSpace', // MISSING
11 img2Button: 'Do you want to transform the selected image on a image button?', // MISSING
12 infoTab: 'Image Info', // MISSING
13 linkTab: 'Link', // MISSING
14 lockRatio: 'Lock Ratio', // MISSING
15 menu: 'Image Properties', // MISSING
16 resetSize: 'Reset Size', // MISSING
17 title: 'Image Properties', // MISSING
18 titleButton: 'Image Button Properties', // MISSING
19 upload: 'Upload', // MISSING
20 urlMissing: 'Image source URL is missing.', // MISSING
21 vSpace: 'VSpace', // MISSING
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/mn.js b/sources/plugins/image/lang/mn.js
new file mode 100644
index 00000000..79950e41
--- /dev/null
+++ b/sources/plugins/image/lang/mn.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..ae67d22a
--- /dev/null
+++ b/sources/plugins/image/lang/ms.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..24eb3e08
--- /dev/null
+++ b/sources/plugins/image/lang/nb.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..6636f1b1
--- /dev/null
+++ b/sources/plugins/image/lang/nl.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..c48abaec
--- /dev/null
+++ b/sources/plugins/image/lang/no.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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/pl.js b/sources/plugins/image/lang/pl.js
new file mode 100644
index 00000000..04c02956
--- /dev/null
+++ b/sources/plugins/image/lang/pl.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..eeb0b14c
--- /dev/null
+++ b/sources/plugins/image/lang/pt-br.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..af25caaa
--- /dev/null
+++ b/sources/plugins/image/lang/pt.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 imagens',
19 upload: 'Carregar',
20 urlMissing: 'O URL da fonte da imagem está em falta.',
21 vSpace: 'Esp.Vert',
22 validateBorder: 'A borda tem de ser um numero.',
23 validateHSpace: 'HSpace tem de ser um numero.',
24 validateVSpace: 'VSpace tem de ser um numero.'
25} );
diff --git a/sources/plugins/image/lang/ro.js b/sources/plugins/image/lang/ro.js
new file mode 100644
index 00000000..79a2a9dc
--- /dev/null
+++ b/sources/plugins/image/lang/ro.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..490af92d
--- /dev/null
+++ b/sources/plugins/image/lang/ru.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..9c608a3f
--- /dev/null
+++ b/sources/plugins/image/lang/si.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..0478ab39
--- /dev/null
+++ b/sources/plugins/image/lang/sk.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..ef93d331
--- /dev/null
+++ b/sources/plugins/image/lang/sl.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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: 'Želiš pretvoriti izbrani gumb s sliko v preprosto sliko?',
10 hSpace: 'Vodoravni razmik',
11 img2Button: 'Želiš pretvoriti izbrano sliko v gumb s sliko?',
12 infoTab: 'Podatki o sliki',
13 linkTab: 'Povezava',
14 lockRatio: 'Zakleni razmerje',
15 menu: 'Lastnosti slike',
16 resetSize: 'Ponastavi velikost',
17 title: 'Lastnosti slike',
18 titleButton: 'Lastnosti gumba s sliko',
19 upload: 'Pošlji',
20 urlMissing: 'Manjka vir (URL) slike.',
21 vSpace: 'Navpični razmik',
22 validateBorder: 'Meja mora biti celo število.',
23 validateHSpace: 'HSpace mora biti celo število.',
24 validateVSpace: 'VSpace mora biti celo število.'
25} );
diff --git a/sources/plugins/image/lang/sq.js b/sources/plugins/image/lang/sq.js
new file mode 100644
index 00000000..37a3e155
--- /dev/null
+++ b/sources/plugins/image/lang/sq.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..34b96210
--- /dev/null
+++ b/sources/plugins/image/lang/sr-latn.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..5f33a561
--- /dev/null
+++ b/sources/plugins/image/lang/sr.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..3854a3d6
--- /dev/null
+++ b/sources/plugins/image/lang/sv.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..0018a713
--- /dev/null
+++ b/sources/plugins/image/lang/th.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..3c294a1e
--- /dev/null
+++ b/sources/plugins/image/lang/tr.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..5e9ec8d5
--- /dev/null
+++ b/sources/plugins/image/lang/tt.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..c96889bd
--- /dev/null
+++ b/sources/plugins/image/lang/ug.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..6f6215c6
--- /dev/null
+++ b/sources/plugins/image/lang/uk.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..bcc93633
--- /dev/null
+++ b/sources/plugins/image/lang/vi.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..64813fc1
--- /dev/null
+++ b/sources/plugins/image/lang/zh-cn.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..4bdbba5d
--- /dev/null
+++ b/sources/plugins/image/lang/zh.js
@@ -0,0 +1,25 @@
1/*
2Copyright (c) 2003-2015, 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 00000000..f4a6a334
--- /dev/null
+++ b/sources/plugins/image/plugin.js
@@ -0,0 +1,183 @@
1/**
2 * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3 * For licensing, see LICENSE.md or http://ckeditor.com/license
4 */
5
6/**
7 * @fileOverview The Image plugin.
8 */
9
10( function() {
11
12 CKEDITOR.plugins.add( 'image', {
13 requires: 'dialog',
14 // jscs:disable maximumLineLength
15 lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
16 // jscs:enable maximumLineLength
17 icons: 'image', // %REMOVE_LINE_CORE%
18 hidpi: true, // %REMOVE_LINE_CORE%
19 init: function( editor ) {
20 // Abort when Image2 is to be loaded since both plugins
21 // share the same button, command, etc. names (#11222).
22 if ( editor.plugins.image2 )
23 return;
24
25 var pluginName = 'image';
26
27 // Register the dialog.
28 CKEDITOR.dialog.add( pluginName, this.path + 'dialogs/image.js' );
29
30 var allowed = 'img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}',
31 required = 'img[alt,src]';
32
33 if ( CKEDITOR.dialog.isTabEnabled( editor, pluginName, 'advanced' ) )
34 allowed = 'img[alt,dir,id,lang,longdesc,!src,title]{*}(*)';
35
36 // Register the command.
37 editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName, {
38 allowedContent: allowed,
39 requiredContent: required,
40 contentTransformations: [
41 [ 'img{width}: sizeToStyle', 'img[width]: sizeToAttribute' ],
42 [ 'img{float}: alignmentToStyle', 'img[align]: alignmentToAttribute' ]
43 ]
44 } ) );
45
46 // Register the toolbar button.
47 editor.ui.addButton && editor.ui.addButton( 'Image', {
48 label: editor.lang.common.image,
49 command: pluginName,
50 toolbar: 'insert,10'
51 } );
52
53 editor.on( 'doubleclick', function( evt ) {
54 var element = evt.data.element;
55
56 if ( element.is( 'img' ) && !element.data( 'cke-realelement' ) && !element.isReadOnly() )
57 evt.data.dialog = 'image';
58 } );
59
60 // If the "menu" plugin is loaded, register the menu items.
61 if ( editor.addMenuItems ) {
62 editor.addMenuItems( {
63 image: {
64 label: editor.lang.image.menu,
65 command: 'image',
66 group: 'image'
67 }
68 } );
69 }
70
71 // If the "contextmenu" plugin is loaded, register the listeners.
72 if ( editor.contextMenu ) {
73 editor.contextMenu.addListener( function( element ) {
74 if ( getSelectedImage( editor, element ) )
75 return { image: CKEDITOR.TRISTATE_OFF };
76 } );
77 }
78 },
79 afterInit: function( editor ) {
80 // Abort when Image2 is to be loaded since both plugins
81 // share the same button, command, etc. names (#11222).
82 if ( editor.plugins.image2 )
83 return;
84
85 // Customize the behavior of the alignment commands. (#7430)
86 setupAlignCommand( 'left' );
87 setupAlignCommand( 'right' );
88 setupAlignCommand( 'center' );
89 setupAlignCommand( 'block' );
90
91 function setupAlignCommand( value ) {
92 var command = editor.getCommand( 'justify' + value );
93 if ( command ) {
94 if ( value == 'left' || value == 'right' ) {
95 command.on( 'exec', function( evt ) {
96 var img = getSelectedImage( editor ),
97 align;
98 if ( img ) {
99 align = getImageAlignment( img );
100 if ( align == value ) {
101 img.removeStyle( 'float' );
102
103 // Remove "align" attribute when necessary.
104 if ( value == getImageAlignment( img ) )
105 img.removeAttribute( 'align' );
106 } else {
107 img.setStyle( 'float', value );
108 }
109
110 evt.cancel();
111 }
112 } );
113 }
114
115 command.on( 'refresh', function( evt ) {
116 var img = getSelectedImage( editor ),
117 align;
118 if ( img ) {
119 align = getImageAlignment( img );
120
121 this.setState(
122 ( align == value ) ? CKEDITOR.TRISTATE_ON : ( value == 'right' || value == 'left' ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );
123
124 evt.cancel();
125 }
126 } );
127 }
128 }
129 }
130 } );
131
132 function getSelectedImage( editor, element ) {
133 if ( !element ) {
134 var sel = editor.getSelection();
135 element = sel.getSelectedElement();
136 }
137
138 if ( element && element.is( 'img' ) && !element.data( 'cke-realelement' ) && !element.isReadOnly() )
139 return element;
140 }
141
142 function getImageAlignment( element ) {
143 var align = element.getStyle( 'float' );
144
145 if ( align == 'inherit' || align == 'none' )
146 align = 0;
147
148 if ( !align )
149 align = element.getAttribute( 'align' );
150
151 return align;
152 }
153
154} )();
155
156/**
157 * Determines whether dimension inputs should be automatically filled when the image URL changes in the Image plugin dialog window.
158 *
159 * config.image_prefillDimensions = false;
160 *
161 * @since 4.5
162 * @cfg {Boolean} [image_prefillDimensions=true]
163 * @member CKEDITOR.config
164 */
165
166/**
167 * Whether to remove links when emptying the link URL field in the Image dialog window.
168 *
169 * config.image_removeLinkByEmptyURL = false;
170 *
171 * @cfg {Boolean} [image_removeLinkByEmptyURL=true]
172 * @member CKEDITOR.config
173 */
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 */