Usuario:DarkGames26/common.js

De Terraria Wiki
Ir a la navegación Ir a la búsqueda

Nota: Después de publicar, quizás necesite actualizar la caché de su navegador para ver los cambios.

  • Firefox/Safari: Mantenga presionada la tecla Shift mientras pulsa el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
  • Google Chrome: presione Ctrl+Shift+R (⌘+Shift+R en Mac)
  • Internet Explorer/Edge: mantenga presionada Ctrl mientras pulsa Actualizar, o presione Ctrl+F5
  • Opera: Presiona Ctrl+F5.
/**
 * Diferentes utilidades
 */
var util = (function(){
	var exports = {
		/* common l10n factory */
		l10nFactory: function($lang, $data) {
			return function ($key) {
				return $data[$key] && ($data[$key][$lang] || $data[$key]['en']) || '';
			};
		}
	};

	function throttle(t, e, o, n) {
		var r, i = !1,
			u = 0;

		function c() {
			r && clearTimeout(r)
		}

		function a() {
			for (var a = arguments.length, d = new Array(a), l = 0; l < a; l++) d[l] = arguments[l];
			var f = this,
				v = Date.now() - u;

			function p() {
				u = Date.now(), o.apply(f, d)
			}

			function h() {
				r = void 0
			}
			i || (n && !r && p(), c(), void 0 === n && v > t ? p() : !0 !== e && (r = setTimeout(n ? h : p, void 0 === n ? t - v : t)))
		}
		return "boolean" != typeof e && (n = o, o = e, e = void 0), a.cancel = function() {
			c(), i = !0
		}, a
	}

	function debounce(t, e, o) {
		return void 0 === o ? throttle(t, e, !1) : throttle(t, o, !1 !== e)
	}
	exports.debounce = debounce;
	exports.throttle = throttle;
	return exports;
})();


///////////////////////////////////////////////////////////////////////////////////////////////////////////////

/**
 * Handle wide tables
 *
 * Display a horizontal floating scroll bar when the table width exceeds the page width.
 */
$(function() {
	var TABLE_WIDE_CLASS = "table-wide";
	var TABLE_WIDE_INNER_CLASS = "table-wide-inner";

	var handleWideTables = function(tables) {
		var handler = util.debounce(100, (function() {
			if(!tables){
				return;
			}
			tables.forEach(function(table) {
				var $table = $(table);
				if(!$table.data('container')){
					$table.data('container', table.parentNode);
				}
				var container = $table.data('container');
				if(!container){
					return;
				}
				var $innerBox = $table.parent();
				var $outerBox = $innerBox.parent();
				var overwide = table.getBoundingClientRect().width > container.getBoundingClientRect().width;
				if($outerBox.hasClass(TABLE_WIDE_CLASS)){
					if(overwide){
						$innerBox.floatingScroll("update");
					}else{
						$outerBox.before($table).remove();
					}
				}else{
					if(overwide) {
						$('<div/>').addClass(TABLE_WIDE_INNER_CLASS).appendTo(
							$('<div/>').addClass(TABLE_WIDE_CLASS).insertBefore($table)
						).append($table).floatingScroll("init").floatingScroll("update");
					}
				}
			});
		}));
		handler();
		window.addEventListener("resize", handler);
	};

	var isEditorActive  = function() {
		var e = new URLSearchParams(window.location.search);
		return "edit" === e.get("action") || "submit" === e.get("action") || ("edit" === e.get("veaction")
			|| "submit" === e.get("veaction") || "editsource" === e.get("veaction"));
	}

	mw.hook("wikipage.content").add(function() {
		if (!isEditorActive()) {
			var el = document.querySelector("#bodyContent");
			if (el) {
				handleWideTables(el.querySelectorAll("table"));
			}
		}
	});
});

/**
 * Tablas AJAX
 */
$(function() {
	var l10n = util.l10nFactory(mw.config.get('wgUserLanguage'),{
		showData: {
			'en': 'show data',
			'es': 'mostrar datos',
			'de': 'Daten anzeigen',
			'fr': 'affiche les données',
			'zh': '显示数据',
			'zh-cn': '显示数据'
		},
		wait: {
			'en': 'Please wait, the content is being loaded...',
			'es': 'Por favor espere, el contenido se esta cargando...',
			'de': 'Bitte warten, der Inhalt wird geladen...',
			'fr': 'Veuillez patienter pendant le chargement du contenu...',
			'pt': 'Por favor espere, o conteúdo está sendo carregado...',
			'uk': 'Будь ласка, зачекайте вміст завантажиться…',
			'zh': '请稍候,正在加载内容……',
			'zh-cn': '请稍候,正在加载内容……'
		},
		edit: {
			'en': 'edit',
			'es': 'editar',
			'de': 'bearbeiten',
			'fr': 'modifier',
			'pt': 'Editar',
			'uk': 'редагувати',
			'zh': '编辑',
			'zh-cn': '编辑'
		},
		hide: {
			'en': 'hide',
			'en': 'ocultar',
			'de': 'verbergen',
			'fr': 'masquer',
			'pt': 'Esconder',
			'uk': 'згорнути',
			'zh': '隐藏',
			'zh-cn': '隐藏'
		},
		show: {
			'en': 'show',
			'es': 'mostrar',
			'de': 'anzeigen',
			'fr': 'afficher',
			'pt': 'Mostrar',
			'uk': 'розгорнути',
			'zh': '显示',
			'zh-cn': '显示',
		},
		error: {
			'en': 'Unable to load table; the source article for it might not exist.',
			'es': 'Se ha deshabilitado la carga de la tabla, el artículo de destino no existe.',
			'de': 'Kann Tabelle nicht laden; möglicherweise existiert der Quellartikel nicht.',
			'fr': 'Impossible de charger cette table; l\'article originel ne semble pas exister.',
			'pt': 'Não é possível a carregar tabela; o artigo fonte pode não existir.',
			'uk': 'Неможливо завантажити вміст; можливо, цільова сторінка не існує.',
			'zh': '无法加载表格,其源文章可能不存在。',
			'zh-cn': '无法加载表格,其源文章可能不存在。'
		}
	});
	$("table.ajax").each(function (i) {
		var table = $(this).attr("id", "ajaxTable" + i);
		table.find(".nojs-message").remove();
		var headerLinks = $('<span style="float: right;">').appendTo(table.find('th').first());
		var cell = table.find("td").first();
		var needLink = true;
		cell.parent().show();
		if (cell.hasClass("showLinkHere")) {
			var old = cell.html();
			var rep = old.replace(/\[link\](.*?)\[\/link\]/, '<a href="javascript:;" class="ajax-load-link">$1</a>');
			if (rep !== old) {
				cell.html(rep);
				needLink = false;
			}
		}
		if (needLink){
			headerLinks.html('[<a href="javascript:;" class="ajax-load-link">'+l10n('showData')+'</a>]');
		}
		table.find(".ajax-load-link").parent().addBack().filter('a').click(function(event) {
			event.preventDefault();
			var sourceTitle = table.data('ajax-source-page'), baseLink = mw.config.get('wgScript') + '?';
			cell.text(l10n('wait'));
			$.get(baseLink + $.param({ action: 'render', title: sourceTitle }), function (data) {
				if (!data) {
					return;
				}
				cell.html(data);
				cell.find('.ajaxHide').remove();
				cell.find('.terraria:not(.ajaxForceTerraria)').removeClass('terraria');
				if (cell.find("table.sortable").length) {
					mw.loader.using('jquery.tablesorter', function() {
						cell.find("table.sortable").tablesorter();
					});
				}
				headerLinks.text('[');
				headerLinks.append($('<a>'+l10n('edit')+'</a>').attr('href', baseLink + $.param({ action: 'edit', title: sourceTitle })));
				headerLinks.append(document.createTextNode(']\u00A0['));
				var shown = true;
				$("<a href='javascript:;'>"+l10n('hide')+"</a>").click(function() {
					shown = !shown;
					cell.toggle(shown);
					$(this).text(shown ? l10n('hide') : l10n('show'));
				}).appendTo(headerLinks);
				headerLinks.append(document.createTextNode(']'));
			}).error(function() {
				cell.text(l10n('error'));
			});
		});
	});
});