User:PerfektesChaos/js/pageLinkHelper/d.js: Difference between revisions

Content deleted Content added
-1.7
-1.8
Line 2:
// Some minor link helpers
// ResourceLoader: compatible; dependencies: user, mediawiki.util
/// 2014-12-1619 PerfektesChaos@de.wikipedia
/// Fingerprint: #0#0#
/// <nowiki>
Line 11:
( function ( mw, $ ) {
"use strict";
var Version = -1.78,
Sign = "pageLinkHelper",
Signature = "ext.gadget." + Sign,
Line 17:
 
 
 
Config = { PermanentLink: { de: "PermaLink" },
Config = { PermanentLink: { "*": "PermaLink" },
Redirect: { de: "Weiterleitung" },
permTitle: { "*": "PermaLink" },
purgeTip: { en: "PURGE this page from server cache",
de: "PURGE:"
Line 25 ⟶ 27:
purgeTitle: { en: "Purge cache",
de: "Seite purgen" },
qqxTip: { en: "Reload"
+ " and show interface element IDs" },
qqxTitle: { en: "lang=qqx" },
translate: { "als" : "de",
"bar" : "de",
Line 40 ⟶ 45:
"stq" : "de",
"vmf" : "de" }
}; // 2014-12-1619 PerfektesChaos@de.wikipedia
 
 
Line 50 ⟶ 55:
// Uses:
// > Sign
// 2014-12-1119 PerfektesChaos@de.wikipedia
var space = "4px",
style = "#808080B0C4DE 1px solid",
$r = $( "<div>" );
$r.attr( { "class": Sign,
"id": access } );
style$r.css( ={ "#808080border-bottom": 1px solid"; style,
$r.css( { "border-bottomleft": style,
"borderbackground-leftcolor": style"#FFFFFF",
"floatbackground": "rgba(255, 255, 255, "right0.5)",
"font-familyfloat": "monospaceright",
"marginfont-bottomfamily": "1emmonospace",
"margin-leftbottom": "1em",
"margin-topleft": space "1em",
"paddingmargin-bottomtop": space,
"padding-leftbottom": space } );,
"padding-right": space,
"padding-left": space } );
return $r;
} // $factory()
Line 72 ⟶ 79:
 
function $float( $apply ) {
// Insert/exchange upper right corner element
// Precondition:
// $apply -- jQuery element to insert
// false to vheckcheck availability
// Postcondition:
// Returns true, if insertion possible
Line 81 ⟶ 88:
// > Sign
// >< Env
// 2014-12-1119 PerfektesChaos@de.wikipedia
var r, // = undefined
sequence, suitable, $divanchor, $clear;
if ( typeof Env.$anchorcorner === "undefined" ) {
Env.$anchorcorner = $( "#firstHeading<div>" );
Env.$corner.attr( { "class": Sign,
"id": Sign + "Corner" } );
if ( ! Env.skin ) {
Env.skin = mw.config.get( "skin" );
}
switch ( Env.skin ) {
case "cologneblue" :
suitable = "firstHeading";
sequence = "after";
break;
case "modern" :
suitable = "contentSub";
sequence = "before";
break;
case "monobook" :
case "vector" :
suitable = "bodyContent";
sequence = "prepend";
break;
} // switch Env.skin
$anchor = $( "#" + suitable );
if ( ! $anchor.length ) {
$anchor = $( "#firstHeading" );
sequence = "after";
}
if ( $anchor.length ) {
$anchor[ sequence ]( Env.$corner );
$clear = $( "<div>" );
$clear.css( { "clear": "left" } );
Env.$corner.after( $clear );
} else {
Env.$corner = false;
}
}
if ( Env.$anchor.lengthcorner ) {
Env.$corner.empty();
Env.$corner.prepend( $apply );
r = true;
if ( $apply ) {
$div = $( "." + Sign );
$div.remove();
$div = $( "<div>" );
$div.css( { "clear": "left" } );
Env.$anchor.after( $div );
Env.$anchor.after( $apply );
}
}
return r;
Line 104 ⟶ 138:
 
function face() {
// Initialize environment and application object, if user defined
// Precondition:
// module 'user' loaded
Line 114 ⟶ 148:
// > Version
// >< PLH
// 2014-12-1619 PerfektesChaos@de.wikipedia
if ( typeof mw.libs[ Sign ] !=== "object" ||&&
! mw.libs[ Sign ] ) { &&
mw.libs[ Sign ]! =PLH {) };{
}
if ( ! PLH ) {
PLH = mw.libs[ Sign ];
PLH.vsn = Version;
}
} // face()
 
 
 
function facet( applied ) {
// Check for user option
// Precondition:
// applied -- option keyword
// module 'user' loaded
// Postcondition:
// Returns value, or undefined
// Uses:
// > PLH
// 2014-12-19 PerfektesChaos@de.wikipedia
var r; // = undefined
face();
if ( PLH && typeof PLH[ applied ] !== "undefined" ) {
r = PLH[ applied ];
}
return r;
} // facet()
 
 
Line 170 ⟶ 222:
 
 
function fair( access, adapt, alter ) {
// Localization
// Precondition:
// access -- configuration keyword
// adapt -- default string (en)false, if userproject (language) dependant
// else projectuser (language) dependant
// alter -- default string (en)
// Postcondition:
// Returns value, or keyword 'access'
Line 185 ⟶ 238:
// facility()
// mw.config.get()
// 2014-12-1619 PerfektesChaos@de.wikipedia
var rel, = accessr, say;
el, say;
face();
if ( typeofalter PLH.config) === "object" &&{
r = alter;
} else {
r = access;
}
if ( PLH &&
typeof PLH.config === "object" &&
PLH.config &&
typeof PLH.config[ access ] === "object" ) {
el = PLH.config[ access ];
}
if ( ! el ) {
Line 202 ⟶ 260:
if ( say ) {
r = say;
} else if ( typeof adaptalter =!== "string" ) {
r = adapt;
} else {
r = "???" + access + "???";
}
Line 231 ⟶ 287:
 
 
function featurefavorite( appliedapply ) {
// CheckInsert forportlet userlink, optionif appropriate
// Precondition:
// appliedapply -- option keywordobject
// module ' .signature -- user' loadedoption keyword
// .skins -- default skins, if any
// true; or "|vector|" etc.
// .fun -- callback for link generation
// .show -- link title keyword
// .support -- tooltip keyword
// OPTIONAL:
// .suffix -- selector creation
// DOM.ready
// mediawiki.util loaded
// user resources loaded
// Postcondition:
// Returns valueDOM of portlet, or undefined
// Uses:
// >< PLHEnv
// 2014-12-16 PerfektesChaos@de.wikipedia facet()
var// r; // = undefinedmw.config.get()
face// fair();
// mw.util.addPortletLink()
if ( typeof PLH[ applied ] !== "undefined" ) {
// r = PLH[ applied ];(apply.fun)
// 2014-12-19 PerfektesChaos@de.wikipedia
var opt = facet( apply.signature ),
seed = null,
slot = "p-cactions",
start = "ca",
got, r, re, skins, suffix, swap;
switch ( typeof opt ) {
case "boolean" :
if ( opt ) {
seed = false;
skins = true;
} else {
slot = false;
}
break;
case "string" :
seed = opt;
re = /^([a-z]+)-(.+)$/;
got = re.exec( seed );
if ( got ) {
switch ( got[ 1 ] ) {
case "p" :
slot = seed;
seed = false;
switch ( got[ 2 ] ) {
case "navigation" :
start = "n";
break;
case "tb" :
start = "t";
break;
} // switch got.2
break;
case "ca" :
break;
case "n" :
slot = "p-navigation";
break;
case "t" :
slot = "p-tb";
break;
} // switch got.1
}
break;
} // switch typeof opt
if ( slot && seed === null ) {
if ( ! skins ) {
switch ( typeof apply.skins ) {
case "boolean" :
case "string" :
skins = apply.skins;
break;
} // switch typeof apply.skins
}
if ( skins === true ) {
skins = "|vector|";
}
if ( skins ) {
if ( ! Env.skin ) {
Env.skin = mw.config.get( "skin" );
}
if ( skins.indexOf( Env.skin ) < 0 ) {
if ( opt ) {
slot = "p-tb";
start = "t";
} else {
slot = false;
}
}
} else {
slot = false;
}
}
if ( slot ) {
swap = apply.fun();
if ( typeof apply.suffix === "string" ) {
suffix = apply.suffix;
} else {
suffix = apply.signature;
}
if ( seed ) {
seed = "#" + seed;
}
r = mw.util.addPortletLink( slot,
swap,
fair( apply.show, true ),
start + "-" + suffix,
fair( apply.support, true ),
null,
seed );
}
return r;
} // featurefavorite()
 
 
Line 292 ⟶ 448:
}
} // fiat()
 
 
 
function flat( ahead ) {
// Provide "uselang=qqx" link
// Precondition:
// ahead -- true if initializing, false to link
// DOM.ready
// mediawiki.util loaded
// user resources loaded
// Postcondition:
// Returns link, or undefined
// Uses:
// > ___location
// favorite()
// (flat)
// 2014-12-19 PerfektesChaos@de.wikipedia
var r;
if ( ahead ) {
favorite( { signature: "slangQQX",
skins: false,
fun: flat,
show: "qqxTitle",
support: "qqxTip",
suffix: "langQQX"
} );
} else {
r = window.___location.href;
r = r.replace( /^(.+)#.+$/, "$1" )
.replace( /([?&])uselang=[^&]*(&.*)?$/, "$1$2" );
if ( ! /[?&]$/.test( r ) ) {
if ( r.indexOf( "?" ) > 0 ) {
r = r + "&";
} else {
r = r + "?";
}
}
r = r + "uselang=qqx";
}
return r;
} // flat()
 
 
Line 421 ⟶ 618:
$div.append( $spanBeg.clone() );
show = special
+ fair( "PermanentLink", false, "PermaLink" )
+ "/" + Env.oldid;
$a.attr( { "href": mw.util.getUrl( show ) + swift } );
Line 433 ⟶ 630:
$div.append( $spanBeg );
show = special
+ fair( "Redirect", false )
+ "/page/" + Env.curid;
$a.attr( { "href": mw.util.getUrl( show ) + swift } );
Line 454 ⟶ 651:
// > Sign
// > Version
// fair()
// (freeze)
// 2014-12-1119 PerfektesChaos@de.wikipedia
var $portlet = $( "#t-permalink" ),
show, support, $a, $span;
Line 464 ⟶ 662:
$a.attr( { "title": support } );
$a.click( freeze );
$a.text( fair( "permTitle", false, "PermaLink" ) );
$portlet.empty();
$portlet.append( $a );
Line 484 ⟶ 682:
 
 
function fresh( ahead ) {
// Provide purge link
// Precondition:
// ahead -- true if initializing, false to link
// DOM.ready
// mediawiki.util loaded
// user resources loaded
// Postcondition:
// Returns link, or undefined
// Uses:
// >< Env
// featurefavorite()
// mw.config.get()
// mw.util.getUrl()
// 2014-12-19 fair()PerfektesChaos@de.wikipedia
var r;
// mw.util.addPortletLink()
if ( ahead ) {
// 2014-12-16 PerfektesChaos@de.wikipedia
var opt favorite( ={ feature(signature: "purge" ),
seed = null skins: true ,
slot = "p-cactions" fun: fresh,
start = show: "capurgeTitle",
got, re, swap; support: "purgeTip",
suffix: "purge"
switch ( typeof opt ) {
case "boolean" : } );
} if ( opt )else {
seed = false;
} else {
slot = false;
}
break;
case "string" :
seed = opt;
re = /^([a-z]+)-(.+)$/;
got = re.exec( seed );
if ( got ) {
switch ( got[ 1 ] ) {
case "p" :
slot = seed;
seed = false;
switch ( got[ 2 ] ) {
case "navigation" :
start = "n";
break;
case "tb" :
start = "t";
break;
} // switch got.2
break;
case "ca" :
break;
case "n" :
slot = "p-navigation";
break;
case "t" :
slot = "p-tb";
break;
} // switch got.1
}
break;
} // switch typeof opt
if ( slot && seed === null ) {
Env.skin = mw.config.get( "skin" );
if ( Env.skin !== "vector" ) {
slot = false;
}
}
if ( slot ) {
Env.wgPageName = mw.config.get( "wgPageName" );
swapr = mw.util.getUrl( Env.wgPageName,
{ action: "purge" } );
if ( seed ) {
seed = "#" + seed;
}
mw.util.addPortletLink( slot,
swap,
fair( "purgeTitle", true ),
start + "-purge",
fair( "purgeTip", true ),
null,
seed );
}
return r;
} // fresh()
 
Line 577 ⟶ 727:
// >< Env
// mw.util.getUrl()
// featurefacet()
// history.___pushState()
// history.___replaceState()
// 2014-12-07 PerfektesChaos@de.wikipedia
var caused, opts, show, last, legacy, show, showed, state, swap;
if ( typeof window.history.___pushState === "function" &&
typeof window.history.___replaceState === "function" ) {
Line 591 ⟶ 741:
}
if ( ! last ) {
opts = featurefacet( "redirect" );
if ( opts &&
typeof opts === "object" &&
Line 671 ⟶ 821:
// fresh()
// from()
// 2014-12-16 PerfektesChaos@de.wikipedia facet()
Env// = { wgCanonicalSpecialPageName: flat()
// 2014-12-19 PerfektesChaos@de.wikipedia
Env = { skin: false,
wgCanonicalSpecialPageName:
mw.config.get( "wgCanonicalSpecialPageName" ) };
if ( Env.wgCanonicalSpecialPageName ) {
Line 707 ⟶ 860:
freezer( true );
}
fresh( true );
Env.wgRedirectedFrom
= mw.config.get( "wgRedirectedFrom" );
Line 713 ⟶ 866:
from();
}
break;
case "info" :
fresh( true );
break;
default:
Line 718 ⟶ 874:
} // switch wgAction
}
}
if ( facet( "slangQQX" ) ) {
flat( true );
}
} // fire()