// 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