User:Sam Sailor/teleDirect.js

From Wikimedia Commons, the free media repository
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.
( 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 ) );