User talk:DCDuring/common.js

=Watchlist cleanup code=

Version 1
function unwatchPage(token, title) { token = encodeURIComponent(token); title = encodeURIComponent(title); var succeeded = false; $.ajax ({   async: false,    type: 'POST',    url: '/w/api.php?format=json&action=watch&unwatch=&token=' + token + '&title=' + title,    data: ,    dataType: 'json',    success:      function(data, textStatus, jqXHR)      {        succeeded = data && data.watch && data.watch.unwatched === ;        if(! succeeded)         alert('13451345\n' + textStatus + '\n' + jqXHR.responseText);      },    error:      function(jqXHR, textStatus, errorThrown)      {        alert('123412624\n' + textStatus + '\n' + jqXHR.responseText + '\n' + errorThrown);      }  }); return succeeded; } function unwatchRange(token, ns, lb, ub) // ns = namespace-number, e.g. 0 for mainspace // token = watch-token // lb = lower-bound, e.g. '\u00A0' to unwatch titles that start with //         non-ASCII characters - is a "loose" lower bound, title >= lb  // ub = upper-bound, e.g. '\u00A0' to unwatch titles that start with //         ASCII characters - is a "strict" upper bound, title < ub { if(! /^\d+$/.test(ns)) // invalid namespace-number return false; if(lb === window.undefined) lb = ''; else lb = encodeURIComponent(lb); while(true) {   var titles = null; $.ajax ({     async: false,      type: 'GET',      url: '/w/api.php?format=json&action=query&unwatch=&list=watchlistraw&wrcontinue=' + ns + '|' + lb,      dataType: 'json',      success:        function(data, textStatus, jqXHR)        {          if(data && data.watchlistraw)          {            titles = [];            for(var i = 0; i < data.watchlistraw.length; ++i)              if(data.watchlistraw[i].ns == ns)                if(ub === window.undefined || data.watchlistraw[i].title < ub)                  titles[titles.length] = data.watchlistraw[i].title;          }          else          {            alert('23462346\n' + textStatus + '\n' + jqXHR.responseText);          }        },      error:        function(jqXHR, textStatus, errorThrown)        {          alert('2368884\n' + textStatus + '\n' + jqXHR.responseText + '\n' + errorThrown);        }    }); if(! titles) return false; if(titles.length == 0) return true; for(var i = 0; i < titles.length; ++i) if(! unwatchPage(token, titles[i])) {       alert('1325657856\nerror unwatching ' + titles[i] + '.'); return false; } } } addOnloadHook ( function   {    if(mediaWiki.config.get('wgPageName') != 'Special:TrimWatchList')      return;    var jqXHR =      $.getJSON      ( '/w/api.php?format=json&action=query&prop=info&intoken=watch&titles=Main%20page', function (data, textStatus, jqXHR) {         if(! data || ! data.query || ! data.query.pages             || ! data.query.pages[139449]             || ! data.query.pages[139449].watchtoken) {           alert('error obtaining watch-token\n' + textStatus + '\n' + jqXHR.responseText); return; }         var watchtoken = data.query.pages[139449].watchtoken; alert('successfully obtained watch-token . . .');

if(unwatchRange(watchtoken, 0, 'A', '[')) alert('successfully unwatched all entries whose pagenames start with non-ASCII characters'); else alert('error unwatching entries whose pagenames start with non-ASCII characters'); if(unwatchRange(watchtoken, 2)) alert('successfully unwatched all user- and user-talk pages'); else alert('error unwatching user- and user-talk pages'); if(unwatchRange(watchtoken, 10)) alert('successfully unwatched all template- and template-talk pages'); else alert('error unwatching template- and template-talk pages'); if(unwatchRange(watchtoken, 100)) alert('successfully unwatched all appendix- and appendix-talk pages'); else alert('error unwatching appendix- and appendix-talk pages'); if(unwatchRange(watchtoken, 114)) alert('successfully unwatched all citations- and citations-talk pages'); else alert('error unwatching citations- and citations-talk pages'); }     );    jqXHR.error    ( function {       alert('error obtaining watch-token', jqXHR.responseText); }   );  } );

Version 2
function unwatchPage(token, title) { token = encodeURIComponent(token); title = encodeURIComponent(title); var succeeded = false; $.ajax ({   async: false,    type: 'POST',    url: '/w/api.php?format=json&action=watch&unwatch=&token=' + token + '&title=' + title,    data: ,    dataType: 'json',    success:      function(data, textStatus, jqXHR)      {        succeeded = data && data.watch && data.watch.unwatched === ;        if(! succeeded)         alert('13451345\n' + textStatus + '\n' + jqXHR.responseText);      },    error:      function(jqXHR, textStatus, errorThrown)      {        alert('123412624\n' + textStatus + '\n' + jqXHR.responseText + '\n' + errorThrown);      }  }); return succeeded; } function unwatchRange(token, ns, lb, ub) // ns = namespace-number, e.g. 0 for mainspace // token = watch-token // lb = lower-bound, e.g. '\u00A0' to unwatch titles that start with //         non-ASCII characters - is a "loose" lower bound, title >= lb  // ub = upper-bound, e.g. '\u00A0' to unwatch titles that start with //         ASCII characters - is a "strict" upper bound, title < ub { if(! /^\d+$/.test(ns)) // invalid namespace-number return false; if(lb === window.undefined) lb = ''; else lb = encodeURIComponent(lb); while(true) {   var titles = null; $.ajax ({     async: false,      type: 'GET',      url: '/w/api.php?format=json&action=query&unwatch=&list=watchlistraw&wrcontinue=' + ns + '|' + lb,      dataType: 'json',      success:        function(data, textStatus, jqXHR)        {          if(data && data.watchlistraw)          {            titles = [];            for(var i = 0; i < data.watchlistraw.length; ++i)              if(data.watchlistraw[i].ns == ns)                if(ub === window.undefined || data.watchlistraw[i].title < ub)                  titles[titles.length] = data.watchlistraw[i].title;          }          else          {            alert('23462346\n' + textStatus + '\n' + jqXHR.responseText);          }        },      error:        function(jqXHR, textStatus, errorThrown)        {          alert('2368884\n' + textStatus + '\n' + jqXHR.responseText + '\n' + errorThrown);        }    }); if(! titles) return false; if(titles.length == 0) return true; for(var i = 0; i < titles.length; ++i) if(! unwatchPage(token, titles[i])) {       alert('1325657856\nerror unwatching ' + titles[i] + '.'); return false; } } } addOnloadHook ( function   {    if(mediaWiki.config.get('wgPageName') != 'Special:TrimWatchList')      return;    var jqXHR =      $.getJSON      ( '/w/api.php?format=json&action=query&prop=info&intoken=watch&titles=Main%20page', function (data, textStatus, jqXHR) {         if(! data || ! data.query || ! data.query.pages             || ! data.query.pages[139449]             || ! data.query.pages[139449].watchtoken) {           alert('error obtaining watch-token\n' + textStatus + '\n' + jqXHR.responseText); return; }         var watchtoken = data.query.pages[139449].watchtoken; alert('successfully obtained watch-token . . .');

if(unwatchRange(watchtoken, 0, 'A', '[')) alert('successfully unwatched all entries whose pagenames start with non-ASCII characters'); else alert('error unwatching entries whose pagenames start with non-ASCII characters'); if(unwatchRange(watchtoken, 2)) alert('successfully unwatched all user- and user-talk pages'); else alert('error unwatching user- and user-talk pages'); if(unwatchRange(watchtoken, 10)) alert('successfully unwatched all template- and template-talk pages'); else alert('error unwatching template- and template-talk pages'); if(unwatchRange(watchtoken, 100)) alert('successfully unwatched all appendix- and appendix-talk pages'); else alert('error unwatching appendix- and appendix-talk pages'); if(unwatchRange(watchtoken, 114)) alert('successfully unwatched all citations- and citations-talk pages'); else alert('error unwatching citations- and citations-talk pages'); }     );    jqXHR.error    ( function {       alert('error obtaining watch-token', jqXHR.responseText); }   );  } );