User:PerfektesChaos/js/externalLinkProblem/raw/d.js

/// User:PerfektesChaos/js/externalLinkProblem/raw/d.js /// 2018-08-24 PerfektesChaos@de.wikipedia // Sub-module: Look for template on talk page, and analyze parameters // ResourceLoader: compatible; //      dependencies: user, user.options, mediawiki.user, mediawiki.util /// Fingerprint: #0#0# /// @license GPL [//www.mediawiki.org/w/COPYING] (+GFDL, LGPL, CC-BY-SA) /// /* global window:false                                                */ /* jshint forin:false, bitwise:true, curly:true, eqeqeq:true, latedef:true, laxbreak:true, nocomma:true, strict:true, undef:true, unused:true          */

( function ( mw ) {  "use strict";   var Version  =  -2.8,       ELP      =  "externalLinkProblem",       Sub      =  "raw";   if ( typeof mw.libs[ ELP ]  !==  "object"   ||   ! mw.libs[ ELP ] ) {     mw.libs[ ELP ]  =  { };   }   mw.libs[ ELP ].type  =  ELP;   ELP                  =  mw.libs[ ELP ];

/*   * This program is free software; you can redistribute it and/or * modify it 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. *   * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. *   * You should have received a copy of the GNU General Public License * along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html */

if ( typeof ELP[ Sub ] !==  "object" ) { ELP[ Sub ] =  { }; }  ELP[ Sub ].vsn  =  Version; if ( typeof ELP.talk !==  "object" ) { ELP.talk =  { }; }

function facilitated { // Mark sub-module as ready // Uses: //   >  .signature //   >  Sub //   >  .type //   mw.loader.getState //   mw.loader.state //   mw.hook // 2018-08-24 PerfektesChaos@de.wikipedia var rls, signature, sub; if ( typeof ELP.signature ===  "string" ) { sub       =  "/" + Sub; signature =  ELP.signature + sub; if ( mw.loader.getState( signature ) !==  "ready" ) { rls = { }; rls[ signature ] = "ready"; mw.loader.state( rls ); mw.hook( ELP.type + sub + ".ready" ).fire; }     }   }   // facilitated

function fact( assign, assigned ) { // Interprete flags // Precondition: //   assign    -- string, with flags, or null //   assigned  -- object, with attributes // Postcondition: //   Returns object, with attributes // Uses: //   >< ELP.raw.regExps // 2015-10-22 PerfektesChaos@de.wikipedia var r =  assigned, got, i, p, sign, stuff, v;     if ( assign ) { p = assign.split( " " ); if ( typeof ELP.raw.regExps !==  "object" ) { ELP.raw.regExps =  { cit:    "(-?cit=[0-9A-Za-z]+)", link:  "(proto)", listed: "(sbl)", less:  "(-)", mode:  "([3-9][0-9][0-9])", other: "\\+([0-9]+(?:,[0-9]+)*)", since: "(2[01][0-9][0-9])", wba:   "(-?wba=[12][09][0-9]+)" };           for ( sign in ELP.raw.regExps ) { stuff                   =  "^ *" + ELP.raw.regExps[ sign ] + " *$";              ELP.raw.regExps[ sign ]  =  new RegExp( stuff ); }  // for s         } for ( i = 0; i < p.length;  i++ ) { stuff =  p[ i ]; for ( sign in ELP.raw.regExps ) { got =  ELP.raw.regExps[ sign ].exec( stuff ); if ( got ) { v =  got[ 1 ]; if ( v.charCodeAt( 0 ) === 45 ) {  // '-' v      =  v.substr( 1 ); r.less =  true; }                 switch ( sign ) { case "cit" : v =  v.substr( 4 ); break; case "less" : case "link" : case "listed" : v =  true; break; case "mode" : v =  parseInt( v, 10 ); break; case "other" : v =  v.split( "," ); break; case "since" : break; case "wba" : v =  v.substr( 4 ); if ( v.length < 10 ) { v =  false; }                       break; }  // switch sign r[ sign ] =  v;                  break;   // for s               } }  // for s         }   // for i      } return r;  }   // fact

function factory( at ) { // Analyze talk page section, create list of URL of current // Precondition: //   at  -- point to begin searching // Postcondition: //   Returns object, with .problems, or index to continue // Uses: //   >  .project.template.seek //   >  .talk.story //   >  .project.template.sign //   >< .raw.reEntry //   >< .raw.reRun //    < .problems //    < .talk.last //   fact // 2016-06-04 PerfektesChaos@de.wikipedia var r =  -1, s =  ELP.talk.story, t =  ELP.project.template, got, i, k, learnt, n, p, ul, v;     i  =  s.indexOf( ")"; ELP.raw.reRun   =  new RegExp( ELP.raw.reRun ); }                 for ( i = 1;  i < n;  i++ ) { got =  ELP.raw.reRun.exec( p[ i ] + " " ); if ( got ) { s =  got[ 1 ]; if ( s >= t.stamp ) { r =  -9; break;  // for i                        } }                 }   // for i                  if ( r === -9 ) { ul =  [ ]; for ( i = 0; i < n;  i++ ) { got =  ELP.raw.reEntry.exec( p[ i ] + " " ); if ( got ) { s      =  got[ 2 ].replace( /</g, "%3C" ); learnt =  ( got[ 3 ]  ?  true  :  false ); v      =  fact( got[ 1 ],                                            { url:    s,                                              learnt: learnt } ); ul.push( v ); }                    }   // for i                     if ( ul.length ) { r =  ul; }                 }               }            } else { r =  n;            } } else { r =  n;        } } else if ( ! i ){ r =  -8; }     return r;   }   // factory

function feed { // Analyze talk page content, create list of URL // Precondition: //   All resources have been loaded // Uses: //   >  .project.raw.skip //   >  .project.raw.old //   >  .raw.follow //    < .problems //    < .talk.last //   factory //   fresh //   fixing // 2015-11-24 PerfektesChaos@de.wikipedia var i =  0, p;     ELP.problems  =  null; while ( i >= 0 ) { p =  factory( i ); switch ( typeof p ) { case "number" : i =  p;               break; case "object" : ELP.problems =   p;               i             =  -2; break; default: i =  -3; }  // switch  typeof p      }   // while i > 0 if ( typeof ELP.project.raw ===  "object"           &&     ELP.project.raw ) { p =  ELP.project.raw; if ( typeof p.skip ===  "string"    &&              ELP.talk.story.indexOf( p.skip )  >  0 ) { // OBSOLETING ELP.talk.last =  true; }        if ( typeof p.old  ===  "object"              &&     p.old   &&              typeof p.old.length  ===  "number" ) { for ( i = 0; i < p.old.length;  i++ ) { if ( ELP.talk.story.indexOf( p.old[ i ] ) >=  0 ) { ELP.talk.last =  true; }           }   // for i         } }     if ( ELP.raw.follow ) { ELP.raw.follow; }  }   // feed

function fetched( arrived ) { // Postprocess after ajax request for talk page content // Precondition: //   arrived  -- JSON result of ajax query // Uses: //   >  .talk.id      //    feed // 2014-01-20 PerfektesChaos@de.wikipedia var q;     if ( typeof arrived  ===  "object"   &&           typeof arrived.query  ===  "object"   &&           typeof arrived.query.pages  ===  "object" ) { if ( ! ELP.talk.id  &&              typeof arrived.query.pageids  ===  "object" ) { ELP.talk.id =  arrived.query.pageids[ 0 ]; }        q  =  arrived.query.pages[ ELP.talk.id ]; if ( typeof q ===  "object"   &&              typeof q.revisions  ===  "object" ) { q =  q.revisions[ 0 ]; if ( typeof q ===  "object"   &&                 typeof q[ "*" ]  ===  "string" ) { ELP.talk.story =  q[ "*" ]; feed; }        }      }   }   // fetched

function fire { // Retrieve talk page content // Precondition: //   All resources have been loaded. //   "mediawiki.api" // Uses: //   >  .nsubject //   >  .talk.leader //   >< .talk.id      //    >< .spot //   >< .envNS //    < .sibling //    < .talk.spot //   mw.Api //   mw.config.get //   (fetched) // 2015-10-22 PerfektesChaos@de.wikipedia var q =  new mw.Api, w =  { action:       "query", "continue":  "", indexpageids: true, prop:        "revisions", rvprop:      "content" };     if ( ! ELP.talk.id ) { if ( ELP.talk.leader ) { if ( ! ELP.spot ) { ELP.spot =  mw.config.get( "wgTitle" ); }           if ( typeof ELP.nsubject  ===  "number" ) { if ( ! ELP.envNS ) { ELP.envNS =  mw.config.get( "wgFormattedNamespaces" ); }              ELP.sibling  =  ELP.envNS[ ELP.nsubject + 1 ]; }        } else { ELP.talk.id =  mw.config.get( "wgArticleId" ); }     }      if ( ELP.talk.id ) { w.pageids =  ELP.talk.id; } else if ( ELP.sibling && ELP.spot ) { ELP.talk.spot =  ELP.sibling + ":" + ELP.spot; w.titles      =  ELP.talk.spot.replace( /\s/g, "_" ); } else { w =  false; }     if ( w ) { q.get( w ).done( fetched ); }  }   // fire

ELP[ Sub ].fire =  function ( action ) { // Start action // Precondition: //   Template is used on talk page. //   action  -- callback function to continue, or false // Uses: //   >  .project //   >  .talk //    < .raw.follow //   facilitated //   mw.loader.using //   (fire) // Remark: May be used as event handler -- 'this' is not accessed // 2015-10-22 PerfektesChaos@de.wikipedia facilitated; if ( typeof ELP.project ===  "object"           &&     ELP.project    &&           typeof ELP.talk  ===  "object"           &&     ELP.talk ) { ELP.raw.follow =  action; mw.loader.using( [ "mediawiki.api" ],                         fire ); }  };   // .raw.fire

function first { // Initialize sub-module // Uses: //   facilitated // 2015-10-22 PerfektesChaos@de.wikipedia facilitated; }  // first first;  // autorun }( window.mediaWiki, window.jQuery ) );

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

/// EOF  externalLinkProblem/raw/d.js