Thành viên:Hide on Rosé/Đề xuất kỹ thuật/common.js của viwiki

Bách khoa toàn thư mở Wikipedia

Đề 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 | sửa mã nguồn]

Đoạn #L-428 - #L-455:

/**
 * 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 | sửa mã nguồn]

Đoạn #L-386 - #L-394:

/**
 * 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 | sửa mã nguồn]

Đoạn #L-295 - #L-323:

/**
 * 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ửa | sửa mã nguồn]

Bướ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 14Thà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

Tham khảo[sửa | sửa mã nguồn]