Bước tới nội dung

Mô đun:Cite

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

require ('strict');local cfg = mw.loadData ('Mô đun:Cite/config');local function substitute (message, data_t)	return data_t and mw.message.newRawMessage (message, data_t):plain() or message;endlocal function make_error_msg (frame, msg)	local module_name = frame:getTitle();	local namespace = mw.title.getCurrentTitle().namespace;	local category_link = (0 == namespace) and substitute ('[[Thể loại:$1]]', {cfg.settings_t.err_category}) or '';	return substitute ('<span style="color:#d33">Lỗi: &#x7B;{[[$1|#invoke:$2]]}}: $3 ([[:$4|$5]])</span>$6',		{		module_name,		module_name:gsub ('Mô đun:', ''),		msg,		cfg.settings_t.help_text_link,		cfg.settings_t.help,		category_link		})endlocal function cite (frame, template)	template = template:lower();		-- Kiểm tra tên bản mẫu	if not cfg.known_templates_t[template] then		return make_error_msg (frame, substitute (cfg.settings_t.unknown_name, {template}));	end	-- Lấy tên Class của CS1	local citation_class = cfg.citation_classes_t[template] or template;		-- 1. Chuẩn bị dữ liệu args	local config_args = { CitationClass = citation_class }		local data_args = {}	for k, v in pairs(frame.args) do		if k ~= 1 then -- Bỏ tham số đầu tiên là tên lệnh (vd: 'news', 'web')			data_args[k] = v		end	end	-- 2. Tạo KHUNG GIẢ (Fake Frame) với các hàm được map thủ công	-- Điều này tránh lỗi "invalid frame object" khi gọi hàm gốc	local fake_frame = {}	-- Giả lập args của #invoke (chứa cấu hình)	fake_frame.args = config_args	-- Giả lập args của template mẹ (chứa dữ liệu bài viết)	fake_frame.getParent = function()		return { args = data_args }	end	-- Wrapper cho getTitle: Gọi frame gốc nhưng dùng đúng ngữ cảnh	fake_frame.getTitle = function()		return frame:getTitle()	end	-- Wrapper cho các hàm xử lý khác (chuyển tiếp về frame gốc)	fake_frame.preprocess = function(_, text) 		return frame:preprocess(text) 	end		fake_frame.extensionTag = function(_, name, content, args) 		return frame:extensionTag(name, content, args) 	end		fake_frame.callParserFunction = function(_, name, args) 		return frame:callParserFunction(name, args) 	end	-- 3. Gọi Mô đun gốc với khung giả	return require ('Mô đun:Citation/CS1').citation(fake_frame);endreturn setmetatable({}, {__index =	function(_, template)		return function (frame) return cite (frame, template) end;	end})