// Thiết lập
self.avimSettings = {
headerText: "Gõ tiếng Việt",
helpArticle: "Wikipedia:Gõ tiếng Việt",
helpText: "Trợ giúp",
helpServer: mw.config.get("wgServer"),
methodArticleServer: "//vi.wikipedia.org",
methods: [
{value: 0, id: "auto", name: "Tự động", key: "F9"},
{value: 1, id: "telex", name: "Telex", article: "Telex (kiểu gõ)#Quy ước telex"},
{value: 2, id: "vni", name: "VNI", article: "VNI#Quy ước"},
{value: 3, id: "viqr", name: "VIQR", article: "VIQR#Quy tắc"},
{value: 4, id: "viqr2", name: "VIQR*"},
{value: -1, id: "off", name: "Tắt", key: "F12"},
],
options: [
{id: "daucu", name: "Bỏ dấu kiểu cũ", command: "setDauCu", key: "F7"},
{id: "ckspell", name: "Đúng chính tả", command: "setSpell", key: "F8"},
],
};
// Bản dịch
switch (mw.config.get("wgUserLanguage")) {
case "en":
self.avimSettings.headerText = "Vietnamese input";
self.avimSettings.helpArticle = "Wikipedia:Gõ tiếng Việt/Tiếng Anh";
self.avimSettings.helpText = "Help";
self.avimSettings.methodArticleServer = "//en.wikipedia.org";
self.avimSettings.methods[0].name = "Auto";
self.avimSettings.methods[1].article = "Telex (IME)";
self.avimSettings.methods[2].article = "VNI#VNI Input Method";
self.avimSettings.methods[3].article = "Vietnamese Quoted-Readable#Syntax and usage";
self.avimSettings.methods[5].name = "Off";
self.avimSettings.options[0].name = "Old accents";
self.avimSettings.options[1].name = "Enforce spelling";
break;
case "es":
self.avimSettings.headerText = "Entrada en vietnamita";
self.avimSettings.helpText = "Ayuda";
self.avimSettings.methods[0].name = "Automática";
self.avimSettings.methods[5].name = "Apagada";
self.avimSettings.options[0].name = "Acentos viejos";
self.avimSettings.options[1].name = "Ortografía correcta";
break;
case "fr":
self.avimSettings.headerText = "Saisie en vietnamien";
self.avimSettings.helpText = "Aide";
self.avimSettings.methodArticleServer = "//fr.wikipedia.org";
self.avimSettings.methods[0].name = "Automatique";
self.avimSettings.methods[1].article = "vi:" + self.avimSettings.methods[1].article;
self.avimSettings.methods[2].article = "vi:" + self.avimSettings.methods[2].article;
self.avimSettings.methods[3].article = "Vietnamese Quoted-Readable";
self.avimSettings.methods[5].name = "Éteint";
self.avimSettings.options[0].name = "Vieux accents";
self.avimSettings.options[1].name = "Correction d’orthographe";
break;
}
$(function () {
/**
* Cho ra URL tương đối giao thức đến trang wiki với tên được chỉ định.
*/
function articleURLFromTitle(title, server) {
var components = title.match("^([^#]+)(?:#(.+))?");
if (!components || !components[1]) return "";
var lastComponent = components[1];
if (components[2]) {
lastComponent += "#";
lastComponent += encodeURIComponent(components[2]).replace(/%20/g, "_")
.replace(/%/g, ".");
}
return server + mw.config.get("wgArticlePath").replace("$1", lastComponent);
}
/**
* Tạo một liên kết đến trang được chỉ định và cho ra đối tượng bọc của jQuery.
*/
function linkFromArticle(title, server, text) {
return $("<a href='" + articleURLFromTitle(title, server) + "' title='" +
title + "'>" + text + "</a>");
}
var head_link = linkFromArticle(self.avimSettings.helpArticle,
self.avimSettings.helpServer,
self.avimSettings.headerText);
var content = $("<ul></ul>");
$.each(self.avimSettings.methods, function (i, method) {
if (!method) return;
var item = $("<li></li>");
// Nút radio
var radio = $("<input id='avim_" + method.id +
"' name='viet_method' type='radio' />");
radio.click(function (evt) {
AVIMObj.setMethod(method.value);
});
item.append(radio);
// Nhãn
var label = $("<label class='radio' for='avim_" + method.id + "'>" +
method.name + "</label>");
item.append(" ");
item.append(label);
// Thông tin phụ
if (method.article) {
item.append(" ");
item.append("<a href='" +
articleURLFromTitle(method.article,
self.avimSettings.methodArticleServer) +
"' title='" + method.article + "'>(?)</a>");
}
if (method.key) {
item.append(" ");
item.append("<small>[" + method.key + "]</small>");
}
content.append(item);
});
content.append("<li><hr /></li>");
$.each(self.avimSettings.options, function (i, option) {
if (!option) return;
var item = $("<li></li>");
// Hộp kiểm
var checkbox = $("<input id='avim_" + option.id +
"' name='viet_method' type='checkbox' />");
checkbox.click(function (evt) {
AVIMObj[option.command](this);
});
item.append(checkbox);
// Nhãn
var label = $("<label class='radio' for='avim_" + option.id + "'>" +
option.name + "</label>")
item.append(" ");
item.append(label);
// Thông tin phụ
if (option.key) {
item.append(" ");
item.append("<small>[" + option.key + "]</small>");
}
content.append(item);
});
content = $("<div class='pBody'></div>").append(content);
switch (mw.config.get("skin")) {
case "standard": // Cổ điển
$("#quickbar").append("<hr class='sep' />");
var portlet = $("<div id='p-avim'></div>");
portlet.append(head_link)
.append(content);
$("#quickbar").append(portlet);
break;
case "cologneblue": // Xanh Cologne
var portlet = $("<div id='p-avim'></div>");
portlet.append($("<h6></h6>").append(head_link))
.append(content);
$("#quickbar").append(portlet);
break;
case "nostalgia": // Vọng cổ
// content.remove("br");
// content.find("hr").replaceWith(" | ");
var portlet = $("<div id='p-avim'></div>");
portlet.append($("<h5></h5>").append(head_link))
.append(content);
$("#footer").append(portlet);
break;
case "minerva": // Minerva
// Đưa các điều khiển vào “trình đơn tràn”.
var portlet = $("<div id='p-avim' class='portlet'></div>");
portlet.append($("<h5 class='toggle-list-item__label'></h5>").append(head_link))
.append(content);
var item = $("<li class='toggle-list-item'></li>").append(portlet);
$("#p-tb").append(portlet);
break;
case "vector": // Vectơ
case "vector-2022": // Vectơ 2022
// Đặt liên kết vào (?) vì đề mục của hộp thu gọn không nên chuyển nguời
// dùng ra khỏi trang.
content.addClass("vector-menu-content");
var portlet = $("<nav id='p-avim' class='mw-portlet mw-portlet-avim vector-menu vector-menu-portal portal vector-main-menu-group' role='navigation'></nav>");
portlet.append($("<div id='p-avim-label' class='vector-menu-heading'></div>")
.append($("<span class='vector-menu-heading-label'></span>")
.append(head_link)))
.append(content);
$("#p-tb").before(portlet);
break;
default: // Cá nhân, Chick, Đơn giản, Hiện đại
var portlet = $("<div id='p-avim' class='portlet'></div>");
portlet.append($("<h5></h5>").append(head_link))
.append(content);
$("#p-tb").before(portlet);
break;
}
// Khi bấm F12, AVIMObj.keyDownHandler() cố ẩn phân tử #AVIMControl, cho nên nó
// cần phải tồn tại.
$(document.body).append("<div id='AVIMControl'></div>");
// Chắc chắn khởi tạo AVIM nếu trường hợp [[MediaWiki:Gadget-AVIM.js]] đã được
// chạy.
if (self.AVIMObj) {
AVIMObj.setMethod(AVIMGlobalConfig.onOff ? AVIMGlobalConfig.method : -1);
AVIMObj.setSpell(AVIMGlobalConfig.ckSpell);
AVIMObj.setDauCu(AVIMGlobalConfig.oldAccent);
}
});