User:Unready/common.js

// short-circuit running this file, Wikia-style, usually for debugging
if (/(?:\?|&)useuserjs=0(?:&|$)/.test(location.search)) {
	throw 'Exiting on useuserjs=0';
}
/**
 * For action=purge GET, change it to POST, then reload the page
 * Restores pre-1.28 behavior to MW 1.28+
 * Based on meta:User:Glaisher/autoPurge.js, 21 Aug 2016
 */
(function (mw, $) {
	if ((mw.config.get('wgAction') === 'purge') &&
		($.inArray('user', mw.config.get('wgUserGroups')) + 1)) {
		$.post(mw.config.get('wgScriptPath') + '/api.php', {
			format: 'none',
			action: 'purge',
			titles: mw.config.get('wgPageName').replace(/_/g, ' ')
		}, function () {
			// remove action=purge, but keep the rest
			location.replace(
				location.pathname +
				location.search
					.replace(/(?:\?|&)action=purge$/i, '')
					.replace(/(\?|&)action=purge&/i, '$1') +
				location.hash
			);
		});
	}
}(mediaWiki, jQuery));
/**
 * Description:
 * Load scripts/stylesheets from wiki articles
 *
 * Version 1.0: 15 May 2015
 *   Original version for Wikipedia use
 * Version 2.0: 6 July 2016
 *   Rewrite with jQuery.Deferred; Implement using
 *
 * License: CC BY-SA
 *   http://creativecommons.org/licenses/by-sa/3.0/
 */
(window.user = window.user || {}).loader = user.loader || (function (mw, $) {
	'use strict';

	var
		self = {
			version: '2.0: 6 Jul 2016'
		},
		urlBase = mw.config.get('wgScriptPath') +
				'/index.php?title=$1&action=raw&ctype=$2',
		wikiDomain = mw.config.get('wgServerName').split('.'),
		wikiSubdomain = [],
		registry = {};

	// get a single title, either JavaScript or CSS
	// return a promise, possibly used by $.when
	function getTitle(title, wiki) {
		var
			type, url, t;

		if (/css$/.test(title)) {
			type = 'text/css';
		} else if (/js$/.test(title)) {
			type = 'text/javascript';
		} else {
			self.message += '\nInvalid type for title: "' +
				title + '" must be css or js';
			return $.Deferred().reject().promise();
		}
		// "wiki" encode the article title, skips encoding some characters
		url = urlBase.replace('$2', type).replace('$1', title.replace(/\s/g, '_')
			.replace(/[^$,/:;@]/g, function (c) {
				return encodeURIComponent(c);
			})
		);
		if (wiki !== wikiSubdomain) {
			url = '//' + wiki + wikiDomain + url;
		}
		switch (type) {
		case 'text/css':
			t = document.createElement('link');
			t.rel = 'stylesheet';
			t.href = url;
			$('head').append(t);
			t = $.Deferred().resolve().promise();
			break;
		case 'text/javascript':
			t = $.ajax(url, {
				cache: true,
				crossDomain: true,
				dataType: 'script'
			}).promise();
			break;
		}
		return t;
	}

	// load wiki articles as scripts or styles
	// articles = string or array of strings
	//   which are titles of articles to load
	// JavaScript articles terminate with js
	// stylesheet articles terminate with css
	// titles can be prepended with the form "u:<host>:"
	//   to designate a different host in the same domain
	// return an array of promises
	function load(articles) {
		var
			d = [], // the array of promises, one element per title
			wiki, title, t, i;

		if (typeof articles === 'string') {
			articles = [articles];
		} else if (!$.isArray(articles)) {
			self.message +=
				'\nload :: articles is not an array: ' + typeof articles;
			return [$.Deferred().reject().promise()];
		}
		for ( i = 0 ; i < articles.length ; ++i ) {
			title = articles[i];
			if (typeof title === 'string' ) {
				t = title.split(':');
				if ((t.length > 2) && (t[0] === 'u')) {
					wiki = t[1];
					title = t.splice(2).join(':');
				} else {
					wiki = wikiSubdomain;
				}
				t = wiki + ':' + title;
				if (!registry[t]) {
					registry[t] = getTitle(title, wiki);
				}
				d[i] = registry[t];
			} else {
				self.message +=
					'\nload :: title ' + i + ' is not a string: ' + typeof title;
				d[i] = $.Deferred().reject().promise();
			}
		}
		return d;
	}

	// load wiki articles as scripts or styles
	//   on the condition that the prerequisites are loaded
	// prereqs = string or array of strings
	//   which are titles to load before articles
	// articles = string or array of strings
	//   which are titles of articles to load
	// return a promise
	function using(prereqs, articles) {
		if (typeof prereqs === 'string') {
			prereqs = [prereqs];
		} else if (!$.isArray(prereqs)) {
			self.message +=
				'\nusing :: prereqs is not an array: ' + typeof prereqs;
			return $.Deferred().reject().promise();
		}
		if (typeof articles === 'string') {
			articles = [articles];
		} else if (!$.isArray(articles)) {
			self.message +=
				'\nusing :: articles is not an array: ' + typeof articles;
			return $.Deferred().reject().promise();
		}
		// load the articles when the prereqs complete
		// when() wants a list of individual arguments, not an array, so apply it
		return $.when.apply(null, load(prereqs)).done(function () {
			// when() resolves when the prereqs are loaded, not when they've run
			//   so enqueue load(articles) to give prereqs a chance to run
			setTimeout(load, 0, articles);
		}).promise();
	}

	// break the current qualified name
	//   into subdomain and domain names
	while (wikiDomain.length > 2) {
		wikiSubdomain.push(wikiDomain.shift());
	}
	wikiSubdomain = wikiSubdomain.join('.');
	wikiDomain = '.' + wikiDomain.join('.');
	self.message = 'OK, subdomain = ' + wikiSubdomain +
		', domain = ' + wikiDomain;
	// two methods to return
	self.load = load;
	self.using = using;
	return self;
}(mediaWiki, jQuery));
// ----------------------------------------------------------------------
(function (mw, $) {
	'use strict';

	var
		wgPageName = mw.config.get('wgPageName'),
		wgAction = mw.config.get('wgAction'),
		articles = [];
/*
	if (wgPageName === 'Special:Watchlist') {
		articles.push('User:Unready/ui.refresh.css'); // [[User:Unready/ui.refresh.css]]
		articles.push('User:Unready/ui.refresh.js');  // [[User:Unready/ui.refresh.js]]
	}
*/
	if (wgPageName === 'Special:Watchlist') {
		// move #watchlist-message outside #mw-content-text
		$('#mw-content-text').before($('#watchlist-message'));
		// define a custom watchlist
		$('#mw-content-text').empty().append('<div id="app-wlist"></div>');
	}
	// Watchlist (on any page)
	if ($('#app-wlist').length === 1) {
		articles.push('User:Unready/app.wlist.css'); // [[User:Unready/app.wlist.css]]
		articles.push('User:Unready/app.wlist.js');  // [[User:Unready/app.wlist.js]]
	}
	articles.push('User:Unready/ui.wikimarks.css'); // [[User:Unready/ui.wikimarks.css]]
	articles.push('User:Unready/ui.wikimarks.js');  // [[User:Unready/ui.wikimarks.js]]
	articles.push('User:Unready/ui.clock.css');     // [[User:Unready/ui.clock.css]]
	articles.push('User:Unready/ui.clock.js');      // [[User:Unready/ui.clock.js]]
	if (articles.length > 0) {
		user.loader.load(articles);
	}

	// insert tab for tab key event in edit areas
	// however, because of Event.timeStamp,
	//   it's broken in IE 8 and earlier
	//   and might be broken in Chrome 49 and later
	(function () {
		var
			last = 0;

		// event handler
		function onKey(e) {
			var
				epoch = e.timeStamp,
				s = this.selectionStart,
				t = this.scrollTop,
				v = this.value;

			if (e.keyCode === 9) {
				e.preventDefault();
				if (epoch !== last) {
					// insert a tab
					this.value =
						v.substr(0, s) + '\t' + v.substr(this.selectionEnd);
					this.scrollTop = t;
					this.selectionStart = this.selectionEnd = s + 1;
					last = epoch;
				}
			}
		}

		// exit if events don't have timestamps
		if (!document.createEvent ||
			!document.createEvent('HTMLEvents').timeStamp) {
			return;
		}
		// attach keydown and keypress handler to edit textarea
		$('#wpTextbox1')
			.keydown(onKey)
			.keypress(onKey);
	}());
}(mediaWiki, jQuery));

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.