From 76b167d5985f11de1a002a6079ff1ea54ccfd8c1 Mon Sep 17 00:00:00 2001 From: TheTVExpert <73130180+TheTVExpert@users.noreply.github.com> Date: Mon, 18 Jan 2021 15:50:08 -0600 Subject: [PATCH 1/2] fluff: Allow for a list of custom edit summaries --- modules/twinkleconfig.js | 9 +++- modules/twinklefluff.js | 89 ++++++++++++++++++++++++++++------------ twinkle.js | 1 + 3 files changed, 72 insertions(+), 27 deletions(-) diff --git a/modules/twinkleconfig.js b/modules/twinkleconfig.js index 5edf054d2..4083c5171 100644 --- a/modules/twinkleconfig.js +++ b/modules/twinkleconfig.js @@ -402,7 +402,14 @@ Twinkle.config.sections = [ type: 'enum', enumValues: Twinkle.config.watchlistEnums }, - + { + name: 'customReversionSummaryList', + label: 'Custom reversion edit summaries to display', + helptip: 'These appear as options in the enter reversion edit summary dialog', + type: 'customList', + customListValueTitle: 'Edit summary', + customListLabelTitle: 'Text to show in the dialog' + }, // TwinkleConfig.offerReasonOnNormalRevert (boolean) // If to offer a prompt for extra summary reason for normal reverts, default to true { diff --git a/modules/twinklefluff.js b/modules/twinklefluff.js index 466508926..4bc738fd2 100644 --- a/modules/twinklefluff.js +++ b/modules/twinklefluff.js @@ -373,7 +373,7 @@ Twinkle.fluff.revert = function revertPage(type, vandal, rev, page) { type: 'csrf', format: 'json' }; - var wikipedia_api = new Morebits.wiki.api('Grabbing data of earlier revisions', query, Twinkle.fluff.callbacks.main); + var wikipedia_api = new Morebits.wiki.api('Grabbing data of earlier revisions', query, Twinkle.fluff.getSummary); wikipedia_api.params = params; wikipedia_api.post(); }; @@ -395,13 +395,61 @@ Twinkle.fluff.revertToRevision = function revertToRevision(oldrev) { type: 'csrf', format: 'json' }; - var wikipedia_api = new Morebits.wiki.api('Grabbing data of the earlier revision', query, Twinkle.fluff.callbacks.toRevision); - wikipedia_api.params = { rev: oldrev }; + var wikipedia_api = new Morebits.wiki.api('Grabbing data of the earlier revision', query, Twinkle.fluff.getSummary); + wikipedia_api.params = { rev: oldrev, type: 'torev' }; wikipedia_api.post(); }; +Twinkle.fluff.getSummary = function getSummary(apiobj) { + Twinkle.fluff.apiobj = apiobj; + var params = apiobj.params; + var type = params.type; + if (type === 'vand' || (type === 'norm' && !Twinkle.getPref('offerReasonOnNormalRevert'))) { + Twinkle.fluff.callbacks.main('noSummary'); + } else { + Twinkle.fluff.simpleWindow = new Morebits.simpleWindow(600, 350); + Twinkle.fluff.simpleWindow.setTitle('Enter reversion edit summary'); + Twinkle.fluff.simpleWindow.setScriptName('Twinkle'); + Twinkle.fluff.simpleWindow.addFooterLink('Revert and rollback prefs', 'WP:TW/PREF#fluff'); + Twinkle.fluff.simpleWindow.addFooterLink('Twinkle help', 'WP:TW/DOC#fluff'); + var form = new Morebits.quickForm(type === 'torev' ? Twinkle.fluff.callbacks.toRevision : Twinkle.fluff.callbacks.main); + if (Twinkle.getPref('customReversionSummaryList').length) { + form.append({ + type: 'radio', + name: 'summaryList', + list: Twinkle.getPref('customReversionSummaryList'), + event: function(event) { + var esForm = event.target.form; + esForm.summary.value = this.value; + event.stopPropagation(); + } + }); + } + form.append({ + id: 'editSummaryInput', + type: 'input', + name: 'summary', + label: 'Edit summary: ' + }); + form.append({ type: 'submit' }); + var result = form.render(); + Twinkle.fluff.simpleWindow.setContent(result); + Twinkle.fluff.simpleWindow.display(); + document.getElementById('editSummaryInput').focus(); + } +}; + Twinkle.fluff.callbacks = { - toRevision: function(apiobj) { + toRevision: function(e) { + var optional_summary; + if (e !== 'noSummary') { + e.preventDefault(); + var form = e.target; + var input = Morebits.quickForm.getInputData(form); + optional_summary = input.summary; + Twinkle.fluff.simpleWindow.close(); + } + var apiobj = Twinkle.fluff.apiobj; var response = apiobj.getResponse(); var loadtimestamp = response.curtimestamp; @@ -421,12 +469,6 @@ Twinkle.fluff.callbacks = { return; } - var optional_summary = prompt('Please specify a reason for the revert: ', ''); // padded out to widen prompt in Firefox - if (optional_summary === null) { - apiobj.statelem.error('Aborted by user.'); - return; - } - var summary = Twinkle.fluff.formatSummary('Reverted to revision ' + revertToRevID + ' by $USER', revertToUserHidden ? null : revertToUser, optional_summary); @@ -467,7 +509,16 @@ Twinkle.fluff.callbacks = { wikipedia_api.params = apiobj.params; wikipedia_api.post(); }, - main: function(apiobj) { + main: function(e) { + var extra_summary; + if (e !== 'noSummary') { + e.preventDefault(); + var form = e.target; + var input = Morebits.quickForm.getInputData(form); + extra_summary = input.summary; + Twinkle.fluff.simpleWindow.close(); + } + var apiobj = Twinkle.fluff.apiobj; var response = apiobj.getResponse(); var loadtimestamp = response.curtimestamp; @@ -601,14 +652,9 @@ Twinkle.fluff.callbacks = { statelem.status([ ' revision ', Morebits.htmlNode('strong', params.goodid), ' that was made ', Morebits.htmlNode('strong', mw.language.convertNumber(count)), ' revisions ago by ', Morebits.htmlNode('strong', params.gooduserHidden ? Twinkle.fluff.hiddenName : params.gooduser) ]); - var summary, extra_summary; + var summary; switch (params.type) { case 'agf': - extra_summary = prompt('An optional comment for the edit summary: ', ''); // padded out to widen prompt in Firefox - if (extra_summary === null) { - statelem.error('Aborted by user.'); - return; - } userHasAlreadyConfirmedAction = true; summary = Twinkle.fluff.formatSummary('Reverted [[WP:AGF|good faith]] edits by $USER', @@ -623,15 +669,6 @@ Twinkle.fluff.callbacks = { case 'norm': /* falls through */ default: - if (Twinkle.getPref('offerReasonOnNormalRevert')) { - extra_summary = prompt('An optional comment for the edit summary: ', ''); // padded out to widen prompt in Firefox - if (extra_summary === null) { - statelem.error('Aborted by user.'); - return; - } - userHasAlreadyConfirmedAction = true; - } - summary = Twinkle.fluff.formatSummary('Reverted ' + params.count + (params.count > 1 ? ' edits' : ' edit') + ' by $USER', params.userHidden ? null : params.user, extra_summary); break; diff --git a/twinkle.js b/twinkle.js index bbca00a1f..ac8d0970d 100644 --- a/twinkle.js +++ b/twinkle.js @@ -69,6 +69,7 @@ Twinkle.defaultConfig = { markRevertedPagesAsMinor: [ 'vand' ], watchRevertedPages: [ 'agf', 'norm', 'vand', 'torev' ], watchRevertedExpiry: 'yes', + customReversionSummaryList: [{value: 'Unsourced addition', label: 'Unsourced'}, {value: 'Unexplained removal of content', label: 'Removal of content'}, {value: 'Potential copyright violation', label: 'Copyright violation'}, {value: 'Disruptive editing', label: 'Disruptive editing'}], offerReasonOnNormalRevert: true, confirmOnFluff: false, confirmOnMobileFluff: true, From f20dbaf4a8c2456feda9afe25ec26a673ad83aea Mon Sep 17 00:00:00 2001 From: TheTVExpert <73130180+TheTVExpert@users.noreply.github.com> Date: Tue, 26 Jan 2021 09:03:30 -0600 Subject: [PATCH 2/2] fluff: Allow for a list of custom edit summaries --- modules/twinklefluff.js | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/modules/twinklefluff.js b/modules/twinklefluff.js index 634c68bff..4ba943b01 100644 --- a/modules/twinklefluff.js +++ b/modules/twinklefluff.js @@ -407,15 +407,17 @@ Twinkle.fluff.getSummary = function getSummary(apiobj) { if (type === 'vand' || (type === 'norm' && !Twinkle.getPref('offerReasonOnNormalRevert'))) { Twinkle.fluff.callbacks.main('noSummary'); } else { - Twinkle.fluff.simpleWindow = new Morebits.simpleWindow(600, 350); - Twinkle.fluff.simpleWindow.setTitle('Enter reversion edit summary'); - Twinkle.fluff.simpleWindow.setScriptName('Twinkle'); - Twinkle.fluff.simpleWindow.addFooterLink('Revert and rollback prefs', 'WP:TW/PREF#fluff'); - Twinkle.fluff.simpleWindow.addFooterLink('Twinkle help', 'WP:TW/DOC#fluff'); + Twinkle.fluff.summaryWindow = new Morebits.simpleWindow(600, 350); + Twinkle.fluff.summaryWindow.setTitle('Enter reversion edit summary'); + Twinkle.fluff.summaryWindow.setScriptName('Twinkle'); + Twinkle.fluff.summaryWindow.setModality('true'); + Twinkle.fluff.summaryWindow.addFooterLink('Revert and rollback prefs', 'WP:TW/PREF#fluff'); + Twinkle.fluff.summaryWindow.addFooterLink('Twinkle help', 'WP:TW/DOC#fluff'); + Twinkle.fluff.summaryWindow.addFooterLink('Give feedback', 'WT:TW'); var form = new Morebits.quickForm(type === 'torev' ? Twinkle.fluff.callbacks.toRevision : Twinkle.fluff.callbacks.main); if (Twinkle.getPref('customReversionSummaryList').length) { form.append({ - type: 'radio', + type: 'select', name: 'summaryList', list: Twinkle.getPref('customReversionSummaryList'), event: function(event) { @@ -429,13 +431,19 @@ Twinkle.fluff.getSummary = function getSummary(apiobj) { id: 'editSummaryInput', type: 'input', name: 'summary', - label: 'Edit summary: ' + label: 'Edit summary: ', + size: '50' }); form.append({ type: 'submit' }); var result = form.render(); - Twinkle.fluff.simpleWindow.setContent(result); - Twinkle.fluff.simpleWindow.display(); + Twinkle.fluff.summaryWindow.setContent(result); + Twinkle.fluff.summaryWindow.display(); document.getElementById('editSummaryInput').focus(); + $('.ui-dialog').on('dialogclose', function(event) { + if (event.originalEvent) { + apiobj.statelem.error('Aborted by user.'); + } + }); } }; @@ -447,7 +455,7 @@ Twinkle.fluff.callbacks = { var form = e.target; var input = Morebits.quickForm.getInputData(form); optional_summary = input.summary; - Twinkle.fluff.simpleWindow.close(); + Twinkle.fluff.summaryWindow.close(); } var apiobj = Twinkle.fluff.apiobj; var response = apiobj.getResponse(); @@ -516,7 +524,7 @@ Twinkle.fluff.callbacks = { var form = e.target; var input = Morebits.quickForm.getInputData(form); extra_summary = input.summary; - Twinkle.fluff.simpleWindow.close(); + Twinkle.fluff.summaryWindow.close(); } var apiobj = Twinkle.fluff.apiobj; var response = apiobj.getResponse();