(function() { CKEDITOR.plugins.add('fastimage', { lang: 'en,fr', requires: 'dialog', icons: 'fastimage', init: function(editor) { CKEDITOR.dialog.add('fastimage', function(editor) { return { data: null, ratio: 0, dialog: null, originalCanvas: null, title: editor.lang.fastimage.title, resizable: CKEDITOR.DIALOG_RESIZE_NONE, height: 530, contents: [ { id: 'main_uploadimage', elements: [ { type: 'vbox', align: 'center', children: [ { type: 'file', id : 'uploadimage', size : 85, onChange : function(data) { var f = this.getInputElement().$.files[0]; if ( (f.size > 0) && (editor.config.maxImageSizeUpload != undefined) && ((f.size / 1024 / 1024) > editor.config.maxImageSizeUpload)) { alert(editor.lang.fastimage.maxSizeMessage.replace('%', editor.config.maxImageSizeUpload)); } else { var canvas = document.getElementById('canvas_' + editor.id); // IE init if (typeof G_vmlCanvasManager != 'undefined') { G_vmlCanvasManager.initElement(canvas); } var ctx = canvas.getContext('2d'); var url = window.URL || window.webkitURL; var src = url.createObjectURL(f); var img = new Image(); img.src = src; img.onload = function() { canvas.width = img.width; canvas.height = img.height; canvas.style.width = canvas.width + 'px'; canvas.style.height = canvas.height + 'px'; ctx.drawImage(img, 0, 0); editor.data = canvas.toDataURL('image/png'); dialog.getContentElement( 'main_uploadimage', 'width' ).setValue(img.width, true); dialog.getContentElement( 'main_uploadimage', 'width' ).enable(); dialog.getContentElement( 'main_uploadimage', 'height' ).setValue(img.height, true); dialog.getContentElement( 'main_uploadimage', 'height' ).enable(); editor.ratio = img.width / img.height; url.revokeObjectURL(src); editor.originalCanvas = document.createElement('canvas'); editor.originalCanvas.width = canvas.width; editor.originalCanvas.height = canvas.height; editor.originalCanvas.style.width = editor.originalCanvas.width + 'px'; editor.originalCanvas.style.height = editor.originalCanvas.height + 'px'; // IE init if (typeof G_vmlCanvasManager != 'undefined') { G_vmlCanvasManager.initElement(editor.originalCanvas); } editor.originalCanvas.getContext('2d').drawImage(canvas, 0, 0); }; } } }, { type: 'html', style: 'overflow: auto; width: 640px; height: 480px; text-align: center; vertical-align: middle;', html: '

' }, { type: 'hbox', align: 'center', children: [ { type: 'text', id: 'width', label: editor.lang.common.width, maxLength: 4, onChange: function(ev) { var canvas = document.getElementById('canvas_' + editor.id); if(!new RegExp("^[1-9][0-9]+$").test(this.getValue())) { alert(editor.lang.fastimage.invalidWidth); dialog.getContentElement( 'main_uploadimage', 'width' ).setValue(canvas.width, true); return false; } canvas.width = ev.data.value; canvas.height = canvas.width / editor.ratio; canvas.style.width = canvas.width + 'px'; canvas.style.height = canvas.height + 'px'; dialog.getContentElement( 'main_uploadimage', 'height' ).setValue(canvas.height, true); if (typeof G_vmlCanvasManager != 'undefined') { G_vmlCanvasManager.initElement(canvas); } canvas.getContext('2d').drawImage(editor.originalCanvas, 0, 0, editor.originalCanvas.width, editor.originalCanvas.height, 0, 0, canvas.width, canvas.height); editor.data = canvas.toDataURL('image/png'); } }, { type: 'text', id: 'height', label: editor.lang.common.height, maxLength: 4, onChange: function(ev) { var canvas = document.getElementById('canvas_' + editor.id); if(!new RegExp("^[1-9][0-9]+$").test(this.getValue())) { alert(editor.lang.fastimage.invalidHeight); dialog.getContentElement( 'main_uploadimage', 'height' ).setValue(canvas.height, true); return false; } canvas.height = ev.data.value; canvas.width = canvas.height * editor.ratio; canvas.style.width = canvas.width + 'px'; canvas.style.height = canvas.height + 'px'; dialog.getContentElement( 'main_uploadimage', 'width' ).setValue(canvas.width, true); if (typeof G_vmlCanvasManager != 'undefined') { G_vmlCanvasManager.initElement(canvas); } canvas.getContext('2d').drawImage(editor.originalCanvas, 0, 0, editor.originalCanvas.width, editor.originalCanvas.height, 0, 0, canvas.width, canvas.height); editor.data = canvas.toDataURL('image/png'); } } ] } ] } ] } ], onShow: function(event) { editor.data = null; editor.originalCanvas = null; editor.ratio = 0; var canvas = document.getElementById('canvas_' + editor.id); canvas.width = 0; canvas.height = 0; canvas.style.width = canvas.width + 'px'; canvas.style.height = canvas.height + 'px'; dialog.getContentElement( 'main_uploadimage', 'width' ).disable(); dialog.getContentElement( 'main_uploadimage', 'height' ).disable(); }, onLoad: function() { dialog = this; }, onOk: function(event) { if(editor.data != null) { var img = CKEDITOR.dom.element.createFromHtml(''); editor.insertElement(img); return true; } alert(editor.lang.fastimage.noFileSelected); return false; } }; }); editor.addCommand('uploadimage', new CKEDITOR.dialogCommand('fastimage', { allowedContent: 'img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}', requiredContent: 'img[alt,src]', contentTransformations: [ [ 'img{width}: sizeToStyle', 'img[width]: sizeToAttribute' ], [ 'img{float}: alignmentToStyle', 'img[align]: alignmentToAttribute' ] ] } ) ); editor.ui.addButton('fastimage', { label: editor.lang.common.image, command: 'uploadimage', toolbar: 'fastimage' }); } }); })(); CKEDITOR.config.image_removeLinkByEmptyURL = true; CKEDITOR.on('dialogDefinition', function(dialogDefinitionEvent) { var dialogDefinition = dialogDefinitionEvent.data.definition; dialogDefinition.dialog.on('cancel', function(cancelEvent) { return false; }, this, null, -1); });