141 lines
4.7 KiB
JavaScript
141 lines
4.7 KiB
JavaScript
/* ******************** DRAFT SUPPORT ******************** */
|
|
|
|
/* RULES:
|
|
-- don't save if they have typed in last 3 seconds, unless it's been
|
|
15 seconds.
|
|
*/
|
|
|
|
var LJDraft = {};
|
|
|
|
LJDraft.saveInProg = false;
|
|
LJDraft.maxTimeout = 15000; // Maximum length of time to go between saves, even if user is still typing
|
|
LJDraft.inputDelay = 3000; // Input debounce delay, so we're not saving on each individual keypress
|
|
LJDraft.savedMsg = "Autosaved at [[time]]";
|
|
|
|
LJDraft.handleInput = function (evt) {
|
|
const date = Date.now();
|
|
if (LJDraft.saveTimeout == null) {
|
|
LJDraft.saveTimeout = date;
|
|
} else if (date - LJDraft.saveTimeout > LJDraft.maxTimeout) {
|
|
// Clear any existing delayed fuction call and save now
|
|
if (LJDraft.timer) {
|
|
clearTimeout(LJDraft.timer);
|
|
}
|
|
LJDraft.saveBody();
|
|
return;
|
|
}
|
|
|
|
clearTimeout(LJDraft.timer);
|
|
LJDraft.timer = setTimeout(function () {
|
|
LJDraft.saveBody();
|
|
}, LJDraft.inputDelay);
|
|
|
|
}
|
|
|
|
LJDraft.handleChange = function (evt) {
|
|
if (evt.target.id == "entry-body") {
|
|
LJDraft.saveBody();
|
|
} else {
|
|
LJDraft.saveProperties();
|
|
}
|
|
}
|
|
|
|
LJDraft.saveProperties = function () {
|
|
let newProps = {
|
|
saveEditor: $("#editor").val(),
|
|
saveSubject: $("#id-subject-0").val(),
|
|
saveTaglist: $("#js-taglist").val(),
|
|
saveMoodID: $("#js-current-mood").val(),
|
|
saveMood: $("#js-current-mood-other").val(),
|
|
saveLocation: $("#current-location").val(),
|
|
saveMusic: $("#current-music").val(),
|
|
saveAdultReason: $("#age_restriction_reason").val(),
|
|
saveCommentSet: $("#comment_settings").val(),
|
|
saveCommentScr: $("#opt_screening").val(),
|
|
saveAdultCnt: $("#age_restriction").val(),
|
|
};
|
|
|
|
if ( $("#prop_picture_keyword") ) { //In case the user has no userpics
|
|
newProps.saveUserpic = $("#prop_picture_keyword").val();
|
|
};
|
|
|
|
$.post("/__rpc_draft", newProps);
|
|
|
|
};
|
|
|
|
LJDraft.saveBody = function () {
|
|
// Clear our global save timeout
|
|
LJDraft.saveTimeout = null;
|
|
LJDraft.saveInProg = true;
|
|
let curBody;
|
|
|
|
if ($("#entry-body").css('display') == 'none') { // Need to check this to deal with hitting the back button
|
|
// Since they may start using the RTE in the middle of writing their
|
|
// entry, we should just get the editor each time.
|
|
if (! FCKeditorAPI) return;
|
|
var oEditor = FCKeditorAPI.GetInstance('entry-body');
|
|
if (oEditor.GetXHTML) {
|
|
curBody = oEditor.GetXHTML(true);
|
|
curBody = curBody.replace(/\n/g, '');
|
|
}
|
|
} else {
|
|
curBody = $("#entry-body").val();
|
|
}
|
|
|
|
$.post("/__rpc_draft", {"saveDraft": curBody}, function () {
|
|
let date = new Date();
|
|
let msg = LJDraft.savedMsg.replace(/\[\[time\]\]/, date.toLocaleTimeString('en-US', {timeStyle: "medium"}));
|
|
$("#draftstatus").text(msg + ' ');
|
|
LJDraft.saveInProg = false;
|
|
});
|
|
|
|
};
|
|
|
|
function initDraft(askToRestore) {
|
|
if (askToRestore && restoredDraft) {
|
|
if (confirm(confirmMsg)) {
|
|
// If the user wants to restore the draft, we place the
|
|
// values of their saved draft into the form.
|
|
$("#entry-body").val(restoredDraft);
|
|
$("#editor").val(restoredEditor);
|
|
$("#draftstatus").text(restoredMsg);
|
|
$("#id-subject-0").val(restoredSubject);
|
|
$("#js-taglist").val(restoredTaglist);
|
|
$("#js-current-mood").val(restoredMoodID);
|
|
$("#js-current-mood-other").val(restoredMood);
|
|
$("#current-location").val(restoredLocation);
|
|
$("#current-music").val(restoredMusic);
|
|
$("#age_restriction_reason").val(restoredAdultReason);
|
|
$("#comment_settings").val(restoredCommentSet);
|
|
$("#opt_screening").val(restoredCommentScr);
|
|
$("#age_restriction").val(restoredAdultCnt);
|
|
if ( $("#prop_picture_keyword") ) {
|
|
$("#prop_picture_keyword").val(restoredUserpic);
|
|
$("#prop_picture_keyword").trigger("change");
|
|
}
|
|
} else {
|
|
// Clear out their current draft
|
|
$.post("/__rpc_draft", {clearProperties: 1, clearDraft: 1});
|
|
}
|
|
}
|
|
|
|
// set up event handlers
|
|
$("#content").on('change', '.draft-autosave', null, LJDraft.handleChange);
|
|
$("#content").on('input', '#entry-body', null, LJDraft.handleInput);
|
|
|
|
}
|
|
|
|
|
|
|
|
//LJDraft.maxTimeout = autoSaveInterval;
|
|
LJDraft.savedMsg = savedMsg;
|
|
|
|
if (should_init != null) {
|
|
initDraft(should_init);
|
|
|
|
// Hook into the RTE iframe once it's loaded, if we have draft support.
|
|
function FCKeditor_OnComplete( editor ){
|
|
editor.EditorDocument.addEventListener('input', LJDraft.handleInput);
|
|
};
|
|
}
|
|
|