User:PerfektesChaos/js/catTreeToggling/d.js

// PerfektesChaos/js/catTreeToggling.js /// Toggle all CategoryTree elements /// 2024-02-27 PerfektesChaos@de.wikipedia /// Documentation: w:en:User:PerfektesChaos/js/catTreeToggling /// Fingerprint:   #0#0# /// @license: CC-by-sa/4.0 GPLv3 /// /* 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 = "catTreeToggling",       THIS      = { ct:  { sect: ".CategoryTreeSection",                            sel:  ".CategoryTreeToggleHandlerAttached",                            stta: "aria-expanded",                            sttc: "false",                            stte: "true"                          },                     doc: { site:    "w:en",                            support: "User:PerfektesChaos/js/"                                     + Signature },                     gui: { box: { "background-color": "#D0D0D0",                                   "border-color":     "#808080",                                   "border-radius":    "6px",                                   "border-style":     "solid",                                   "border-width":     "3px",                                   "display":          "inline-block", "margin-bottom":   "1em", "margin-left":     "1em", "margin-right":    "1em", "padding":         "0.3em" }, clp: [ "54", "Blue_Fire.svg", "collapse" ], exp: [ "6d", "Blue_Fire_upsidedown.svg", "expand" ], img: 18 }                  };

function $file( address, appearance ) { // Create // Precondition: //   address  -- Array, with image location //                      [ 0 ]  -- string, with 2 hex storage path //                      [ 1 ]  -- string, with signifcant ID      //    appearance  -- number, with pixel size // 2022-07-01 PerfektesChaos@de.wikipedia var $r = $( " " ); $r.attr( { "src": "https://upload.wikimedia.org/"                       + "wikipedia/commons/thumb/"                        + address[ 0 ].substr( 0, 1 ) + "/"                        + address[ 0 ] + "/"                        + address[ 1 ]                        + "/" + appearance + "px-"                        + address[ 1 ] + ".png" } ); return $r; }  // $file

function fake( ask ) { // Execute toggling // Precondition: //   ask  -- string, toggle "expand" or "collapsed" elements // Uses: //   >  .$ct //   >  .ct.sel //   >  .ct.stta // 2023-02-01 PerfektesChaos@de.wikipedia var $do = THIS.$ct.find( THIS.ct.sel + ":visible" ), i, $h; for ( i = $do.length - 1; i >= 0;  i-- ) { $h = $do.eq( i ); if ( $h.attr( THIS.ct.stta ) === ask ) { $h.click; }     }   // for i-- }  // fake

function feed { // Expansion requested // Uses: //   >  .ct.sttc //   fake // 2023-02-01 PerfektesChaos@de.wikipedia fake( THIS.ct.sttc ); }  // feed

function fewer { // Collapsing requested // Uses: //   >  .ct.stte //   fake // 2023-02-01 PerfektesChaos@de.wikipedia fake( THIS.ct.stte ); }  // fewer

function fiat( $area ) { // Create and apply GUI element // Precondition: //   $area  -- content // Uses: //   >  .gui.clp //   >  .gui.img //   >  .gui.exp //   >  Signature //   >  .sel //   >  Version //   >  .gui.box //   >< .ltr //   $file //   (feed) //   (fewer) // 2023-02-01 PerfektesChaos@de.wikipedia var $e  = $( " " ), hdls = [ feed, fewer ], pics = [ "exp", "clp" ], i, s, $img; if ( typeof THIS.ltr !==  "boolean" ) { THIS.ltr = ( $( "html" ).attr( "dir" ) !==  "rtl" ); }     for ( i = 0;  i < 2;  i++ ) { s   = pics[ i ]; $img = $file( THIS.gui[ s ], THIS.gui.img ); $img.attr( { id:   THIS.sel  +  s.substr( 0, 1 ),                      role:  "button",                      title: THIS.gui[ s ][ 2 ] } ) .click( hdls[ i ] ) .css( { "cursor": "pointer" } ); $e.append( $img ); }  // for i      $e.attr( { id:    THIS.sel + "box",                 title: Signature + " " + Version } ) .css( THIS.gui.box ) .css( "float", ( THIS.ltr ? "right" : "left" ) ); $area.prepend( $e ); }  // fiat

function fire( $area ) { // DOM ready // Precondition: //   $area  -- content // Uses: //   >  .ct.sect //   >  Signature //   >< .sel //    < .$ct //    < .sign //   fiat // 2023-02-01 PerfektesChaos@de.wikipedia THIS.$ct = $area.find( THIS.ct.sect ); if ( THIS.$ct.length ) { if ( typeof THIS.sel !==  "string" ) { THIS.sign = Signature.toLowerCase; THIS.sel = "gadget-" + THIS.sign + "-"; }        fiat( $area ); }  }   // fire

function first { // Autorun on loading // Uses: //   >  Signature //   >  Version //   >  .doc.site //   >  .doc.support //    < .signature //    < .pub //   (fire) // 2023-02-01 PerfektesChaos@de.wikipedia var env, rls, launch; THIS.signature = "ext.gadget." + Signature; if ( mw.loader.getState( THIS.signature ) !==  "ready" ) { rls = { }; rls[ THIS.signature ] = "ready"; mw.loader.state( rls ); env = mw.config.get( [ "wgAction",                               "wgCanonicalSpecialPageName",                                "wgNamespaceNumber",                                "wgPageContentModel" ] ); switch ( env.wgAction ) { case "edit": case "submit": case "view": if ( env.wgPageContentModel === "wikitext" ) { if ( env.wgNamespaceNumber < -1 ) { launch = ( env.wgCanonicalSpecialPageName                                                   === "CategoryTree" ); } else { launch = true; }              }               break; }  // switch wgAction if ( launch ) { mw.hook( "wikipage.content" ).add( fire ); }        THIS.pub = { doc:  "" + THIS.doc.site + ":"                                 + THIS.doc.support + "", type: Signature, vsn: Version }; mw.hook( Signature + ".ready" ).fire( THIS.pub ); }  }   // first

//---

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

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

/// EOF  catTreeToggling.js