MediaWiki:Gadget-AVIM portlet.js

Từ điển mở Wiktionary

Đây là một phiên bản cũ của trang này, do Mxn (thảo luận | đóng góp) sửa đổi vào lúc 06:32, ngày 11 tháng 3 năm 2022 (Vectơ 2022). Địa chỉ URL hiện tại là một liên kết vĩnh viển đến phiên bản này của trang, có thể khác biệt rất nhiều so với phiên bản hiện tại.

Chú ý: Sau khi lưu trang này, phải xóa bộ nhớ đệm (cache) của trình duyệt để những thay đổi hiện ra

  • Firefox / Safari: Nhấn giữ phím Shift trong khi nhấn Tải lại (Reload), hoặc nhấn tổ hợp Ctrl-F5 hay Ctrl-R (⌘R trên Mac)
  • Google Chrome: Nhấn tổ hợp Ctrl-Shift-R (⇧⌘R trên Mac)
  • Internet Explorer / Edge: Nhấn giữ phím Ctrl trong khi nhấn Làm tươi (Refresh), hoặc nhấn tổ hợp Ctrl-F5
  • Opera: Nhấn tổ hợp Ctrl-F5.
// Thiết lập
self.avimSettings = {
    headerText: "Gõ tiếng Việt",
    helpArticle: "Wiktionary:Gõ tiếng Việt",
    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#Quy ước telex"},
        {value: 2, id: "vni", name: "VNI", article: "VNI#Quy ước"},
        {value: 3, id: "viqr", name: "VIQR", article: "VIQR"},
        {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.helpServer = "//vi.wikipedia.org";
        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("&nbsp;");
    item.append(label);
    
    // Thông tin phụ
    if (method.article) {
        item.append("&nbsp;");
        item.append("<a href='" +
                       articleURLFromTitle(method.article,
                                           self.avimSettings.methodArticleServer) +
                       "' title='" + method.article + "'>(?)</a>");
    }
    if (method.key) {
        item.append("&nbsp;");
        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("&nbsp;");
    item.append(label);
    
    // Thông tin phụ
    if (option.key) {
        item.append("&nbsp;");
        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 "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' role='navigation'></nav>");
        portlet.append($("<label id='p-avim-label' class='vector-menu-heading'></label>")
        			.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);
}

});