User:PerfektesChaos/js/catTreeToggling/d.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. User:PerfektesChaos/js/catTreeToggling/d. |
// PerfektesChaos/js/catTreeToggling.js
/// Toggle all CategoryTree elements
/// 2024-02-27 [email protected]
/// Documentation: [[w:en:User:PerfektesChaos/js/catTreeToggling]]
/// Fingerprint: #0#0#
/// @license: CC-by-sa/4.0 GPLv3
/// <nowiki>
/* 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 <img>
// 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 [email protected]
var $r = $( "<img>" );
$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 [email protected]
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 [email protected]
fake( THIS.ct.sttc );
} // feed()
function fewer() {
// Collapsing requested
// Uses:
// > .ct.stte
// fake()
// 2023-02-01 [email protected]
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 [email protected]
var $e = $( "<div>" ),
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 [email protected]
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 [email protected]
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 </nowiki> catTreeToggling.js