/**
* Keep code in MediaWiki:Common.js to a minimum as it is unconditionally
* loaded for all users on every wiki page. If possible create a gadget that is
* enabled by default instead of adding it here (since gadgets are fully
* optimized ResourceLoader modules with possibility to add dependencies etc.)
*
* Since Common.js isn't a gadget, there is no place to declare its
* dependencies, so we have to lazy load them with mw.loader.using on demand and
* then execute the rest in the callback. In most cases these dependencies will
* be loaded (or loading) already and the callback will not be delayed. In case a
* dependency hasn't arrived yet it'll make sure those are loaded before this.
*/
"use strict";
// [[Category:Wiktionary scripts]] <nowiki>
/*jshint shadow:true, undef:true, latedef:true, unused:true, esversion:3 */
/*global window, jQuery, mw, importScript, importStylesheet, $ */
/** [[WT:PREFS]] v2.0 **/
// Note: copied into Mobile.js - please keep in sync
try {
(function () {
var prefs;
try {
prefs = window.localStorage.getItem("AGprefs");
} catch (e) {
prefs = jQuery.cookie("AGprefs");
}
prefs = prefs && JSON.parse(prefs);
if (mw.config.get("wgUserGroups").indexOf("autoconfirmed") !== -1) return;
if (mw.config.get("wgUserGroups").indexOf("user") === -1) {
// XXX: [[Wiktionary:Preferences/V2]] is just a temporary page
mw.loader.using(["mediawiki.util"], function () {
mw.util.addPortletLink(
mw.config.get("skin") === "vector-2022"
? "p-vector-user-menu-overflow"
: "p-personal",
mw.util.getUrl("Wiktionary:Preferences for users without an account"),
"Preferences",
"pt-agprefs",
"Personalise Wiktionary (settings are kept per-browser).",
"",
document.getElementById("pt-createaccount-2") ||
document.getElementById("pt-createaccount")
);
});
if (
mw.config.get("wgAction") === "view" &&
mw.config.get("wgPageName") ===
"Wiktionary:Preferences_for_users_without_an_account"
) {
mw.loader.load("ext.gadget.AGprefs"); // [[MediaWiki:Gadget-AGprefs.js]]
}
}
if (!prefs) return;
mw.loader.state(
"wiktionary_this_gadget_has_been_disabled_by_the_user",
"missing"
);
for (var key in prefs.modules) {
if (prefs.modules[key]) {
mw.loader.load([key]);
} else {
// unavoidable race condition. to prevent it, every enabled-by-default gadget should have "site" as a dependency
if (mw.loader.getState(key) !== "ready") {
mw.loader.moduleRegistry[key].dependencies.push(
"wiktionary_this_gadget_has_been_disabled_by_the_user"
);
mw.loader.state(key, "missing");
} else {
// XXX
mw.log.warn(
key +
" could not be disabled; make sure it has 'site' declared as a dependency"
);
}
}
}
for (var key in prefs.sheets) {
importStylesheet("MediaWiki:Gadget-" + key);
}
for (var key in prefs.scripts) {
importScript("MediaWiki:Gadget-" + key);
}
if (mw.config.get("wgUserGroups").indexOf("user") !== -1)
mw.loader.using(["mediawiki.api"], function () {
var changes = [];
for (var key in prefs.gadgets)
changes.push(
"gadget-" + key + "=" + (prefs.gadgets[key] ? "1" : "0")
);
new mw.Api()
.postWithToken("options", {
action: "options",
change: changes.join("|")
})
.then(function () {
jQuery.cookie("AGprefs", null);
try {
window.localStorage.removeItem("AGprefs");
} catch (e) {
/* */
}
mw.notify(
jQuery(
'<b>Your <a href="/wiki/Wiktionary:Preferences/V2">per-browser preferences</a> have been migrated</b><br/><br/>' +
'From now on, you should use your <a href="/wiki/Special:Preferences">user preferences page</a>. ' +
"Preferences will no longer apply after you log out."
)
);
});
});
})();
} catch (e) {
mw.log.warn(e);
}
mw.loader.using("mediawiki.util").done(function () {
/** &withmodule= query parameter **/
if (mw.util.getParamValue("withmodule"))
mw.loader.load(mw.util.getParamValue("withmodule").split(","));
/** &preloadtext= and &preloadminor= **/
if (mw.config.get("wgAction") === "edit")
jQuery(document).ready(function () {
var wpTextbox1 = document.getElementById("wpTextbox1");
var wpMinoredit = document.getElementById("wpMinoredit");
if (!wpTextbox1) return;
var preloadtext = mw.util.getParamValue("preloadtext");
var preloadminor = mw.util.getParamValue("preloadminor");
if (preloadtext && !wpTextbox1.value) wpTextbox1.value = preloadtext;
if (preloadminor !== null && wpMinoredit)
wpMinoredit.checked = !/^(0|false|no|)$/i.test(preloadminor);
});
});
// == "Did you mean" auto redirect ==
/**
* This will redirect in 3 seconds if a link enclosed in id="did-you-mean"
* is found, and add the text "Auto-redirected from X" under the top header
* if a rdfrom is passed in the get parameters.
* Pages with wynn ([[ƿ]]) will be redirected immediately.
**/
$.when(mw.loader.using(["user", "mediawiki.util"]), $.ready).done(function () {
if (window.disableAutoRedirect) return;
var rdFromValue = mw.util.getParamValue("rdfrom");
if (rdFromValue) {
$("#siteSub").after(
$("<div>")
.attr("id", "contentSub")
.append(document.createTextNode("(Auto-redirected from "))
.append(
$("<a>", {
href: mw.util.getUrl(rdFromValue, { redirect: "no" }),
addClass: "new"
}).text(rdFromValue)
)
.append(document.createTextNode(")"))
);
} else {
// Redirect as quickly as possible from [[ƿ]] title to [[w]] title.
var pageTitle = mw.config.get("wgTitle");
var isWynnTitle = /ƿ/i.test(pageTitle);
var didYouMean = $("#did-you-mean a").html();
var target = didYouMean
? didYouMean
: isWynnTitle
? $("#go-to-search-page a").html()
: null;
var timeout = isWynnTitle ? 0 : 3000;
window.setTimeout(function () {
var canRedirect = mw.util.getParamValue("redirect") != "no";
var action = mw.config.get("wgAction");
if (
target &&
target !== pageTitle &&
canRedirect &&
!window.disableAutoRedirect &&
(action == "view" || (isWynnTitle && action == "edit")) &&
mw.config.get("wgArticleId") === 0 &&
mw.config.get("wgNamespaceNumber") === 0 &&
!/Redirected from/.test(jQuery("#contentSub").html())
) {
window.location = mw.util.getUrl(target, { rdfrom: pageTitle });
}
}, timeout);
}
});
/* == [[WT:FEED]] == */
// used to be [[User:Conrad.Irwin/feedback.js]]
$.when(mw.loader.using("mediawiki.util"), $.ready).done(function () {
var fb_comment_url = mw.util.getUrl("Wiktionary:Feedback", {
action: "edit",
section: "new",
preload: "Wiktionary:Feedback/preload",
editintro: "Wiktionary:Feedback/intro",
preloadtitle: "[[:" + mw.config.get("wgPageName") + "]]"
});
var fb_comment = "If you have time, leave us a note.";
if (mw.config.get("skin") === "vector-2022") {
var vectorMenuContent = $("<a>")
.attr("href", fb_comment_url)
.text(fb_comment)
.appendTo($("<li>").addClass("mw-list-item"))
.parent()
.appendTo($("<ul>").addClass("vector-menu-content-list"))
.parent()
.appendTo($("<div>").addClass("vector-menu-content"))
.parent();
var vectorMenuHeading = $("<div>")
.addClass("vector-menu-heading")
.text("Feedback");
var vectorMenu = $("<div>")
.addClass("vector-menu mw-portlet mw-portlet-navigation")
.attr("id", "p-feedback")
.append(vectorMenuHeading)
.append(vectorMenuContent);
vectorMenu.appendTo($("#vector-main-menu"));
} else {
$("<a>")
.attr("href", fb_comment_url)
.text(fb_comment)
.appendTo($("<p>").css("font-size", "80%"))
.parent()
.appendTo($("<div>").addClass("body"))
.parent()
.before($("<h3>Feedback</h3>"))
.appendTo($("<div>").addClass("portal expanded").attr("id", "p-feedback"))
.parent()
.appendTo($("#mw-panel"));
}
});
// Various fixes for the trees generated by [[Module:family tree]].
$(function () {
// Show the top toggle.
$(".familytree-toptoggle").css("display", "");
// Initialize the text of the toggles.
$(".familytree")
.get()
.forEach(function (tree) {
var isCollapsed = tree.classList.contains("mw-collapsed");
var toggles = $(tree).find(".familytree-toggle");
if (toggles[0]) {
var customToggleClass = Array.prototype.filter.call(
toggles[0].classList,
function (className) {
return className.indexOf("mw-customtoggle") === 0;
}
)[0];
if (customToggleClass) {
var toggledElement = $(
"#" +
customToggleClass.replace(
"mw-customtoggle",
"mw-customcollapsible"
)
);
if (toggledElement) {
toggles.text(
toggledElement.data(isCollapsed ? "expandtext" : "collapsetext")
);
}
}
}
});
// Change the text in the custom toggles generated by [[Module:family tree]]
// when they are clicked.
$(".mw-collapsible").on(
"beforeExpand.mw-collapsible beforeCollapse.mw-collapsible",
function (event) {
if (this.id.indexOf("mw-customcollapsible") === 0) {
var toggle = $(
"." + this.id.replace("mw-customcollapsible", "mw-customtoggle")
);
if (event.type === "beforeExpand") {
toggle.text(this.dataset.collapsetext);
} else {
// beforeCollapse
toggle.text(this.dataset.expandtext);
}
event.stopPropagation();
}
}
);
});
// </nowiki>