211 lines
8.3 KiB
JavaScript
211 lines
8.3 KiB
JavaScript
|
var editor = [];
|
|||
|
$(function () {
|
|||
|
initCkeditor()
|
|||
|
})
|
|||
|
|
|||
|
/* --Uplaod Adapater */
|
|||
|
//class MyUploadAdapter {
|
|||
|
// constructor(loader) {
|
|||
|
// this.loader = loader;
|
|||
|
// }
|
|||
|
// // start upload methods
|
|||
|
// upload() {
|
|||
|
// return new Promise((resolve, reject) => {
|
|||
|
// // 使用 FileReader() 物件讀取檔案
|
|||
|
// const reader = this.reader = new window.FileReader();
|
|||
|
|
|||
|
// // 觸發錯誤事件,以 reject 丟回 Promise 失敗原因
|
|||
|
// reader.addEventListener('error', err => {
|
|||
|
// reject(err);
|
|||
|
// });
|
|||
|
// // 觸發 abort 事件時,以 reject() ,使 Promise 失敗
|
|||
|
// reader.addEventListener('abort', () => {
|
|||
|
// reject();
|
|||
|
// });
|
|||
|
|
|||
|
// // 告訴 FileReader 物件用 url 格式讀取,用於設定 img.src 性質
|
|||
|
// this.loader.file.then(file => {
|
|||
|
|
|||
|
// console.log(file)
|
|||
|
|
|||
|
// // 觸發 load 事件後,resolve 丟回物件完成 Promise
|
|||
|
// reader.addEventListener('load', () => {
|
|||
|
// //file.src = reader.result;
|
|||
|
// let myFile = new BICYCLER.Utility.File();
|
|||
|
// let myMath = new BICYCLER.Utility.Math();
|
|||
|
// let strExtName = "", strOrgName = "", strSaveName = ""
|
|||
|
// strSaveName = myMath.guid().replace(' ', '');
|
|||
|
// strExtName = myFile.getFileExtension(file.name);
|
|||
|
// strOrgName = (strExtName === null || strExtName === "") ? file.name : file.name.replace('.' + strExtName, '');
|
|||
|
|
|||
|
// editorImage.push(file)
|
|||
|
// resolve({
|
|||
|
// filename: file.name,
|
|||
|
// orgname: strOrgName,
|
|||
|
// savename: strSaveName,
|
|||
|
// extname: strExtName,
|
|||
|
// size: file.size,
|
|||
|
// urls: {
|
|||
|
// default: reader.result
|
|||
|
// }
|
|||
|
// });
|
|||
|
// });
|
|||
|
// reader.readAsDataURL(file);
|
|||
|
// });
|
|||
|
|
|||
|
// //this.loader.read().then(data => {
|
|||
|
// // editor.editing.view.change(writer => {
|
|||
|
// // writer.setAttribute('src', data, viewImg);
|
|||
|
// // });
|
|||
|
// //});
|
|||
|
// });
|
|||
|
// }
|
|||
|
// // start abort()
|
|||
|
// abort() {
|
|||
|
// // 觸發 FileReader abort 事件
|
|||
|
// this.reader.abort();
|
|||
|
// }
|
|||
|
//}
|
|||
|
|
|||
|
function initCkeditor() {
|
|||
|
return new Promise((resolve) => {
|
|||
|
let toolbar = {
|
|||
|
toolbar: {
|
|||
|
items: [
|
|||
|
'heading',
|
|||
|
'|',
|
|||
|
'fontfamily', 'fontsize', 'fontColor', 'fontBackgroundColor',
|
|||
|
'|',
|
|||
|
'bold', 'italic', 'underline', 'strikethrough',
|
|||
|
'-',
|
|||
|
'alignment', 'numberedList', 'bulletedList',
|
|||
|
'|',
|
|||
|
'indent', 'outdent',
|
|||
|
'|',
|
|||
|
'link', 'blockquote', /*'ckfinder ,'*/ 'insertTable',
|
|||
|
'|',
|
|||
|
'undo', 'redo',
|
|||
|
'|',
|
|||
|
'fullScreen'
|
|||
|
],
|
|||
|
shouldNotGroupWhenFull: true,
|
|||
|
language: "zh",
|
|||
|
},
|
|||
|
image: {
|
|||
|
toolbar: [
|
|||
|
'toggleImageCaption', 'linkImage',
|
|||
|
'|',
|
|||
|
'imageStyle:alignBlockLeft', 'imageStyle:alignCenter', 'imageStyle:alignBlockRight', 'imageStyle:wrapText',
|
|||
|
"|",
|
|||
|
'resizeImage:original', 'resizeImage:25', 'resizeImage:50', 'resizeImage:75'
|
|||
|
],
|
|||
|
},
|
|||
|
table: {
|
|||
|
contentToolbar: ['tableProperties', 'tableCellProperties', 'tableRow', 'tableColumn', 'mergeTableCells']
|
|||
|
},
|
|||
|
//image介面刪除callback
|
|||
|
//imageRemoveEvent: {
|
|||
|
// additionalElementTypes: null,
|
|||
|
// callback: (imagesSrc, nodeObjects) => {
|
|||
|
// console.log('callback called', imagesSrc, nodeObjects)
|
|||
|
// }
|
|||
|
//},
|
|||
|
ckfinder: {
|
|||
|
//ckfinder 連接器
|
|||
|
uploadUrl: '/By_Admin/CKfinder/CKfinder/connector?command=Init&type=Images&lang=zh-tw&langCode=zh-tw',
|
|||
|
options: {
|
|||
|
language: 'zh-tw',
|
|||
|
resourceType: 'Images'
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
$("[data-toggle^=ckeditor]").each((index, value) => {
|
|||
|
//取得原有element class
|
|||
|
let oriWidth = $(value).css("width");
|
|||
|
let oriMaxWidth = $(value).css("max-width");
|
|||
|
|
|||
|
ClassicEditor.create(value, toolbar)
|
|||
|
.then(NewEditor => {
|
|||
|
if ($("[data-toggle^=ckeditor]").length == 1) {
|
|||
|
editor = NewEditor;
|
|||
|
|
|||
|
//讀進來的Source element disabled時,該CKEditor => enableReadOnlyMode('secret string')
|
|||
|
if ($(value).prop("disabled") == true) {
|
|||
|
editor.enableReadOnlyMode('bicycler');
|
|||
|
}
|
|||
|
|
|||
|
//剪貼簿讀進來不呈現樣式
|
|||
|
//const plugin = editor.plugins.get('Clipboard');
|
|||
|
//plugin.on('inputTransformation', (evt, data) => {
|
|||
|
// const dataTransfer = data.dataTransfer;
|
|||
|
// data.content = editor.data.processor.toView(regexTextToHtml(dataTransfer.getData('text/plain')));
|
|||
|
//})
|
|||
|
|
|||
|
//上傳照片(非CKfinder)配置UploadAdapter
|
|||
|
//editor.plugins.get('FileRepository').createUploadAdapter = loader => {
|
|||
|
// console.log(editor.plugins.get('FileRepository'))
|
|||
|
// return new MyUploadAdapter(loader)
|
|||
|
//}
|
|||
|
|
|||
|
//放入原有col- class
|
|||
|
$(editor.ui.view.element).css("width", oriWidth);
|
|||
|
$(editor.ui.view.element).css("max-width", oriMaxWidth);
|
|||
|
|
|||
|
resolve();
|
|||
|
} else {
|
|||
|
let sub = $(value).data("toggle").split("ckeditor")[1];
|
|||
|
editor[sub] = NewEditor
|
|||
|
|
|||
|
//讀進來的Source element disabled時,該CKEditor => enableReadOnlyMode('secret string')
|
|||
|
if ($(value).prop("disabled") == true) {
|
|||
|
editor[sub].enableReadOnlyMode('2421ww');
|
|||
|
}
|
|||
|
|
|||
|
//貼上時指文字呈現
|
|||
|
//const plugin = editor[sub].plugins.get('Clipboard');
|
|||
|
//plugin.on('inputTransformation', (evt, data) => {
|
|||
|
// const dataTransfer = data.dataTransfer;
|
|||
|
// data.content = editor[sub].data.processor.toView(regexTextToHtml(dataTransfer.getData('text/plain')));
|
|||
|
//})
|
|||
|
|
|||
|
//上傳照片(非CKfinder)配置UploadAdapter
|
|||
|
editor[sub].plugins.get('FileRepository').createUploadAdapter = loader => {
|
|||
|
console.log(editor[sub].plugins.get('FileRepository'))
|
|||
|
return new MyUploadAdapter(loader)
|
|||
|
}
|
|||
|
|
|||
|
//放入原有col- class
|
|||
|
$(editor[sub].ui.view.element).css("width", oriWidth);
|
|||
|
$(editor[sub].ui.view.element).css("max-width", oriMaxWidth);
|
|||
|
|
|||
|
resolve();
|
|||
|
}
|
|||
|
})
|
|||
|
.catch(err => {
|
|||
|
console.error(err.stack);
|
|||
|
resolve();
|
|||
|
});
|
|||
|
})
|
|||
|
})
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
function regexTextToHtml(text) {
|
|||
|
let data = text;
|
|||
|
data = data.replace(/\r/gm, "");
|
|||
|
data = data.replace(/\n\n/gm, "\n");
|
|||
|
data = data.replace(/^/gm, "<p>");
|
|||
|
data = data.replace(/\n|\n\n/gm, "</p>");
|
|||
|
return data;
|
|||
|
}
|
|||
|
|
|||
|
function regexHtmlToText(html) {
|
|||
|
let data = html;
|
|||
|
data = data.replace(/<p>/gm, "");
|
|||
|
data = data.replace(/<\/p>/gm, "\n");
|
|||
|
data = data.replace(/ /gm, " ");
|
|||
|
data = data.replace(/ /gm, " ");
|
|||
|
data = data.replace(/ /gm, " ");
|
|||
|
return data;
|
|||
|
}
|