Files
plugins/Version/js/overwrite.js
chorblack e75f275ef4
Some checks failed
定时更新GitHub源插件 / 自动更新GitHub插件 (push) Has been cancelled
Initial commit
2026-03-07 11:19:25 +08:00

257 lines
7.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 覆盖掉原有的代码只为控制自动保存机制不得不说官方js的代码一言难尽
// 不得不写出这么长的代码覆盖掉原代码
// 那么多代码都是被迫依赖的,核心目的只是控制自动保存时带个参数,让服务端那边
// 能识别出来是自动保存的而不是手动保存的
function version_plugin_overwrite()
{
// 控制选项和附件的切换(Copy自write-js.php)
// 官方没有封装成函数,无法直接调用执行
// 无奈只好照着写了一遍,为的是将新添加的"历史版本"按钮也注册到选项卡里
var fileUploadInit = false;
$('#edit-secondary .typecho-option-tabs li').unbind('click')
$('#edit-secondary .typecho-option-tabs li').click(function() {
$('#edit-secondary .typecho-option-tabs li').removeClass('active');
$(this).addClass('active');
$(this).parents('#edit-secondary').find('.tab-content').addClass('hidden');
var selected_tab = $(this).find('a').attr('href'),
selected_el = $(selected_tab).removeClass('hidden');
if (!fileUploadInit) {
selected_el.trigger('init');
fileUploadInit = true;
}
return false;
});
// 改动:
// 1. saveData()增加了一个参数t作为一个额外的GET请求被一起发送出去用于标识是
// 自动保存的还是手动保存的
// 2. :input监听器可能是想监听所有可输入的元素我增加了一个额外的排除规则防止
// 编辑历史版本的标签时被误以为改动了文章而发起一个不必要的保存请求
// 3. 在:input监听器中插入了changed = true;来使对第三方编辑器也生效(我用的EDITMD其它暂未测试)
//
// 其它部分没有改动都是按着write-js.php复制过来的无奈官方代码卸载一个函数内没办法直
// 接操作只能将大部分代码再次重写一遍以解决变量依赖的问题
//// 重写原有代码 开始
var submitted = false
var form = $('form[name=write_post],form[name=write_page]')
var formAction = form.attr('action')
var idInput = $('input[name=cid]')
var cid = idInput.val()
var draft = $('input[name=draft]')
var draftId = draft.length > 0 ? draft.val() : 0
var locked = false
var btnSave = $('#btn-save')
var btnSubmit = $('#btn-submit')
var btnPreview = $('#btn-preview')
var doAction = $('input[name="do"]', form)
var changed = false
var autoSave = $('#auto-save-message')
var lastSaveTime = null
form.submit(function () {
submitted = true;
})
$(':input', form).unbind('input change')
$(':input', form).bind('input change', function (e) {
var tagName = $(this).prop('tagName');
if ((tagName.match(/(input|textarea)/i) && e.type == 'change') ||
$(this).hasClass('version-plugin-not-listen-input')) { // 修改历史版本上的标签不算编辑文章内容所以return
return;
}
changed = true;
});
form.unbind('field')
form.bind('field', function () {
changed = true;
});
////
// 发送保存请求
function saveData(cb, t)
{
t = t || 'none'
function callback(o) {
lastSaveTime = o.time;
cid = o.cid;
draftId = o.draftId;
idInput.val(cid);
autoSave.text('已保存' + ' (' + o.time + ')').effect('highlight', 1000);
locked = false;
btnSave.removeAttr('disabled');
btnPreview.removeAttr('disabled');
if (!!cb) {
cb(o)
}
}
changed = false;
btnSave.attr('disabled', 'disabled');
btnPreview.attr('disabled', 'disabled');
autoSave.text('正在保存');
if (typeof FormData !== 'undefined') {
var data = new FormData(form.get(0));
data.append('do', 'save');
$.ajax({
url: formAction + "&t="+t,
processData: false,
contentType: false,
type: 'POST',
data: data,
success: callback
});
} else {
var data = form.serialize() + '&do=save';
$.post(formAction + "&t="+t, data, callback, 'json');
}
}
////
var autoSaveOnce = !!cid;
function autoSaveListener () {
setInterval(function () {
if (changed && !locked) {
locked = true;
saveData(null, 'auto');
}
}, 10000);
}
if (autoSaveOnce) {
autoSaveListener();
}
$('#text').unbind('input propertychange')
$('#text').bind('input propertychange', function () {
if (!locked) {
autoSave.text('尚未保存 ' + (lastSaveTime ? '(上次保存时间' + lastSaveTime + ')' : ''));
}
changed = true
if (!autoSaveOnce) {
autoSaveOnce = true;
autoSaveListener();
}
});
////
// 自动检测离开页
$(window).unbind('beforeunload')
$(window).bind('beforeunload', function () {
if (changed && !submitted) {
return '内容已经改变尚未保存, 您确认要离开此页面吗?';
}
});
////
// 预览功能
var isFullScreen = false;
function previewData(cid) {
isFullScreen = $(document.body).hasClass('fullscreen');
$(document.body).addClass('fullscreen preview');
var frame = $('<iframe frameborder="0" class="preview-frame preview-loading"></iframe>')
.attr('src', './preview.php?cid=' + cid)
.attr('sandbox', 'allow-scripts')
.appendTo(document.body);
frame.load(function () {
frame.removeClass('preview-loading');
});
frame.height($(window).height() - 53);
}
function cancelPreview() {
if (submitted) {
return;
}
if (!isFullScreen) {
$(document.body).removeClass('fullscreen');
}
$(document.body).removeClass('preview');
$('.preview-frame').remove();
};
$('#btn-cancel-preview').unbind('click')
$('#btn-cancel-preview').click(cancelPreview);
$('#window').unbind('message')
$(window).bind('message', function (e) {
if (e.originalEvent.data == 'cancelPreview') {
cancelPreview();
}
});
btnPreview.unbind('click')
btnPreview.click(function () {
if (changed) {
locked = true;
if (confirm('修改后的内容需要保存后才能预览, 是否保存?')) {
saveData(function (o) {
previewData(o.draftId);
});
} else {
locked = false;
}
} else if (!!draftId) {
previewData(draftId);
} else if (!!cid) {
previewData(cid);
}
});
btnSave.unbind('click')
btnSave.click(function () {
doAction.attr('value', 'save');
});
btnSubmit.unbind('click')
btnSubmit.click(function () {
doAction.attr('value', 'publish');
});
}