/// User:PerfektesChaos/js/superscriptMagnifier/d.js
/// 2018-08-24 [email protected]
// Magnify superscript (and subscript) characters in HTML document
// ResourceLoader: compatible; dependencies: user
/// Fingerprint: #0#0#
/// @license GPL (+GFDL, LGPL, CC-BY-SA)
/// <nowiki>
/* global window:false */
/* jshint 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,
SSM = "superscriptMagnifier",
Config = { dewiki: [ 5551, // Hilfe:Sonderzeichen
1014413, // Hilfe:Sonderzeichenreferenz
34226, // WP:SVZ
9135891 ], // tool manual
enwiki: // tool manual
},
SuMag;
if ( typeof mw.libs !== "object" || ! mw.libs ) {
mw.libs = { };
}
mw.libs.type = SSM;
SSM = mw.libs;
if ( typeof SSM.vsn === "undefined" ) {
SSM.vsn = Version;
SSM.signature = "ext.gadget." + SSM.type;
SSM.support = "User:PerfektesChaos/js/" + SSM.type;
SSM.doc = "]";
}
/*
* 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
*/
SuMag = ( function ( $ ) {
// Independent subsystem
// SuMag.factory()
// SuMag.fire()
// SuMag.found()
// Precondition:
// $ -- jQuery library object
// 2015-12-27 [email protected]
var config = { large: false,
latin: true,
max: false,
sign: false },
offer = { },
transl = { 178: "2",
179: "3",
185: "1",
0x0656: 0x0627, // SUB ARABIC ALEF
0x1D62: "i", // SUB LATIN SMALL I
0x1D63: "r", // SUB LATIN SMALL R
0x1D64: "u", // SUB LATIN SMALL U
0x1D65: "v", // SUB LATIN SMALL V
0x1D66: 0x03B2, // SUB GREEK SMALL BETA
0x1D67: 0x03B3, // SUB GREEK SMALL GAMMA
0x1D68: 0x03C1, // SUB GREEK SMALL RHO
0x1D69: 0x03C6, // SUB GREEK SMALL PHI
0x1D6A: 0x03C7, // SUB GREEK SMALL CHI
0x2070: "0", // SUPER ZERO
0x2071: "i", // SUPER LATIN SMALL I
0x2074: "4", // SUPER FOUR
0x2075: "5", // SUPER FIVE
0x2076: "6", // SUPER SIX
0x2077: "7", // SUPER SEVEN
0x2078: "8", // SUPER EIGHT
0x2079: "9", // SUPER NINE
0x207A: "+", // SUPER PLUS SIGN
0x207B: 0x2212, // SUPER MINUS
0x207C: "=", // SUPER EQUALS SIGN
0x207D: "(", // SUPER LEFT PARENTHESIS
0x207E: ")", // SUPER RIGHT PARENTHESIS
0x207F: "n", // SUPER LATIN SMALL N
0x2080: "0", // SUB ZERO
0x2081: "1", // SUB ONE
0x2082: "2", // SUB TWO
0x2083: "3", // SUB THREE
0x2084: "4", // SUB FOUR
0x2085: "5", // SUB FIVE
0x2086: "6", // SUB SIX
0x2087: "7", // SUB SEVEN
0x2088: "8", // SUB EIGHT
0x2089: "9", // SUB NINE
0x208A: "+", // SUB PLUS SIGN
0x208B: 0x2212, // SUB MINUS
0x208C: "=", // SUB EQUALS SIGN
0x208D: "(", // SUB LEFT PARENTHESIS
0x208E: ")", // SUB RIGHT PARENTHESIS
0x2090: "a", // SUB LATIN SMALL A
0x2091: "e", // SUB LATIN SMALL E
0x2092: "o", // SUB LATIN SMALL O
0x2093: "x", // SUB LATIN SMALL X
0x2094: 0x0259, // SUB LATIN SMALL SCHWA
0x2095: "h", // SUB LATIN SMALL H
0x2096: "k", // SUB LATIN SMALL K
0x2097: "l", // SUB LATIN SMALL L
0x2098: "m", // SUB LATIN SMALL M
0x2099: "n", // SUB LATIN SMALL N
0x209A: "p", // SUB LATIN SMALL P
0x209B: "s", // SUB LATIN SMALL S
0x209C: "t", // SUB LATIN SMALL T
0x2C7C: "j" }, // SUB LATIN SMALL J
needles, needlesX, reGet, reHas;
function facet( apply ) {
// Process text node contents
// Precondition:
// apply -- string with one character
// Postcondition:
// Returns jQuery element set
// Uses:
// > config.latin
// > transl
// > config.sign
// > config.scream
// >< needles
// >< needlesX
// facet()
// 2015-12-27 [email protected]
var k = apply.charCodeAt( 0 ),
light = ( k < 256 ),
low = false,
s, $r;
if ( light ) {
needles++;
} else {
needlesX++;
low = ( ( k >= 0x1D62 && k <= 0x1D65 ) ||
( k >= 0x2080 && k <= 0x209C ) );
if ( ! config.latin ) {
low = low ||
( k >= 0x1D66 && k <= 0x03C7 );
}
}
$r = $( low ? "<sub>" : "<sup>" );
s = transl;
if ( typeof s === "number" ) {
s = String.fromCharCode( s );
}
$r.text( s );
if ( config.sign ) {
$r.addClass( config.sign );
if ( ! light ) {
$r.addClass( config.sign + "-ucs" );
if ( config.scream ) {
$r.addClass( config.scream );
}
}
}
return $r;
} // facet()
function fair( adjust ) {
// Process text node contents
// Precondition:
// adjust -- string to be converted
// Postcondition:
// Returns jQuery element set
// Uses:
// > reGet
// facet()
// 2015-12-27 [email protected]
var s = adjust,
$r = $( "<span>" ),
got;
while ( s ) {
got = reGet.exec( s );
if ( got ) {
if ( got ) {
$r.append( $( "<span>" ).text( got ) );
}
$r.append( facet( got ) );
s = got;
} else {
$r.append( $( "<span>" ).text( s ) );
s = false;
}
} // while
return $r;
} // fair()
function feed ( $assembly ) {
// Process one node
// Precondition:
// $assembly -- jQuery element set to be manipulated
// Postcondition:
// Executed
// Uses:
// > config.max
// > reHas
// feed() -- recursive
// fair()
// 2015-12-27 [email protected]
var skip = " code form pre ",
s = $assembly.text(),
i, el, $cont;
if ( config.max && s.length > config.max ) {
s = "";
}
if ( reHas.test( s ) ) {
$cont = $assembly.contents();
for ( i = $cont.length - 1; i >= 0; i-- ) {
el = $cont.get( i );
switch ( el.nodeType ) {
case 1: // element
s = " " + el.nodeName.toLowerCase() + " ";
if ( skip.indexOf( s ) < 0 ) {
feed( $cont.eq( i ) );
}
break;
case 3: // text node
s = el.nodeValue;
if ( reHas.test( s ) ) {
el.nodeValue = "";
$cont.eq( i ).after( fair( s ) );
}
break;
} // switch el.nodeType
} // for i--
}
} // feed()
offer.factory = function ( assign, apply ) {
// Initialize SuMag subsystem
// Precondition:
// assign -- keyword, or boolean
// false: complete setup
// apply -- value
// Uses:
// >< config.large
// >< config.latin
// < config.max
// < config.sign
// < config.scream
// 2015-12-27 [email protected]
var s;
if ( typeof assign === "string" ) {
config = apply;
if ( ( assign === "latin" && ! apply ) ||
( assign === "scream" && apply ) ) {
config.large = true;
}
} else {
s = String.fromCharCode( 178, 179, 185 );
if ( config.large ) {
s = s + String.fromCharCode( 0x1D62, 45, 0x1D65,
0x2070, 0x2071,
0x2074, 45, 0x208E,
0x2090, 45, 0x209C );
if ( ! config.latin ) {
s = s + String.fromCharCode( 0x0656,
0x1D66, 45, 0x1D6A );
// + various
}
}
reGet = new RegExp( "^(*)()(.*)$" );
reHas = new RegExp( "" );
}
}; // offer.factory()
offer.fire = function ( $assembly ) {
// Perform SuMag
// Precondition:
// $assembly -- jQuery element set to be manipulated
// Postcondition:
// Executed
// Uses:
// < needles
// < needlesX
// feed()
// 2015-12-27 [email protected]
needles = 0;
needlesX = 0;
feed( $assembly );
}; // offer.fire()
offer.found = function ( alter ) {
// Retrieve number of replacements
// Precondition:
// alter -- true: large value; else: ANSI value
// Postcondition:
// Returns number
// Uses:
// > needles
// > needlesX
// 2015-12-27 [email protected]
return ( alter ? needlesX : needles );
}; // offer.found()
return offer;
} )( $ ); // SuMag
function fiat( $assembly ) {
// Perform replacement
// Precondition:
// $assembly -- jQuery element of content area
// Uses:
// > .locator
// > .type
// > .support
// SuMag.fire()
// SuMag.found()
// 2017-01-01 [email protected]
var nA, nU, show, sign, $a, $div, $span;
if ( ! $( "#wikiDiff" ).length ) {
SuMag.fire( $assembly );
if ( SSM.locator ) {
sign = SSM.type + "-info";
$( "#" + sign ).remove(); // How comes?
nA = SuMag.found();
nU = SuMag.found( true );
if ( nA + nU ) {
show = nA + "";
if ( nU ) {
show = show + " / " + nU;
}
$a = $( "<a>" );
$a.attr( { "href": "//en.wikipedia.orghttps://wikines.com/en/"
+ SSM.support } )
.text( SSM.support );
$span = $( "<span>" );
$span.css( { "margin-left": "2em" } )
.text( show );
$div = $( "<div>" );
$div.append( $a, $span )
.attr( { "class": SSM.type,
"id": sign } )
.css( { "border": "#808080 1px solid",
"margin-bottom": "1em",
"margin-top": "1em",
"padding": "0.8em" } );
$assembly.append( $div );
}
}
}
} // fiat()
function fill() {
// User options arrived
// Uses:
// > Config
// > .except
// > .lapsus
// > .large
// > .latin
// > .type
// > .max
// >< .locator
// SuMag.factory()
// mw.hook()
// (fiat)
// 2015-12-27 [email protected]
var exceptions;
if ( typeof Config === "object" ) {
exceptions = Config;
} else {
exceptions = ;
}
if ( typeof SSM.except === "object"
&& SSM.except &&
typeof SSM.except.length === "number" ) {
exceptions.concat( SSM.except );
}
if ( $.inArray( SSM.wgArticleId, exceptions ) < 0 ) {
if ( typeof SSM.lapsus === "boolean" ) {
SuMag.factory( "scream", "error" );
SSM.locator = true;
}
if ( typeof SSM.large === "boolean" ) {
SuMag.factory( "large", SSM.large );
}
if ( typeof SSM.latin === "boolean" ) {
SuMag.factory( "latin", SSM.latin );
}
if ( typeof SSM.locator === "boolean"
&& SSM.locator ) {
SuMag.factory( "sign", SSM.type );
}
if ( typeof SSM.max === "number"
&& SSM.max > 0 ) {
SuMag.factory( "max", SSM.max );
}
SuMag.factory();
mw.hook( "wikipage.content" ).add( fiat );
}
} // fill()
function fire() {
// Start possible actions on current page
// Uses:
// > .signature
// > .type
// < .wgDBname
// mw.loader.getState()
// mw.loader.state()
// mw.config.get()
// mw.loader.using()
// mw.hook()
// (fill)
// 2018-08-24 [email protected]
var env, rls;
if ( mw.loader.getState( SSM.signature ) !== "ready" ) {
rls = { };
rls = "ready";
mw.loader.state( rls );
env = mw.config.get( [ "wgAction",
"wgArticleId",
"wgDBname",
"wgNamespaceNumber" ] );
if ( env.wgNamespaceNumber >= 0 &&
"|edit|submit|view|".indexOf( env.wgAction ) > 0 ) {
SSM.wgArticleId = env.wgArticleId;
SSM.wgDBname = env.wgDBname;
mw.loader.using( ,
fill );
}
mw.hook( SSM.type + ".ready" ).fire();
}
} // fire()
fire();
}( window.mediaWiki, window.jQuery ) );
// Emacs
// Local Variables:
// coding: iso-8859-1-dos
// End:
/// EOF </nowiki> superscriptMagnifier/d.js