| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389 |
- let thumbList = [];
- let thumbLength = 0;
- let uploaderFuncUrl = (top.BASE_URL + "");
- let $parent = (top || top.parent);
- let uploader = new plupload.Uploader({
- runtimes: "html5,html4,silverlight,flash",
- browse_button: "image-upload",
- container: "container",
- chunk_size: "10000kb",
- unique_names: false,
- selected_files: 8, // 한번에 선택한 파일 개수
- max_files: 30, // 전체 파일 개수 제한
- urlstream_upload: true,
- multi_selection: true,
- multipart_params: [],
- url: uploaderFuncUrl,
- flash_swf_url: $parent.tinyMCE.baseURL + '/plupload/js/Moxie.swf',
- silverlight_xap_url: $parent.tinyMCE.baseURL + '/plupload/js/Moxie.xap',
- resize: {
- // width: $parent.tinyMCE.activeEditor.getContainer().offsetWidth,
- // height: $parent.tinyMCE.activeEditor.getContainer().offsetHeight,
- crop: false,
- quality: 100
- },
- filters: {
- max_file_size: "10mb",
- mime_types: [{
- title: "Image files",
- extensions: "jpg,gif,png,bmp"
- }],
- prevent_duplicates: true
- },
- init:
- {
- // 초기 설정
- PostInit: function (up) {
- if (up.state !== 1) {
- $parent.message("잠시후 다시 시도해주세요.", "error");
- return false;
- }
- document.getElementsByClassName("picker-content")[0].innerHTML = "";
- $(".picker-content").sortable({
- start: function (event, ui) {
- ui.placeholder.css({visibility: 'visible', border: '1px solid #4D88FF'});
- },
- change: function (event, ui) {
- ui.placeholder.css({visibility: 'visible', border: '1px solid #4D88FF'});
- },
- stop: function (event, ui) {
- sortFiles();
- }
- }).disableSelection();
- },
- // 파일 필터 중
- FileFiltered: function (up, files) {
- if (!files) {
- up.removeFile(files);
- $parent.message("사진를 추가할 수 없습니다. 다시 시도 해주세요.", "error");
- return false;
- }
- },
- // 업로드 전 보낼 값 지정
- BeforeUpload: function (up, file) {
- up.settings.multipart_params = {fileID: file.id};
- },
- // 파일 가상추가
- // up.state (1 : stoped, 2: started) plupload resize
- FilesAdded: function (up, files) {
- if (files.length > up.settings.selected_files) {
- $parent.message("사진는 한번에 " + up.settings.selected_files + "개까지 올릴 수 있습니다.", "error");
- return false;
- }
- // 최대 업로드 가능 개수
- plupload.each(files, function (file) {
- try {
- if (file.getSource().getSource().size <= 0) {
- throw new Error("파일 형식이 옳지 않습니다.");
- } else if (up.files.length > up.settings.max_files) {
- throw new Error("사진는 최대 " + up.settings.max_files + "개 까지 가능합니다.");
- }
- } catch (error) {
- $parent.popMessage(error.message, "error");
- up.removeFile(file);
- up.refresh();
- return false;
- }
- if (up.state !== plupload.STARTED) {
- let preView = new moxie.image.Image();
- let params = up.settings.resize;
- let blob = file.getSource();
- try { // mOxie 미리보기 생성
- preView.onload = function () // 이미지 썸네일 생성
- {
- /*
- console.log("params.width: " + params.width);
- console.log("params.width: " + params.height);
- console.log("this.width: " + this.width);
- console.log("this.width: " + this.height);
- console.log("params.preserve_headers: " + params.preserve_headers);
- console.log("params.crop: " + params.crop);
- */
- if ((params.width > this.width) && (params.preserve_headers && !params.crop)) {
- } else {
- preView.downsize(params.width, params.height, params.crop, params.preserve_headers); // 크기가 지정한 값보다 크다면 조절
- }
- paintImg(file, preView.getAsDataURL(blob.type, params.quality));
- };
- preView.onresize = function (e) {
- $parent.popMessage("`" + e.target.name + "` 이미지는 허용 가능한 크기를 초과해 재조정하였습니다.", "warning");
- };
- preView.onerror = function () {
- this.destroy();
- };
- preView.onloadend = function () {
- this.destroy();
- };
- preView.load(blob);
- // 미리보기 생성이 안된다면
- if (file.type === "image/gif" && preView.size <= 0) {
- var reader = new FileReader();
- reader.onloadend = function () {
- if (reader.result) {
- paintImg(file, reader.result);
- }
- };
- reader.readAsDataURL(file.getNative());
- }
- } catch (e) {
- $parent.popMessage("`" + e.target.name + "` 이미지는 첨부할 수 없습니다.", "error");
- return false;
- }
- }
- });
- up.refresh();
- },
- // 업로드 중..
- UploadProgress: function (up, files) {
- loading();
- },
- // 실제 사진 업로드
- FileUploaded: function (up, file, response) { // 사용안함
- var data = JSON.parse(response.response);
- try {
- if (typeof data != "undefined" && data != "") {
- if (file.id && up.state == plupload.STARTED) {
- var editorHTML = "<img src='" + data.imageUrl + "?" + Date.now() + "' alt='" + data.imageName + "'/><br /> \u200C";
- $parent.tinymce.activeEditor.execCommand('mceInsertContent', false, editorHTML);
- // 이미지 번호 저장
- /*
- if(typeof data.imageID != "undefined" || data.imageID == null){
- $parent.setImageID(data.imageID);
- }*/
- } else {
- throw new Error("사진 업로드 중 오류가 발생하였습니다. 다시 시도해주세요.");
- }
- } else {
- throw new Error("첨부한 사진은 사용할 수 없습니다. 다른 사진을 사용해주세요.");
- }
- } catch (error) {
- $parent.message(error.message, "error");
- up.removeFile(file);
- up.splice(file);
- return false;
- }
- },
- FilesRemoved: function(up, files) {
- console.log(up);
- console.log(files);
- },
- // 모든 사진 업로드 완료
- UploadComplete: function (up, files) {
- if (up.total.queued == 0 && up.files.length > 0) {
- $parent.message(up.files.length + "개의 사진이 추가 되었습니다.");
- }
- stopUploader();
- },
- // 오류 노출
- Error: function (up, error) {
- if (error.code == 9999) {
- $parent.message("\nError #" + error.code + ": " + error.message, "error");
- }
- return false;
- }
- }
- });
- uploader.init();
- /*
- * Tinymce 내부 호출
- */
- window.startUploader = function () {
- if (uploader.files.length > 0) {
- uploader.start();
- } else {
- stopUploader();
- }
- };
- window.stopUploader = function () {
- setTimeout(function () {
- uploader.refresh();
- uploader.stop();
- uploader.unbindAll();
- uploader.destroy();
- }, 1000);
- setTimeout(function () {
- $parent.selfAutoResize(15);
- }, 0);
- setTimeout(function () {
- $parent.tinymce.activeEditor.load();
- }, 500);
- // setTimeout(function(){$parent.tinymce.activeEditor.execCommand('mceAutoResize', true);}, 1000);
- loading();
- $parent.tinyMCE.activeEditor.windowManager.close();
- };
- window.insertContent = function () {
- if (thumbLength > 0) {
- loading();
- for (let index in thumbList) {
- $parent.tinymce.activeEditor.execCommand('mceInsertContent', false, thumbList[index]);
- }
- $parent.message(thumbLength + "개의 사진이 추가 되었습니다.");
- }
- stopUploader();
- };
- window.removeThumb = function (e) {console.log(333);
- if ($(".picker-list-box").length <= 0) {
- $parent.popMessage("삭제할 파일이 없습니다.", "warning");
- return false;
- } else {
- if (typeof e != "undefined") {
- if (confirm("지워진 사진은 복구할 수 없습니다.\n\n해당 사진을 삭제하겠습니까?")) {
- let removeTab = e.closest(".picker-list-box");
- let fileID = removeTab.attr("id");
- delete thumbList[fileID];
- removeTab.remove();
- uploader.removeFile(uploader.getFile(fileID));
- $parent.popMessage("해당 사진이 정상적으로 삭제 되었습니다.");
- thumbLength--;
- }
- } else {
- if (confirm("지워진 사진들은 복구할 수 없습니다.\n\n모든 사진을 삭제하겠습니까?")) {
- uploader.splice(); // 초기화
- uploader.refresh();
- $(".picker-content").empty();
- thumbLength = 0;
- thumbList = new Array(); // 삭제
- $parent.popMessage("모든 사진이 정상적으로 삭제 되었습니다.");
- }
- }
- return true;
- }
- };
- /*
- * Plupload 내부 호출
- */
- var sortFiles = function () {
- let fileListObj = $(".picker-list-box");
- let tmpFileList = [];
- let tmpThumbList = [];
- $.each(fileListObj, function (index) {
- if (typeof this.id != "undefined") {
- tmpFileList.push(uploader.getFile(this.id));
- tmpThumbList[this.id] = thumbList[this.id];
- }
- });
- $.each(uploader.files, function (index) {
- uploader.files[index] = tmpFileList[index];
- });
- thumbList = tmpThumbList;
- uploader.refresh();
- };
- var loading = function () {
- // 레이어 팝업 기능
- let temp = $('.wrap-loading');
- let bg = temp.prev(); // dimmed 레이어를 감지하기 위한 boolean 변수
- if (bg) {
- $('.layer').show(); // 'bg' 클래스가 존재하면 레이어가 나타나고 배경은 dimmed 된다.
- temp.show();
- } else {
- $('.layer').hide();
- temp.hide();
- }
- // 화면의 중앙에 레이어를 띄운다.
- if (temp.outerHeight() < $(document).height()) {
- temp.css('margin-top', '-' + (temp.outerHeight() / 2 - 26) + 'px');
- } else {
- temp.css('top', '0');
- }
- if (temp.outerWidth() < $(document).width()) {
- temp.css('margin-left', '-' + (temp.outerWidth() / 2 - 25) + 'px');
- } else {
- temp.css('left', '0');
- }
- };
- var paintImg = function (file, src) {
- let imgHTML = '<img src="' + src + '" alt="' + file.name + '" aria-label="Image" data-load-type="valign" data-target="thumb"/>';
- let thumbHTML =
- '<div class="picker-list-box picker-sortable-item active" id="' + file.id + '">' +
- '<div class="picker-list-item">' +
- '<div class="picker-list-item-in">' +
- '<div class="picker-image-box">' +
- '<a class="picker-image" href="#" onclick="return false;" aria-label="Enlarge">' +
- imgHTML +
- '</a>' +
- '</div>' +
- '<a class="picker-image-title picker-image-draggable" href="#" onclick="return false;" aria-label="Name">' + file.name + '</a>' +
- '<button type="button" class="picker-image-remove mce-close" aria-hidden="true" aria-label="Remove">' +
- '<i class="mce-ico mce-i-remove"></i>' +
- '</button>' +
- '</div>' +
- '</div>' +
- '</div>';
- document.getElementsByClassName("picker-content")[0].innerHTML += thumbHTML;
- thumbList[file.id] = "<br/>" + imgHTML; // 썸네일 이미지 임시저장 (에디터에 뿌려줌)
- thumbLength++;
- };
- var resizeImage = function (blob, params, cb) {
- let img = new o.Image();
- try {
- img.onload = function () {
- // no manipulation required if...
- if (params.width > this.width &&
- params.height > this.height &&
- params.quality === undef &&
- params.preserve_headers &&
- !params.crop
- ) {
- this.destroy();
- return cb(blob);
- }
- // otherwise downsize
- img.downsize(params.width, params.height, params.crop, params.preserve_headers);
- console.log(img.getAsDataURL());
- paintImg(blob, img.getAsDataURL());
- };
- img.onresize = function () {
- cb(this.getAsBlob(blob.type, params.quality));
- this.destroy();
- };
- img.onerror = function () {
- cb(blob);
- };
- img.load(blob);
- } catch (ex) {
- cb(blob);
- }
- }
|