General cleanup of DOM traversal code in editor & uploader (should also fix #2303)

This commit is contained in:
Kijin Sung 2024-04-26 13:35:20 +09:00
parent 7dd3dd3838
commit b9ea0e65b0
6 changed files with 49 additions and 48 deletions

View file

@ -43,7 +43,7 @@ CKEDITOR.plugins.add('rx_upload', {
const uploadFile = function(file) { const uploadFile = function(file) {
// Get the editor sequence. // Get the editor sequence.
const editor_container = $(editor.container.$).parents('.rx_ckeditor'); const editor_container = $(editor.container.$).closest('.rx_ckeditor');
const upload_container = editor_container.nextAll('.xefu-container').first(); const upload_container = editor_container.nextAll('.xefu-container').first();
const editor_sequence = editor_container.data('editorSequence'); const editor_sequence = editor_container.data('editorSequence');

View file

@ -134,8 +134,7 @@
versionCheck: false versionCheck: false
}, },
loadXeComponent: true, loadXeComponent: true,
enableToolbar: true, enableToolbar: true
content_field: jQuery('[name={$editor_content_key_name}]')
}; };
// Add style-sheet for the WYSIWYG // Add style-sheet for the WYSIWYG
@ -219,15 +218,15 @@
var ckeApp = $('#ckeditor_instance_{$editor_sequence}').XeCkEditor(settings); var ckeApp = $('#ckeditor_instance_{$editor_sequence}').XeCkEditor(settings);
// Add use_editor and use_html fields to parent form. // Add use_editor and use_html fields to parent form.
var parentform = $('#ckeditor_instance_{$editor_sequence}').parents('form'); var parentform = $('#ckeditor_instance_{$editor_sequence}').closest('form');
var use_editor = parentform.find("input[name='use_editor']"); var use_editor = parentform.find("input[name='use_editor']");
var use_html = parentform.find("input[name='use_html']"); var use_html = parentform.find("input[name='use_html']");
if (use_editor.size()) { if (use_editor.length) {
use_editor.val("Y"); use_editor.val("Y");
} else { } else {
parentform.append('<input type="hidden" name="use_editor" value="Y" />'); parentform.append('<input type="hidden" name="use_editor" value="Y" />');
} }
if (use_html.size()) { if (use_html.length) {
use_html.val("Y"); use_html.val("Y");
} else { } else {
parentform.append('<input type="hidden" name="use_html" value="Y" />'); parentform.append('<input type="hidden" name="use_html" value="Y" />');

View file

@ -79,7 +79,7 @@
function reloadUploader(editor_sequence) { function reloadUploader(editor_sequence) {
var container = $('#xefu-container-' + editor_sequence); var container = $('#xefu-container-' + editor_sequence);
if (container.length) { if (container.length) {
container.data('instance').loadFilelist($container); container.data('instance').loadFilelist(container);
} }
} }

View file

@ -70,12 +70,12 @@
// Load editor info. // Load editor info.
var editor = $(this); var editor = $(this);
var editor_sequence = editor.data('editor-sequence'); var editor_sequence = editor.data('editorSequence');
var content_key = editor.data('editor-content-key-name'); var content_key = editor.data('editorContentKeyName');
var primary_key = editor.data('editor-primary-key-name'); var primary_key = editor.data('editorPrimaryKeyName');
var insert_form = editor.closest('form'); var insert_form = editor.closest('form');
var content_input = insert_form.find('input,textarea').filter('[name=' + content_key + ']'); var content_input = insert_form.find('input,textarea').filter('[name=' + content_key + ']');
var editor_height = editor.data('editor-height'); var editor_height = editor.data('editorHeight');
if (editor_height) { if (editor_height) {
editor.css('height', editor_height + 'px'); editor.css('height', editor_height + 'px');
} }

View file

@ -1,27 +1,27 @@
function editorTextarea(editor_sequence) { function editorTextarea(editor_sequence) {
var textarea = jQuery("#textarea_instance_" + editor_sequence); var textarea = jQuery("#textarea_instance_" + editor_sequence);
var content_key = textarea.data("editor-content-key-name"); var content_key = textarea.data("editorContentKeyName");
var primary_key = textarea.data("editor-primary-key-name"); var primary_key = textarea.data("editorPrimaryKeyName");
var insert_form = textarea.closest("form"); var insert_form = textarea.closest("form");
var content_input = insert_form.find("input[name='" + content_key + "']"); var content_input = insert_form.find("input[name='" + content_key + "']");
var content = ""; var content = "";
// Set editor keys // Set editor keys
editorRelKeys[editor_sequence] = {}; editorRelKeys[editor_sequence] = {};
editorRelKeys[editor_sequence].primary = insert_form.find("input[name='" + primary_key + "']"); editorRelKeys[editor_sequence].primary = insert_form.find("input[name='" + primary_key + "']");
editorRelKeys[editor_sequence].content = content_input; editorRelKeys[editor_sequence].content = content_input;
editorRelKeys[editor_sequence].func = editorGetContent; editorRelKeys[editor_sequence].func = editorGetContent;
// Set editor_sequence // Set editor_sequence
insert_form[0].setAttribute('editor_sequence', editor_sequence); insert_form[0].setAttribute('editor_sequence', editor_sequence);
// Load existing content // Load existing content
if (content_input.size()) { if (content_input.size()) {
content = String(content_input.val()).stripTags(); content = String(content_input.val()).stripTags();
content_input.val(content); content_input.val(content);
textarea.val(content.unescape()); textarea.val(content.unescape());
} }
// Save edited content // Save edited content
textarea.on("change", function() { textarea.on("change", function() {
content_input.val(String(jQuery(this).val()).escape()); content_input.val(String(jQuery(this).val()).escape());
@ -41,4 +41,4 @@ function editorTextarea(editor_sequence) {
}); });
editor_resize_iframe.height(textarea.height()); editor_resize_iframe.height(textarea.height());
} }
} }

View file

@ -1,16 +1,14 @@
function getCkFormInstance(editor_sequence) function getCkFormInstance(editor_sequence)
{ {
var fo_obj = document.getElementById('ckeditor_instance_' + editor_sequence).parentNode; var form = $('#ckeditor_instance_' + editor_sequence).closest('form');
while(fo_obj.nodeName != 'FORM') { fo_obj = fo_obj.parentNode; } return form.length ? form[0] : null;
if(fo_obj.nodeName == 'FORM') return fo_obj;
return;
} }
function getAutoSavedSrl(ret_obj, response_tags, c) { function getAutoSavedSrl(ret_obj) {
var editor_sequence = ret_obj.editor_sequence; var editor_sequence = ret_obj.editor_sequence;
var primary_key = ret_obj.key; var primary_key = ret_obj.key;
var fo_obj = getCkFormInstance(editor_sequence); var fo_obj = getCkFormInstance(editor_sequence);
if(ret_obj.document_srl !== 0) if(ret_obj.document_srl !== 0)
{ {
fo_obj[primary_key].value = ret_obj.document_srl; fo_obj[primary_key].value = ret_obj.document_srl;
@ -76,46 +74,48 @@ function getAutoSavedSrl(ret_obj, response_tags, c) {
editorInit : function(containerEl, opts) { editorInit : function(containerEl, opts) {
var self = this; var self = this;
var $containerEl = containerEl; var $containerEl = containerEl;
var $form = $containerEl.closest('form'); var form = $containerEl.closest('form');
var $contentField = $form.find(opts.content_field);
var data = $containerEl.data(); var data = $containerEl.data();
var editor_sequence = $containerEl.data().editorSequence; var editor_sequence = data.editorSequence;
var primary_key = $containerEl.data().editorPrimaryKeyName; var primary_key = data.editorPrimaryKeyName;
var primary_input = form.find("[name='" + primary_key + "']");
var content_key = data.editorContentKeyName;
var content_input = form.find("[name='" + content_key + "']");
var fo_obj = getCkFormInstance(editor_sequence); var fo_obj = getCkFormInstance(editor_sequence);
this.ckeconfig = $.extend({}, default_ckeconfig, opts.ckeconfig || {}); this.ckeconfig = $.extend({}, default_ckeconfig, opts.ckeconfig || {});
this.ckeconfig.bodyClass = this.ckeconfig.bodyClass + ' color_scheme_' + getColorScheme() + this.ckeconfig.bodyClass = this.ckeconfig.bodyClass + ' color_scheme_' + getColorScheme() +
($('body').hasClass('cke_auto_dark_mode') ? ' cke_auto_dark_mode' : ''); ($('body').hasClass('cke_auto_dark_mode') ? ' cke_auto_dark_mode' : '');
this.editor_sequence = data.editorSequence; this.editor_sequence = editor_sequence;
$form.attr('editor_sequence', data.editorSequence); form.attr('editor_sequence', editor_sequence);
if(CKEDITOR.env.mobile) CKEDITOR.env.isCompatible = true; if(CKEDITOR.env.mobile) CKEDITOR.env.isCompatible = true;
// saved document(자동저장 문서)에 대한 확인 // saved document(자동저장 문서)에 대한 확인
if(typeof(fo_obj._saved_doc_title)!= "undefined") { ///<< _saved_doc_title field가 없으면 자동저장 하지 않음 if(typeof(fo_obj._saved_doc_title)!= "undefined") { ///<< _saved_doc_title field가 없으면 자동저장 하지 않음
var saved_title = fo_obj._saved_doc_title.value; var saved_title = fo_obj._saved_doc_title.value;
var saved_content = fo_obj._saved_doc_content.value; var saved_content = fo_obj._saved_doc_content.value;
if(saved_title || saved_content) { if(saved_title || saved_content) {
// 자동저장된 문서 활용여부를 물은 후 사용하지 않는다면 자동저장된 문서 삭제 // 자동저장된 문서 활용여부를 물은 후 사용하지 않는다면 자동저장된 문서 삭제
if(confirm(fo_obj._saved_doc_message.value)) { if (confirm(fo_obj._saved_doc_message.value)) {
if(typeof(fo_obj.title)!='undefined') fo_obj.title.value = saved_title; if(typeof(fo_obj.title) !== 'undefined') {
$contentField.val(saved_content); fo_obj.title.value = saved_title;
}
var param = []; content_input.val(saved_content);
param.editor_sequence = editor_sequence; exec_json('editor.procEditorLoadSavedDocument', {
param.primary_key = primary_key; editor_sequence: editor_sequence,
param.mid = current_mid; primary_key: primary_key,
var response_tags = new Array("error","message","editor_sequence","key","title","content","document_srl"); mid: current_mid
exec_xml('editor',"procEditorLoadSavedDocument", param, getAutoSavedSrl, response_tags); }, getAutoSavedSrl);
} else { } else {
editorRemoveSavedDoc(); editorRemoveSavedDoc();
} }
} }
} }
var instance = CKEDITOR.appendTo($containerEl[0], {}, $contentField.val()); var instance = CKEDITOR.appendTo($containerEl[0], {}, content_input.val());
instance.on('customConfigLoaded', function(e) { instance.on('customConfigLoaded', function(e) {
instance.config = $.extend({}, e.editor.config, self.ckeconfig); instance.config = $.extend({}, e.editor.config, self.ckeconfig);
@ -173,17 +173,19 @@ function getAutoSavedSrl(ret_obj, response_tags, c) {
$containerEl.data('cke_instance', instance); $containerEl.data('cke_instance', instance);
window.editorRelKeys[data.editorSequence] = {}; window.editorRelKeys[data.editorSequence] = {};
window.editorRelKeys[data.editorSequence].primary = $form.find('[name='+data.editorPrimaryKeyName+']')[0]; window.editorRelKeys[data.editorSequence].primary = primary_input[0];
window.editorRelKeys[data.editorSequence].content = $form.find('[name='+data.editorContentKeyName+']')[0]; window.editorRelKeys[data.editorSequence].content = content_input[0];
window.editorRelKeys[data.editorSequence].func = function(seq) { window.editorRelKeys[data.editorSequence].func = function(seq) {
return self.getContent.call(self, seq); return self.getContent.call(self, seq);
}; };
window.editorRelKeys[data.editorSequence].pasteHTML = function(text){ window.editorRelKeys[data.editorSequence].pasteHTML = function(text){
instance.insertHtml(text, 'html'); instance.insertHtml(text, 'html');
}; };
// 자동저장 필드가 있다면 자동 저장 기능 활성화 // 자동저장 필드가 있다면 자동 저장 기능 활성화
if(typeof(fo_obj._saved_doc_title)!="undefined" ) editorEnableAutoSave(fo_obj, editor_sequence); if (typeof(fo_obj._saved_doc_title) !== 'undefined') {
editorEnableAutoSave(fo_obj, editor_sequence);
}
}, },
getContent : function(seq) { getContent : function(seq) {
var self = this; var self = this;