User:PerfektesChaos/js/jsonDebug/scout/d.js

/// User:PerfektesChaos/js/jsonDebug/scout/d.js // Show LintErrors analysis live /// 2018-08-24 PerfektesChaos@de.wikipedia // ResourceLoader:  compatible; //   dependencies: user, mw.API /// 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   = -1.1,       Signature = "scout",       APP   = { listen:  false,                 loading: false,                 longer:  false,                 nsn:     false,                 reClass: false,                 reTag:   false,                 rooms:   false,                 sel:     false,                 sign:    false },       JSOND = { sign:  "jsonDebug",                 site:  "w:en",                 store: "User:PerfektesChaos/js/",                 sel:   "json-code-lint",                 src:   "div,pre",                 using: null },       REPOS = { requests:  false };

APP.feed = function ( area ) { // Namespace analysis // Precondition: //   area  -- namespace // Uses: //   >  APP.nsn //   >< APP.listen //   >< APP.rooms //    < APP.reSpace //   mw.config.get //   APP.finder // 2018-03-11 PerfektesChaos@de.wikipedia var nsn, s;     if ( ! APP.listen ) { switch ( typeof area ) { case "number": nsn = area; break; case "string": if ( ! APP.rooms ) { APP.rooms  = mw.config.get( "wgNamespaceIds" ); APP.reSpace = new RegExp( "\\s+" ); }              s = area.trim.replace( APP.reSpace, "_" ).toLowerCase; if ( typeof APP.rooms[ s ] ===  "number" ) { nsn = APP.rooms[ s ]; }              break; }  // switch typeof area if ( typeof nsn ===  "number" ) { APP.listen = ( APP.nsn === nsn ); if ( APP.listen ) { APP.finder; }        }      }   };   // APP.feed

APP.fetch = function { // Load real tool // Uses: //   >  APP.longer //   >  JSOND.site //   >  JSOND.store //   >  JSOND.sign //   REPOS.fire // 2018-03-11 PerfektesChaos@de.wikipedia var p, suffix; p = { bcache: 1 }; if ( APP.longer ) { p.maxage = 100; suffix = "/d.js"; } else { p.maxage = 604800; suffix = "/r.js"; }     REPOS.fire( JSOND.site,                  JSOND.store + JSOND.sign,                  suffix,                  p ); };  // APP.fetch

APP.find = function ( $area ) { // Scan this content // Precondition: //   $area  -- jQuery element of content area //   (DOM ready) // Uses: //   >  JSOND.sel //   >  JSOND.src //   >< APP.sel //    < APP.loading //   APP.fetch // 2018-03-11 PerfektesChaos@de.wikipedia if ( ! APP.sel ) { APP.sel = "." + JSOND.sel; }     if ( $area.find( APP.sel ).filter( JSOND.src ).length ) { APP.loading = true; APP.fetch; }  };   // APP.find

APP.finder = function { // Scan current page // Uses: //   mw.hook //   (APP.find) // 2018-03-11 PerfektesChaos@de.wikipedia mw.hook( "wikipage.content" ).add( APP.find ); };  // APP.finder

APP.fire = function ( areas, assert ) { // Namespace request // Precondition: //   areas   -- namespaces //   assert  -- true for debuggung // Uses: //   >  APP.listen //    < APP.longer //   APP.feed // 2018-03-11 PerfektesChaos@de.wikipedia var i;     if ( typeof assert  ===  "boolean" ) { APP.longer = assert; }     if ( ! APP.listen ) { if ( typeof areas ===  "object" ) { if ( areas  &&   typeof areas.length  ===  "number" ) { for ( i = 0; i < areas.length;  i++ ) { APP.feed( areas[ i ] ); }  // for i            } } else { APP.feed( areas ); }     }   };   // APP.fire

APP.first = function { // Autorun on loading // Uses: //   >  JSOND.sign //   >  Signature //   >  Version //   >< APP.sign //    < APP.signature //    < APP.nsn //   mw.loader.getState //   mw.loader.state //   APP.fetch //   mw.hook //   (APP.fire) //   (APP.further) // 2018-08-24 PerfektesChaos@de.wikipedia var env, rls; if ( ! APP.sign ) { APP.sign     = JSOND.sign + "." + Signature; APP.signature = "ext.gadget." + APP.sign; }     if ( mw.loader.getState( APP.signature )  !==  "ready" ) { rls = { }; rls[ APP.signature ] = "ready"; mw.loader.state( rls ); mw.hook( APP.sign + ".ready" ).fire( { type: APP.sign,                                               vsn:  Version } ); env = mw.config.get( [ "wgPageContentModel",                               "wgNamespaceNumber" ] ); if ( env.wgPageContentModel.toLowerCase.indexOf( "json" )             >=  0 ) { APP.fetch; } else { APP.nsn = env.wgNamespaceNumber; mw.hook( JSOND.sign + ".namespaces" ).add( APP.fire ); mw.hook( JSOND.sign + ".selectors" ).add( APP.further ); }     }   };   // APP.first

APP.further = function ( add ) { // Selector request // Precondition: //   add   -- selectors object // Uses: //   >  APP.loading //   >  JSOND.sel //   >  APP.listen //   >< APP.sel //   >< APP.reClass //   >< APP.reTag //   >< JSOND.src //   APP.finder // 2018-03-11 PerfektesChaos@de.wikipedia var i, s;     if ( ! APP.loading   &&           typeof add  ===  "object"           &&     add ) { if ( typeof add.classes ===  "object"              &&     add.classes   &&              typeof add.classes.length  ===  "number" ) { if ( ! APP.reClass ) { APP.reClass = new RegExp( "^[^ .#,]+$" ); }           if ( ! APP.sel ) { APP.sel = "." + JSOND.sel; }           for ( i = 0;  i < add.classes.length;  i++ ) { s = add.classes[ i ]; if ( APP.reClass.test( s ) ) { APP.sel = APP.sel + ",." + s;              } }  // for i         } if ( typeof add.tags ===  "object"              &&     add.tags   &&              typeof add.tags.length  ===  "number" ) { if ( ! APP.reTag ) { APP.reTag = new RegExp( "^[a-zA-Z]+$" ); }           for ( i = 0;  i < add.tags.length;  i++ ) { s = add.tags[ i ]; if ( APP.reTag.test( s ) ) { JSOND.src = JSOND.src + "," + s;              } }  // for i         } if ( APP.listen ) { APP.finder; }     }   };   // APP.further

REPOS.fire = function ( at, access, append, alter ) { // Load from external URL // Precondition: //   at      -- Wikimedia Foundation site code, or not //   access  -- string with basic page name //   append  -- string with subpage, or not //   alter   -- parameter object, or MIME string, or not // Uses: //   >< REPOS.requests //   REPOS.foundation //   mw.loader.load // 2018-03-11 PerfektesChaos@de.wikipedia var source, syntax; if ( typeof REPOS.requests !==  "object" ) { REPOS.requests = { }; }     if ( typeof REPOS.requests[ access ]  !==  "boolean" ) { REPOS.requests[ access ] = true; if ( append ) { source = access + append; } else { source = access; }        if ( at ) { source = REPOS.foundation( at, source, alter ); if ( typeof alter ===  "object"                 &&     alter   &&                 typeof alter.ctype  ===  "string" ) { syntax = alter.ctype; }        } else { syntax = alter; }        mw.loader.load( source, syntax ); }  };   // REPOS.fire

REPOS.foundation = function ( at, access, alter ) { // Create URL within Wikimedia Foundation // Precondition: //   at      -- site code, or not //   access  -- string with page name //   alter   -- parameter object, or not // Postcondition: //   Returns full URL // 2018-03-11 PerfektesChaos@de.wikipedia var s = access, r = encodeURI( s ); if ( typeof alter ===  "object"           &&     alter ) { r = "/w/index.php?title=" + r;        if ( access.substr( -3 ) === ".js" ) { alter.ctype = "text/javascript"; } else if ( access.substr( -4 ) === ".css" ) { alter.ctype = "text/css"; }        alter.action = "raw"; for ( s in alter ) { r = r + "&" + s + "=" + encodeURI( alter[ s ] ); }  // for s in alter } else { r = "/wiki/" + r;     } if ( typeof at ===  "string"           &&     at ) { switch ( at ) { case "meta": r = "meta.wikimedia.org" + r;              break; case "mw": r = "www.mediawiki.org" + r;              break; case "w:en": r = "en.wikipedia.org" + r;              break; default: r = window.location.host + r;        }   // switch at         r = "https://" + r;      } return r;  };   // REPOS.foundation

APP.first; }( window.mediaWiki ) );

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

/// EOF  jsonDebug/scout/d.js