Thành viên:Hide on Rosé/Đề xuất kỹ thuật/common.js của viwiki
Đề xuất này được soạn từ ngày 7 tháng 4 năm 2023.
Nhận thấy MediaWiki:Common.js của Wikipedia tiếng Việt đang tải nhiều thứ không cần thiết hoặc đã lỗi thời, tôi xin đưa ra một số đề xuất cắt giảm MediaWiki:Common.js, giúp tối ưu hóa hiệu năng khi người dùng truy cập trang web.
Thông báo chỗ thử
sửa/**
* Gắn bảng giới thiệu vào đầu [[Trợ giúp:Chỗ thử]].
*/
mw.hook("wikipage.content").add(function () {
if (mw.config.get("wgPageName") != "Trợ_giúp:Chỗ_thử" ||
mw.config.get("wgAction") != "view" || $("#sandbox-intro").length) {
return;
}
var purgeLink = mw.html.element("a", {
href: mw.util.getUrl("Trợ_giúp:Chỗ_thử", {
action: "edit",
oldid: "15257082",
summary: "Tẩy trống chỗ thử",
minor: "yes"
})
}, "xóa định kỳ");
var editText = mw.html.element("b", {
"style": "white-space: nowrap;"
}, $("#ca-ve-edit").text());
var intro = $(mw.html.element("div", {
"class": "plainlinks toccolours",
id: "sandbox-intro"
}, new mw.html.Raw("Đây là trang bạn có thể thử thoải mái cách soạn bài " +
"trong Wikipedia. Nội dung ở đây sẽ bị " + purgeLink +
". Để bắt đầu sửa đổi trang này, hãy nhấn chuột vào thẻ " +
editText + " ở trên.")));
$("#mw-content-text").wrapInner("<div class='sandbox'></div>").prepend(intro);
});
- Đề xuất
- Xóa và thay bằng thông báo sửa đổi và
{{/đầu chỗ thử}}
. - Ảnh hưởng
- Thay đổi này ảnh hưởng đến bot tẩy trống chỗ thử tự động.
Biểu tượng đầu trang
sửa/**
* Biểu tượng trên cùng góc phải.
*
* @source: //www.mediawiki.org/wiki/Snippets/Top_icons
* @rev: 2
*/
mw.hook("wikipage.content").add(function () {
$( '.right-uppermost' ).prependTo( '#firstHeading' ).show();
});
- Đề xuất
- Xóa vì nó đã lỗi thời. Biểu tượng đầu trang chỉ dùng cho MediaWiki 1.25 về trước (phiên bản hiện tại là
{{CURRENTVERSION}}
1.42.0-wmf.22 (bd76262)); tính năng thay thế là chỉ báo trạng thái trang.[1]
Thông báo sửa đổi cho TSNDS
sửa/**
* Thông báo sửa đổi ma thuật ****************************************************
*
* Mô tả: Thêm thông báo sửa đổi cho trang định hướng và TSNDS.
* Bảo trì: [[:en:User:RockMFR]]
*/
function addEditIntro( name ) {
$( '.mw-editsection, #ca-edit, #ca-ve-edit' ).find( 'a' ).each( function ( i, el ) {
el.href = $( this ).attr( 'href' ) + '&editintro=' + name;
} );
}
if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {
$( function () {
if ( document.getElementById( 'disambigbox' ) ) {
addEditIntro( 'Bản_mẫu:Disambig_editintro' );
}
} );
$( function () {
var cats = mw.config.get('wgCategories');
if ( !cats ) {
return;
}
if ( $.inArray( 'Nhân vật còn sống', cats ) !== -1 || $.inArray( 'Nhân vật có thể còn sống', cats ) !== -1 ) {
addEditIntro( 'Bản_mẫu:BLP_editintro' );
}
} );
}
- Đề xuất
- Xóa và thay bằng một mô đun Lua.[2]
Cách hoạt động và triển khai
sửaBước 1: Tạo mô đun Mô đun:Disambiguation
local p = {}
local mRedirect = require('Mô đun:Redirect')
local disambiguationTemplates = mw.loadData('Mô đun:Disambiguation/templates')
local function capitalize(s)
-- Hàm này chỉ hoạt động đối với chuỗi ký tự ASCII. Nếu wiki của bạn có
-- bản mẫu định hướng sử dụng chuỗi Unicode, hãy sử dụng dòng được comment.
-- viwiki chỉ sử dụng thao tác chuỗi ASCII ở đây để cải thiện hiệu suất
return s:sub(1, 1):upper() .. s:sub(2, -1)
-- return mw.ustring.upper(mw.ustring.sub(1, 1)) .. mw.ustring.sub(2, -1)
end
local function isDisambiguationTemplate(template)
return disambiguationTemplates[capitalize(template)] or false
end
p.isDisambiguation = function(content)
-- trả về false nếu không có nội dung
if content == nil then
return false
end
-- trang đổi hướng không phải là trang định hướng
if mRedirect.getTargetFromText(content) ~= nil then
return false
end
-- kiểm tra bản mẫu định hướng trong nội dung trang
local templateNames = {}
for template in string.gmatch(content, "{{%s*([^|}]-)%s*[|}]") do
if isDisambiguationTemplate(template) then
return true
end
end
-- kiểm tra từ ma thuật
if string.find(content, "__DISAMBIG__", 1, true) ~= nil then
return true
end
return false
end
p._isDisambiguationPage = function(page)
-- Kiểm tra xem tên trang có chứa "(định hướng)" hay không
if string.find(page, "(định hướng)",0,true) ~= nil then
return true;
end
-- Kiểm tra xem nội dung trang có bản mẫu định hướng hay không
local title = mw.title.new(page)
if not title then return false end
local content = title:getContent()
return p.isDisambiguation(content)
end
-- Entry points for templates
p.isDisambiguationPage = function(frame)
local title = frame.args[1]
return p._isDisambiguationPage(title) and "yes" or ""
end
return p
Module:Disambiguation/templates
-- Trang này chứa một bảng gồm tất cả tên bản mẫu định hướng và các trang
-- đổi hướng đến nó. Chữ cái đầu tiên của bản mẫu được viết hoa, và tên được
-- lược bỏ tiền tố Bản mẫu: Bản mẫu được xếp nhóm từ bản mẫu chính đến tên
-- đổi hướng của nó.
return {
["Trang định hướng"] = true,
["Định hướng"] = true,
["Disambig"] = true,
["TLAdisambig"] = true,
["Dab"] = true,
["Dis"] = true,
["Disamb"] = true,
["Disambiguation"] = true,
["Tđh"] = true,
["Trang định hướng bản mẫu"] = true,
["Trang định hướng địa danh"] = true,
["Place name disambiguation"] = true,
["Geodis"] = true,
["Trang định hướng nhân danh"] = true,
["Hndis"] = true,
["Trang định hướng tên người"] = true,
["Human name disambiguation"] = true,
["Trang định hướng tên khoa học"] = true,
["LatinNameDisambig"] = true,
["SpeciesLatinNameDisambig"] = true,
["Species Latin name disambiguation"] = true,
["Trang định hướng toán học"] = true,
["Mathdab"] = true,
["Mathematical disambiguation"] = true,
["Định hướng toán học"] = true,
}
Bước 2: Tạo mô đun Lua: Mô đun:Mainspace editnotice
-- Được nhập về từ [[:en:Special:Permalink/1205469555|en:Module:Mainspace editnotice]]
local Arguments = require('Module:Arguments')
local Disambiguation = require('Module:Disambiguation')
local p = {}
p.main = function(frame)
local args = Arguments.getArgs(frame)
return p.core(args.page and mw.title.new(args.page) or mw.title.getCurrentTitle(), frame)
end
-- Bắt đầu lọc trang để đặt thông báo
local notices = {
-- TSNDS
blp_notice = function(page)
local content = page:getContent()
-- Nếu trang có chứa [[Thể loại:Nhân vật còn sống]] hoặc [[Thể loại:Nhân vật có thể còn sống]],
-- thì coi đó là bài viết về người còn sống, kích hoạt thông báo sửa đổi.
local living = "%[%[%s*[Tt]hể[ _][Ll]oại:%s*[Nn]hân[ _]vật[ _]còn[ _]sống%s*%]%]"
local possiblyLiving = "%[%[%s*[Tt]hể[ _][Ll]oại:%s*[N]hân[ _]vật[ _]có[ _]thể[ _]còn[ _]sống%s*%]%]"
if content and (content:find(living) or content:find(possiblyLiving)) then
return "BLP editintro" -- Sẽ đổi tên bản mẫu này nếu được triển khai để nó đúng chức năng
end
end,
disambig_notice = function(page, ctx)
if ctx.isDisambigPage then
return "Disambig editintro"
end
end,
}
p.core = function(page, frame)
-- Context object to store values that are expensive to compute and required
-- in multiple places
local context = {
isDisambigPage = Disambiguation._isDisambiguationPage(page.fullText)
}
local text = ''
for _, getNotice in pairs(notices) do
local template = getNotice(page, context)
text = text .. (template and frame:expandTemplate{ title = template } or '')
end
return text
end
return p
Ví dụ: Truy cập hai trang Thành viên:Hide on Rosé/Nháp 14 và Thành viên:Hide on Rosé/Nháp 13 và nhấn nút sửa đổi. Thử bằng cả hai trình soạn thảo