User:NQ/WatchlistResetConfirm.js

/*Adds a confirmation dialogue to the Watchlist Reset button

https://en.wikipedia.org/w/index.php?title=Wikipedia:Village_pump_(technical)&oldid=746997333#Watchlist:_.22Are_you_sure_you_want_to_mark_all_pages_as_visited.3F.22

  • Licensed under the terms of the GNU General Public License
  • as published by the Free Software Foundation; either version 2
  • of the License, or (at your option) any later version. See the
  • GNU General Public License for more details.
  • A copy of the GPL is available at https://www.gnu.org/licenses/gpl-2.0.txt

/* ############################################################################

$(function() {

$watchlistReset = $('#mw-watchlist-resetbutton');

$watchlistReset.css('display', 'inline'); //already hidden in css

$watchlistReset.on('click', function(event) {

if (!confirm('Are you sure you want to mark all pages as visited?' )) {

event.preventDefault();

}

});

}); ############################################################################ */

/* Using :mw:OOjs_UI/Windows/Message_Dialogs */

mw.loader.using(['mediawiki.api', 'oojs-ui'], function() {

$watchlistReset = $('#mw-watchlist-resetbutton');

$watchlistReset.css('display', 'inline'); //if already hidden in css; recommended

var messageDialog = new OO.ui.MessageDialog();

var windowManager = new OO.ui.WindowManager();

$('body').append(windowManager.$element);

windowManager.addWindows([messageDialog]);

$watchlistReset.submit(function(event) {

event.preventDefault();

windowManager.openWindow(messageDialog, {

title: 'Confirm',

message: 'Mark all pages as visited?',

actions: [{ action: 'reject', label: 'Cancel', flags: ['safe', 'destructive'] },

{ action: 'reset', label: 'Confirm', flags: ['primary', 'progressive']}]

}).then(function(opened) {

opened.then(function(closing, data) {

if (data && data.action === 'reset') {

/* Uses :mw:API:SetNotificationTimestamp to reset the watchlist without refreshing the page */

// Code adapted from User:HueSatLum/common.js

new mw.Api().post({

action: 'setnotificationtimestamp',

entirewatchlist: '',

token: mw.user.tokens.get('editToken')

}).done(function() {

$('.mw-changeslist-line-watched').removeClass('mw-changeslist-line-watched').addClass('mw-changeslist-line-not-watched');

});

}

});

});

});

});