User:Sam Sailor/teleDirect.js
Jump to navigation
Jump to search
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
Documentation for this user script can be added at User:Sam Sailor/teleDirect. |
( function( DOM_d ) {
$( DOM_d ).ready( function() {
var FGTD = "fg-tele-direct", TO = "To", FROM = "From", CREATE = "Create", SLCTXT = "select", OPTNTXT = "option",
NMSPCS = { 0: "Article", 2: "User", 4: "Wikipedia", 6: "File", 8: "MediaWiki", 10: "Template",
12: "Help", 14: "Category", 100: "Portal", 108: "Book", 118: "Draft", 446: "Education Program",
710: "TimedText", 828: "Module", 2300: "Gadget", 2302: "Gadget definition", 2600: "Topic" },
//NMSPCS: { 0: "Mainspace", 1: "Mainspace talk" },
//NMSPCLSS: { undefined: "Mainspace", "talk": "Mainspace talk" },
SSTRS = {
"Wikipedia": "",
"Wiktionary": "",
"Wikinews": "",
"Wikibooks": "",
"Wikiquote": "",
"Wikisource": "",
"Wikiversity": "",
"Wikivoyage": "",
"Wikidata": "",
"MediaWiki": "",
"Meta": "meta.wikimedia",
"Labs": "wikitech.wikimedia",
"Commons": "commons.wikimedia",
"Wikispecies": "species.wikimedia",
"Incubator": "incubator.wikimedia",
"Outreach": "outreach.wikimedia",
"Simple Wikipedia": "simple.wikipedia",
"Simple Wiktionary": "simple.wiktionary",
"Simple Wikinews": "simple.wikinews",
"Simple Wikibooks": "simple.wikibooks",
"Simple Wikiquote": "simple.wikiquote",
"Simple Wikisource": "simple.wikisource",
"Simple Wikiversity": "simple.wikiversity",
"Simple Wikivoyage": "simple.wikivoyage"
},
WG_namespacenumber = mw.config.get( "wgNamespaceNumber" ),
WG_contentlanguage = mw.config.get( "wgContentLanguage" ),
WG_sitename = mw.config.get( "wgSiteName" ),
eById = function( id ) { return DOM_d.getElementById( id ); },
cE = function( e ) { return DOM_d.createElement( e ); },
cI= function( id, vlu, typ ) {
var npt = cE( "input" );
npt.type = typ || "text";
npt.value = vlu || "";
npt.id = id || "";
return npt;
},
cD = function() { return cE( "div" ); },
cB = function( id, txt, fnctn ) {
var btn = cE( "button" );
btn.id = id;
btn.textContent = txt;
btn.addEventListener( "click", fnctn, false );
return btn;
},
cL = function( cntnt ) {
var li = cE( "li" );
li.appendChild( cntnt );
return li;
},
/* projectNamespaces = function() {
var fns = mw.config.get( "wgFormattedNamespaces" ),
nsi = mw.config.get( "wgNamespaceIds" ),
ns, cns, cnsi, tmp;
for ( ns in nsi ) {
cnsi = nsi[ ns ];
cns = fns[ cnsi ];
if ( underspace( cns ).toLowerCase() === ns && cnsi !== 0 && cnsi !== 1 ) {
tmp = {};
tmp[ cns ] = [];
ql.optnvlu.push( tmp );
} else {
ql.alss[ ns ] = cns;
}
}
return ql.optnvlu;
}, */
createRedirect = function() {
// do API stuff
// don't forget the .org
// wgRedirectedFrom
console.log( "Nope!" );
},
langSelect = function( p ) {
var lng = cI( FGTD + "-lang-" + SLCTXT + "-" + p, WG_contentlanguage );
lng.size = 1;
return lng;
},
sisterSelect = function( p ) {
var slct = cE( SLCTXT ),
optn, sstr, csstr;
slct.id = FGTD + "-sister-" + SLCTXT + "-" + p;
for ( sstr in SSTRS ) {
csstr = SSTRS[ sstr ];
optn = cE( OPTNTXT );
optn.textContent = sstr;
optn.value = csstr ? csstr : sstr.toLowerCase();
slct.appendChild( optn );
if ( sstr === WG_sitename ) {
optn.selected = true;
}
}
slct.addEventListener( "change", function( evt ) {
var trg = evt.target,
dtlng = "data-lang",
prnt = trg.parentElement,
gttdt = FGTD + "-gottadot",
lngslctr = trg.previousElementSibling;
if ( ~trg.options[ trg.selectedIndex ].value.indexOf( "." ) ) {
prnt.classList.add( gttdt );
prnt.setAttribute( dtlng, lngslctr.value || prnt.getAttribute( dtlng ) );
lngslctr.value = "";
} else {
lngslctr.value = prnt.getAttribute( dtlng ) || lngslctr.value;
prnt.classList.remove( gttdt );
}
}, false );
return slct;
},
namespaceSelect = function( p ) {
var slct = cE( SLCTXT ),
optn, tlkoptn, nsn;
slct.id = FGTD + "-namespace-" + SLCTXT + "-" + p;
if ( p === TO ) {
optn = cE( OPTNTXT );
optn.textContent = optn.value = "Special";
slct.appendChild( optn );
}
for ( nsn in NMSPCS ) {
optn = cE( OPTNTXT );
optn.textContent = optn.value = NMSPCS[ nsn ];
tlkoptn = optn.cloneNode( true );
tlkoptn.textContent = tlkoptn.value += " talk";
if ( nsn == WG_namespacenumber ) {
optn.selected = true;
} else if ( Number( nsn ) + 1 == WG_namespacenumber ) {
tlkoptn.selected = true;
}
slct.appendChild( optn );
slct.appendChild( tlkoptn );
}
return slct;
},
cIs = function( p ) {
var id = FGTD + "-" + p,
npt = cI( id ),
cntnr = cD(),
lbl = cE( "label" );
lbl.setAttribute( "for", id );
lbl.textContent = p;
cntnr.appendChild( lbl );
cntnr.appendChild( langSelect( p ) );
cntnr.appendChild( sisterSelect( p ) );
cntnr.appendChild( namespaceSelect( p ) );
if ( p === TO ) {
npt.value = mw.config.get( "wgTitle" );
}
cntnr.appendChild( npt );
return cntnr;
};
eById( "p-tb" ).getElementsByTagName( "ul" )[ 0 ].appendChild(
cL( cB( FGTD, "TeleDirect", function() {
var id = FGTD + "-ui",
ui = eById( id );
if ( !ui ) {
var ttl = cE( "h4" );
ui = cD();
ui.id = id;
ui.classList.add( id );
ttl.textContent = CREATE + " a redirect";
ui.appendChild( ttl );
ui.appendChild( cIs( FROM ) );
ui.appendChild( cIs( TO ) );
ui.appendChild( cB( FGTD + "-create", CREATE, createRedirect ) );
ui.appendChild( cB( FGTD + "-cancel", "Cancel", function() {
ui.classList.remove( id );
} ) );
DOM_d.body.appendChild( ui );
frmnpt = eById( FGTD + "-" + FROM );
frmnpt.addEventListener( "keydown" , function( evt ) {
if ( evt.which === 13 ) {
createRedirect();
}
}, false );
frmnpt.focus();
} else {
ui.classList.toggle( id );
}
} ) )
);
importStylesheetURI( "https://en.wikipedia.org/w/index.php?title=User:Fred_Gandt/teleDirect.css&action=raw&ctype=text/css" );
} );
} ( document ) );