User:PerfektesChaos/js/watchCategories/d.js

/// User:PerfektesChaos/js/watchCategories/d.js /// 2018-08-24 PerfektesChaos@de.wikipedia // Display member count of some (maintenance) categories on watchlist // ResourceLoader: compatible; //   dependencies: user, mediawiki.api, mediawiki.util //   namespaces:   -1 //   doc:          w:en:PerfektesChaos/js/watchCategories /// Fingerprint: #0#0# /// @license GPL [//www.mediawiki.org/w/COPYING] (+GFDL, LGPL, CC-BY-SA) /// /* jshint forin:false                                                 */ /* global window:false                                                */ /* jshint bitwise:true, curly:true, eqeqeq:true, latedef:true, laxbreak:true, nocomma:true, strict:true, undef:true, unused:true          */

( function ( mw, $ ) {  "use strict";   var WatCat   =  "watchCategories",       Version  =  -1.3;   if ( typeof mw.libs[ WatCat ]  !==  "object" ||  ! mw.libs[ WatCat ] ) {      mw.libs[ WatCat ] = { };   }   mw.libs[ WatCat ].type  =  WatCat;   WatCat      =  mw.libs[ WatCat ];   WatCat.doc  =  "w:en:User:PerfektesChaos/js/" + WatCat + "";   WatCat.vsn  =  Version;

// Requires: JavaScript 1.3

function fire { // Intialize application, check for meaningful usage // Uses: //   >  .type //   >  .cats //   mw.loader.getState //   mw.loader.state //   mw.loader.using //   feed //   (WatCat.fire) // 2018-08-24 PerfektesChaos@de.wikipedia var signature = "ext.gadget." + WatCat.type, rls; if ( mw.loader.getState( signature ) !== "ready" ) { rls = { }; rls[ signature ] = "ready"; mw.loader.state( rls ); if ( WatCat.cats ) { mw.loader.using( [ "user",                              "mediawiki.api",                               "mediawiki.util" ],                             WatCat.fire ); }     }   }   // fire

WatCat.factory =  function ( already ) { // Return single object // Precondition: //   already  -- object with user defined data // Postcondition: //   Returns object // Uses: //   mw.util.$content // 2013-05-31 PerfektesChaos@de.wikipedia var r, s, v;     if ( already.cat ) { r =  { }; for ( s in already ) { v =  already[ s ]; if ( v ) { r[ s ] =  v;            } }  // for s in r         r.cat  =  r.cat.replace( /_/g, " " ); if ( typeof( r.min ) !== "number" ) { r.min =  1; }        if ( typeof( r.ns ) !== "number" ) { r.ns =  -1; }        if ( r.ns === -1  &&  typeof( r.title ) !== "string" ) { r.title =  "Watchlist"; }        if ( typeof( r.append ) !== "string"  &&              typeof( r.before ) !== "string" ) { if ( r.ns === -1 &&  r.title === "Watchlist" ) { r.before =  "#mw-content-text"; } else { r.before =  mw.util.$content; }        }         if ( typeof( r.style1 ) !== "string" ) { r.style1 =     "border: solid 2px #FF0000;" + " padding: 3px;" + " color: #FF0000;"; }        if ( r.min < 1  &&  typeof( r.style0 ) !== "string" ) { r.style0 =     "border: solid 1px #008000;" + " padding: 3px;" + " color: #008000;"; }     }      return r;   };   // .factory

WatCat.find =  function  { // Launch API query // Uses: //   this //   >  .q      //     < .reSp //    < .space //   .finder // 2013-05-31 PerfektesChaos@de.wikipedia var e, i, s;     var n   =  this.q.length; var sP =  false; var sT =  false; for ( i = n - 1; i >= 0;  i-- ) { e =  this.q[ i ]; if ( e.ns === this.nsN &&  e.title === this.title ) { switch ( typeof( e.cat ) ) { case "string" : s =  "Category:" + e.cat; if ( sT ) { sT =  sT + "|" + s;                  } else { sT =  s;                  } break; case "number" : e.curid =  e.cat; delete e.cat; if ( sP ) { sP =  sP + "|"; } else { sP =  ""; }                 sP  =  sP + e.curid; break; }  // switch typeof e.cat } else { this.q[ i ] =  false; }     }   // for i-- if ( sP || sT ) { this.reSp  =  new RegExp( " ", "g" ); this.space =  mw.config.get( "wgFormattedNamespaces" )[ 14 ]; }     if ( sP ) { this.finder( sP, false ); }     if ( sT ) { sT =  sT.replace( this.reSp, "_" ); this.finder( sT, true ); }  };   // .find

WatCat.finder =  function ( ask, assigned ) { // Launch API query // Precondition: //   ask       -- pipe separated page list //   assigned  -- true: titles;  false: pageids // Uses: //   this //   (.found) // 2013-05-31 PerfektesChaos@de.wikipedia var a =  new mw.Api; var o =  { action: "query", prop:  "categoryinfo" }; if ( assigned ) { o.titles =  ask; } else { o.pageids =  ask; }     a.get( o ).done( this.found ); };  // .finder

WatCat.fire =  function  { // Check whether anything to do     // Precondition: //   .cats present // Uses: //   >  .cats //    < .nsN //    < .title //    < .q      //    mw.config.get //   .factory //   .find // Remark: Used as event handler -- 'this' is not WatCat // 2013-05-31 PerfektesChaos@de.wikipedia var e, i, n,         launch  =  false; WatCat.nsN =  mw.config.get( "wgNamespaceNumber" ); if ( WatCat.nsN === -1 ) { WatCat.title =  mw.config.get( "wgCanonicalSpecialPageName" ); }     switch ( typeof( WatCat.cats ) ) { case "string" : case "number" : if ( WatCat.nsN === -1 ) { if ( WatCat.title === "Watchlist" ) { WatCat.q =  [ WatCat.factory( { cat: WatCat.cats } ) ];                 launch    =  true; }           }            break; case "object" : n =  WatCat.cats.length; if ( typeof( n ) === "number" ) { if ( WatCat.nsN !== -1 ) { WatCat.title = mw.config.get( "wgTitle" ); }              WatCat.q  =  [ ]; for ( i = 0; i < n;  i++ ) { e =  WatCat.cats[ i ]; switch ( typeof( e ) ) { case "string" : case "number" : e =  WatCat.factory( { cat: e } ); break; case "object" : e =  WatCat.factory( e ); break; default : e =  false; }  // switch typeof e                  if ( e ) { if ( e.ns === WatCat.nsN ) { if ( e.title === WatCat.title ) { WatCat.q.push( e ); launch =  true; }                    }                  }               }   // for i            } break; }  // switch typeof .cats if ( launch ) { WatCat.find; }  };   // .fire

WatCat.flag =  function ( adhere, about, amount, alter ) { // Mark detected "common-error" in Module transclusion // Precondition: //   adhere  -- configuration object //   about   -- category title //   amount  -- number of pages in category //   alter   -- iff string: different link title // Uses: //   this //   >  .type //   >  .reSp //   .furnish // 2018-08-24 PerfektesChaos@de.wikipedia var s;     if ( amount >= adhere.min ) { s =  " " + ""               +  ""                           +  ( typeof( alter ) === "string" ?  alter                                                             :  about ) + "" + ( amount ?  " # " + amount + " "                           :  "" ) + "  ";         if ( adhere.append ) { this.furnish( s, adhere.append, true ); } else if ( adhere.before ) { this.furnish( s, adhere.before, false ); }     }   };   // .flag

WatCat.found =  function ( arrived ) { // Show API success on pagesincategory // Precondition: //   arrived  -- JSON result of ajax query // Uses: //   >  .q      //    >  .space //   .flag // Remark: Used as event handler -- 'this' is not WatCat // 2013-12-25 PerfektesChaos@de.wikipedia var e, g, i, p, s,         got  =  arrived.query, j   =  WatCat.space.length + 1, n   =  WatCat.q.length; if ( got ) { got =  got.pages; if ( got ) { for ( g in got ) { p =  got[ g ]; for ( i = 0; i < n;  i++ ) { e =  WatCat.q[ i ]; if ( p && e ) { if ( p.title ) { s =  p.title.substr( j ); if ( typeof( p.pageid ) !== "number" ) { p.pageid =  -2; }                       if ( p.pageid === e.curid  ||  s === e.cat ) { p =  p.categoryinfo; if ( p ) { WatCat.flag( e, s, p.pages, e.text ); }                       }                     }                  }               }   // for i            }   // for g in got }     }   };   // .found

WatCat.furnish =  function ( apply, adjacent, append ) { // Insert element content // Precondition: //   apply     -- string with content to be inserted //   adjacent  -- element; selector string or jQuery //   append    -- true: append;  false: before // Uses: //   mw.util.$content //   jQuery //   jQuery.append //   jQuery.before // 2013-05-31 PerfektesChaos@de.wikipedia var $e; var $i =  $( apply ); switch ( typeof( adjacent ) ) { case "string" : $e =  $( adjacent ); break; case "object" : $e =  adjacent; break; default: $e =  false; }  // switch typeof adjacent if ( ! $e.length ) { $e =  mw.util.$content; }     if ( append ) { $e.append( $i ); } else { $e.before( $i ); }  };   // .furnish

fire; }( window.mediaWiki, window.jQuery ) );

// Emacs // Local Variables: // coding: utf-8-dos // fill-column: 80 // End:

/// EOF  watchCategories/d.js