/**
* @license Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
'use strict';
( function() {
var uniqueNameCounter = 0,
// Black rectangle which is shown before the image is loaded.
loadingImage = 'data:image/gif;base64,R0lGODlhDgAOAIAAAAAAAP///yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=';
// Returns number as a string. If a number has 1 digit only it returns it prefixed with an extra 0.
function padNumber( input ) {
if ( input <= 9 ) {
input = '0' + input;
}
return String( input );
}
// Returns a unique image file name.
function getUniqueImageFileName( type ) {
var date = new Date(),
dateParts = [ date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds() ];
uniqueNameCounter += 1;
return 'image-' + CKEDITOR.tools.array.map( dateParts, padNumber ).join( '' ) + '-' + uniqueNameCounter + '.' + type;
}
CKEDITOR.plugins.add( 'uploadimage', {
requires: 'uploadwidget',
onLoad: function() {
CKEDITOR.addCss(
'.cke_upload_uploading img{' +
'opacity: 0.3' +
'}'
);
},
init: function( editor ) {
editor.ui.addButton( 'Image', {
label: CKEDITOR.lang[editor.config.language].common.image,
command: 'openDialog',
toolbar: 'insertImg'
});
var fileDialog = $(''),
uploadType = '';
editor.addCommand('openDialog', {
exec: function(editor) {
fileDialog.click();
if(typeof(uploadType) != 'undefined') uploadType = 'fileDialog';
}
});
// Do not execute this paste listener if it will not be possible to upload file.
if ( !CKEDITOR.plugins.clipboard.isFileApiSupported ) {
return;
}
var fileTools = CKEDITOR.fileTools,
uploadUrl = fileTools.getUploadUrl( editor.config, 'image' );
if ( !uploadUrl ) {
return;
}
var supportedType = '';
var agent = navigator.userAgent.toLowerCase();
if (agent.indexOf('trident') != -1 || agent.indexOf("msie") != -1) {
supportedType = '';
} else {
supportedType = /image\/(jpeg|png|gif|bmp|webp)/;
}
// Handle images which are available in the dataTransfer.
fileTools.addUploadWidget( editor, 'uploadimage', {
supportedTypes: supportedType,
uploadUrl: uploadUrl,
fileDialog: fileDialog,
fileToElement: function() {
var img = new CKEDITOR.dom.element( 'img' );
img.setAttribute( 'src', loadingImage );
return img;
},
parts: {
img: 'img'
},
onUploading: function( upload ) {
// Show the image during the upload.
this.parts.img.setAttribute( 'src', upload.data );
},
onUploaded: function( upload ) {
// Width and height could be returned by server (https://dev.ckeditor.com/ticket/13519).
var $img = this.parts.img.$,
width = upload.responseData.width || $img.naturalWidth,
height = upload.responseData.height || $img.naturalHeight;
// Set width and height to prevent blinking.
this.replaceWith( '' );
}
} );
editor.on("fileUploadRequest", function( evt ) {
// 이미지 업로드 시작 체크
var fileLoader = evt.data.fileLoader;
if(fileLoader.file.type.match(/image\/(jpeg|png|gif|bmp|webp)/) == null){
this.showNotification('익스플로러 환경에서는 jpg / gif / png 파일만 업로드 가능합니다.','warning');
return false;
}else {
if(typeof(editor_chk_upload) != "undefined") {
editor_chk_upload = false;
}
}
});
editor.on("fileUploadResponse", function( evt ) {
// 파일 브라우저 사용한 경우에만
if(typeof(uploadType) != 'undefined' && uploadType == 'fileDialog') {
var fileLoader = evt.data.fileLoader,
xhr = fileLoader.xhr,
data = evt.data,
res = JSON.parse(xhr.responseText);
var img = new CKEDITOR.dom.element( 'img' );
img.setAttribute( 'src', res.url );
if(typeof(res.width) != 'undefined') img.setAttribute( 'width', res.width );
if(typeof(res.height) != 'undefined') img.setAttribute( 'height', res.height );
editor.insertElement(img);
uploadType = ''; // 구분값 초기화
// 파일폼 초기화
for( var i = 0; i < fileDialog.length; i++ ) {
fileDialog[i].value = null;
}
}
// 이미지 업로드 완료 체크
if(typeof(editor_chk_upload) != "undefined") {
editor_chk_upload = true;
}
});
// Handle images which are not available in the dataTransfer.
// This means that we need to read them from the elements.
editor.on( 'paste', function( evt ) {
// For performance reason do not parse data if it does not contain img tag and data attribute.
if ( !evt.data.dataValue.match( /