Files
firstgarden-web-gnu/plugin/editor/rb.editor/autosave.editor.js
2025-07-02 14:13:16 +09:00

131 lines
5.1 KiB
JavaScript

var AUTOSAVE_INTERVAL = 600000;
function autosave() {
//console.log("자동 저장 실행");
$("form#fwrite").each(function () {
let contentToSave = "";
const formElement = this; // 현재 폼 요소를 formElement로 지정
const uid = $(formElement).find("input[name='uid']").val(); // ✅ uid 가져오기
if (typeof g5_editor !== "undefined") {
if (g5_editor.indexOf("ckeditor4") !== -1 && typeof CKEDITOR.instances.wr_content !== "undefined") {
contentToSave = CKEDITOR.instances.wr_content.getData();
} else if (g5_editor.indexOf("cheditor5") !== -1 && typeof ed_wr_content !== "undefined") {
contentToSave = ed_wr_content.outputBodyHTML();
} else if (g5_editor.indexOf("rb.editor") !== -1) {
//console.log("RB 에디터 감지됨");
const editorIframe = document.querySelector("iframe[data-editor-id]");
if (editorIframe) {
//console.log("iframe 메시지 전송 시작");
// RB 에디터에서 데이터 요청
editorIframe.contentWindow.postMessage({
type: "rbeditor-get-content"
}, "*");
// 메시지 이벤트 리스너 추가 (한 번만 실행되도록 변경)
const messageHandler = function (event) {
if (event.data.type === "rbeditor-content") {
//console.log("RB 에디터에서 데이터 응답 받음", event.data);
contentToSave = event.data.content;
saveContentToServer(formElement, contentToSave); // formElement를 올바르게 전달
window.removeEventListener("message", messageHandler);
}
};
// 기존 중복 등록 방지 후 추가
window.removeEventListener("message", messageHandler);
window.addEventListener("message", messageHandler);
} else {
console.error("에디터를 찾을 수 없습니다.");
}
}
}
// ✅ 기존 CKEditor, cheditor 데이터 저장
if (contentToSave) {
saveContentToServer(formElement, contentToSave); // ✅ formElement를 올바르게 전달
}
});
}
function saveContentToServer(formElement, content) {
const uid = $(formElement).find("input[name='uid']").val(); // uid 값을 가져옴
const subject = $(formElement).find("input[name='wr_subject']").val(); // 제목 가져오기
//if (save_wr_subject !== subject || save_wr_content !== content) { 클릭 > 저장 기존데이터 덮어쓰지 않음
$.ajax({
url: g5_bbs_url + "/ajax.autosave.php",
data: {
"uid": uid, // 아이프레임 부모에서 uid 값을 올바르게 가져옴
"subject": subject,
"content": content
},
type: "POST",
success: function (data) {
if (data) {
$("#autosave_count").html(data);
//console.log("자동저장 완료", data);
alert('임시저장이 완료 되었습니다.');
} else {
alert('저장될 내용과 이전 내용이 동일합니다.\n최초 저장시 제목을 입력해주셔야 합니다.');
}
},
error: function (xhr, status, error) {
console.error("AJAX 오류:", error); // 에러 로그 추가
}
});
save_wr_subject = subject;
save_wr_content = content;
//}
}
// 아이프레임 내부 버튼클릭, 정보받기
window.addEventListener("message", function (event) {
if (event.data.type === "autosave-trigger") {
//console.log("RB 에디터에서 autosave-trigger 요청 수신 → autosave 실행");
autosave();
}
if (event.data.type === "trigger-autosave-popup") {
//console.log("팝업 실행");
$("#btn_autosave").click(); // 기존 버튼 클릭 이벤트 실행
}
});
$(document).on('click', '.autosave_load', function () {
var $li = $(this).parents('li');
var as_id = $li.data('as_id');
var as_uid = $li.data('uid');
$('#fwrite input[name=\"uid\"]').val(as_uid);
$.get(g5_bbs_url + '/ajax.autosaveload.php', {
'as_id': as_id
}, function (data) {
var subject = $(data).find('item').find('subject').text();
var content = $(data).find('item').find('content').text();
$('#wr_subject').val(subject);
// RB 에디터가 존재하는 경우 iframe으로 데이터 전달
const editorIframe = document.querySelector('iframe[data-editor-id]');
if (editorIframe) {
editorIframe.contentWindow.postMessage({
type: 'rbeditor-insert-content',
content: content
}, '*');
} else {
console.error('에디터를 찾을 수 없습니다.');
}
}, 'xml');
$('#autosave_pop').hide();
});