“MediaWiki:Gadget-EditDraft.js”的版本间的差异
来自希灵百科
(创建页面,内容为“→eslint-disable: "use strict"; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descript...”) |
(没有差异)
|
2017年1月18日 (三) 13:33的最新版本
/* eslint-disable */
"use strict";
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var QuickSaveDraftUI = function () {
function QuickSaveDraftUI(buttonArea, textarea, section, timer) {
_classCallCheck(this, QuickSaveDraftUI);
var //vscode的缩进还是有问题
saveButton = $('<input/>', {
class: 'QuickSaveDraftSaveButton',
val: '立即保存草稿',
attr: {
type: 'button'
}
}),
recoverButton = $('<input/>', {
class: 'QuickSaveDraftRecoverButton',
val: '暂无草稿',
attr: {
type: 'button'
}
}).disable(),
rollbackButton = $('<input/>', {
class: 'QuickSaveDraftRollbackButton',
val: '回退还原',
attr: {
type: 'button'
}
}).disable(),
timerInput = $('<input/>', {
class: 'QuickSaveDraftTimerInput',
val: timer, //默认值
maxlength: 2
}),
timerSave = $('<span/>', {
id: 'QuickSaveDraftTimerSave'
}),
lastRun = $('<div/>', {
class: 'QuickSaveDraftLastRunDiv',
text: '上次草稿保存于'
}).append($('<span/>', {
class: 'QuickSaveDraftLastRun'
})),
pasueButton = $('<input/>', {
class: 'QuickSaveDraftPauseButton',
val: '点击暂停自动保存',
attr: {
type: 'button'
}
}),
sectionList = $('<div/>').append('当前章节号为').append($('<span/>', {
class: 'QuickSaveDraftSectionNow',
css: {
'font-weight': 'bold'
},
text: section
})).append($('<span/>', {
class: 'QuickSaveDraftSectionDraftSpan',
text: ',草稿章节号为'
}).append($('<span/>', {
class: 'QuickSaveDraftSectionDraft'
}))).append($('<span/>', {
class: 'QuickSaveDraftSame',
text: ',草稿内容与当前编辑内容一致'
}));
buttonArea.append(saveButton).append(recoverButton).append(rollbackButton).append('每隔').append(timerInput).append('分钟保存一次').append(timerSave).append(pasueButton).append(lastRun).append(sectionList);
Object.assign(this, {
textarea: textarea,
saveButton: saveButton,
recoverButton: recoverButton,
rollbackButton: rollbackButton,
pasueButton: pasueButton,
timerInput: timerInput,
lastRun: lastRun,
sectionList: sectionList,
timerSave: timerSave,
timerSaveCode: null
});
}
_createClass(QuickSaveDraftUI, [{
key: 'watch',
value: function watch(callback) {
var self = this;
self.timerInput.on('input', function () {
var result = callback($(this).val()) ? ',保存成功!' : ',保存失败';
self.timerSave.text(result);
self.timerSave.removeClass('disapper');
if (self.timerSaveCode) window.clearTimeout(self.timerSaveCode);
self.timerSaveCode = window.setTimeout(function () {
self.timerSave.addClass('disapper');
}, 3000);
});
}
}, {
key: 'complement',
value: function complement(n, l) {
n += '';
if (n.length >= l) return n;
var b = '<span style="speak:none;visibility:hidden;color:transparent;">',
c = '';
while (l > (n + c).length) {
c += '0';
}return b + c + '</span>' + n;
}
}]);
return QuickSaveDraftUI;
}();
var QuickSaveDraft = function () {
function QuickSaveDraft() {
_classCallCheck(this, QuickSaveDraft);
var pagename = mw.config.get('wgPageName'),
user = mw.config.get('wgUserId');
//this.clear();
Object.assign(this, {
pagename: pagename,
user: user,
version: '2.0',
section: location.search.match(/section=(\d+)/) ? +location.search.match(/section=(\d+)/)[1] : -1,
pause: false,
originText: null
});
if (new Date().getTime() - +(this.get('timestamp') || '-1') > 86400) {
// day => millisecond
this.del('timestamp');
this.del('draft');
this.del('section');
}
if (['edit', 'submit'].indexOf(mw.config.get('wgAction')) !== -1) this.init();
}
_createClass(QuickSaveDraft, [{
key: 'clear',
value: function clear() {
for (var i in localStorage) {
if (/^AnnTools\-QuickSaveDraft/.test(i) && !/^AnnTools\-QuickSaveDraft\-\d/.test(i)) localStorage.removeItem(i);
}
}
}, {
key: 'init',
value: function init() {
var self = this,
textarea = $('#wpTextbox1'),
buttonArea = $('<div/>', {
css: {
'margin-top': '.5em'
}
}).appendTo('#editform .editButtons'),
date = self.get('timestamp') ? new Date(+self.get('timestamp')) : undefined;
this.UI = new QuickSaveDraftUI(buttonArea, textarea, self.getSection(+self.section), self.get('timer') || (self.set('timer', 5), 5));
self.UI.watch(self.saveTime);
self.UI.rollbackButton.on('click', function () {
if ($(this).is(':disabled') || self.originText === null) return;
textarea.val(self.originText);
self.originText = null;
$(this).disable();
self.check();
return false;
});
self.UI.recoverButton.on('click', function () {
if ($(this).is(':disabled')) return;
if (self.checkCurrentSection()) return;
self.originText = textarea.val();
textarea.val(self.get('draft'));
self.UI.rollbackButton.enable();
self.check();
return false;
});
self.UI.saveButton.on('click', function () {
if ($(this).is(':disabled')) return;
self.save(false);
return false;
});
self.UI.pasueButton.on('click', function () {
if (self.pause) {
$(this).val('点击暂停自动保存');
self.pause = false;
} else {
$(this).val('点击继续自动保存');
self.pause = true;
}
});
self.check();
/* 下面一行太长了,换一下行 */
if (date) self.UI.lastRun.fadeIn().find('span').html((date.getDate() === new Date().getDate() ? '今' : self.UI.complement(date.getDate(), 2)) + '日' + self.UI.complement(date.getHours(), 2) + '时' + self.UI.complement(date.getMinutes(), 2) + '分');
self.UI.sectionList.find('.QuickSaveDraftSectionDraft').text(self.get('section') || '【暂无】');
textarea.on('input change', function () {
self.check();
});
window.setTimeout(self.loop, self.getTime());
}
}, {
key: 'get',
value: function get(t) {
if (t === 'timer') return localStorage.getItem('AnnTools-QuickSaveDraft-' + this.user + '-timer');
return localStorage.getItem('AnnTools-QuickSaveDraft-' + this.user + '-' + t + '-' + this.pagename);
}
}, {
key: 'set',
value: function set(t, v) {
if (t === 'timer') return localStorage.setItem('AnnTools-QuickSaveDraft-' + this.user + '-timer', v);
return localStorage.setItem('AnnTools-QuickSaveDraft-' + this.user + '-' + t + '-' + this.pagename, v);
}
}, {
key: 'del',
value: function del(t) {
if (t === 'timer') return localStorage.removeItem('AnnTools-QuickSaveDraft-' + this.user + '-timer');
return localStorage.removeItem('AnnTools-QuickSaveDraft-' + this.user + '-' + t + '-' + this.pagename);
}
}, {
key: 'check',
value: function check() {
if (this.get('draft') === undefined) return this.UI.sectionList.find('.QuickSaveDraftSectionDraftSpan').fadeOut();
this.UI.sectionList.find('.QuickSaveDraftSectionDraftDraft').text(this.get('section')).parent().fadeIn();
if (this.checkCurrentSection()) //检测是否同一章节
return this.UI.recoverButton.disable().val('暂无草稿');
if (this.get('draft') !== this.UI.textarea.val()) {
//检测草稿是否一致
this.UI.recoverButton.enable().val('立即还原草稿');
this.UI.sectionList.find('.QuickSaveDraftSame').fadeOut();
} else {
this.UI.recoverButton.disable().val('暂无草稿');
this.UI.sectionList.find('.QuickSaveDraftSame').fadeIn();
}
}
}, {
key: 'checkCurrentSection',
value: function checkCurrentSection() {
return this.section !== (Number || Window).parseInt(this.get('section'));
}
}, {
key: 'getTime',
value: function getTime() {
return +this.get('timer') * 60000; //min => millisecond
}
}, {
key: 'saveTime',
value: function saveTime(time) {
if (!/\D/.test(time) && +time > 0) {
window.AnnTools.QuickSaveDraft.set('timer', time);
return true;
} else {
window.AnnTools.QuickSaveDraft.UI.timerInput.val(window.AnnTools.QuickSaveDraft.get('timer'));
return false;
}
}
}, {
key: 'save',
value: function save(s) {
var date = new Date(),
value = this.UI.textarea.val();
this.set('draft', value);
if (value != this.get('draft')) {
if (s) alert('当前页面内容过长,无法保存草稿!');
this.del('draft');
this.UI.recoverButton.fadeOut();
this.UI.saveButton.disable().val('无法保存草稿');
this.UI.lastRun.fadeIn().text('当前页面内容过长,无法保存草稿!');
return window.setTimeout(function () {
window.AnnTools.QuickSaveDraft.save = window.AnnTools.QuickSaveDraft.loop = function () {
return false;
};
}, 0);
}
this.set('section', this.getSection(+this.section));
this.set('timestamp', date.getTime());
this.UI.sectionList.find('.QuickSaveDraftSectionDraftSpan').fadeIn().find('.QuickSaveDraftSectionDraft').text(this.getSection(+this.section));
this.check();
this.UI.lastRun.fadeIn().find('span').html('今日' + this.UI.complement(date.getHours(), 2) + '时' + this.UI.complement(date.getMinutes(), 2) + '分');
}
}, {
key: 'loop',
value: function loop() {
if (!this.pause) window.AnnTools.QuickSaveDraft.save(true);
return window.setTimeout(window.AnnTools.QuickSaveDraft.loop, window.AnnTools.QuickSaveDraft.getTime());
}
}, {
key: 'getSection',
value: function getSection(s) {
return s === -1 ? '-1(全文)' : s;
}
}]);
return QuickSaveDraft;
}();
jQuery.fn.extend({
disable: function disable() {
return this.each(function () {
if ($(this).is('input,button')) this.disabled = true;
});
},
enable: function enable() {
return this.each(function () {
if ($(this).is('input,button')) this.disabled = false;
});
}
});
window.AnnTools = window.AnnTools || {};
window.AnnTools.QuickSaveDraft = new QuickSaveDraft();