2023年政策修订增补工作正在进行中,欢迎参与!
Module:SpecialWikitext
跳转到导航
跳转到搜索
--- @diagnostic disable: lowercase-global
--- https://zh.wikipedia.org/wiki/_?oldid=65986479
local p = {
wikiTextKey = '_addText'
}
function p.displayWikitext()
local body = ''
local title = mw.title.getCurrentTitle()
local this_frame = mw.getCurrentFrame()
local pagename = title.nsText .. ':' .. title.rootText
local pagesubname = mw.ustring.gsub(title.fullText, "[^:/]*:[^/]+", '')
local notice = this_frame:preprocess('{{#invoke:SpecialWikitext/Template|getNotices|' .. pagename .. '|' .. pagesubname .. '}}') or ''
body = body .. '<div class="mw-editnotice-content">' .. notice .. '</div>'
local wikitext = p.check() or ''
body = body .. '<div class="mw-_addText-content mw-parser-output">' .. wikitext .. '</div>'
return body
end
function p.check()
local content_model = mw.ustring.lower(mw.title.getCurrentTitle().contentModel)
if content_model == 'json' then
return _getJSONwikitext()
elseif content_model == 'js' or content_model == 'javascript' or content_model == 'text' then
return _getJSwikitext()
elseif content_model == 'css' or content_model == 'sanitized-css' then
return _getCSSwikitext()
end
return ''
end
local TemplateParameters = {}
function _addText(input_str, new_str, escape)
if not TemplateParameters._get_escape then TemplateParameters = require('Module:TemplateParameters') end
if new_str ~= '' then
if input_str ~= '' then input_str = input_str .. '\n' end
local text = new_str
if escape then text = TemplateParameters._get_escape(new_str) end
input_str = input_str .. text
end
return input_str
end
function _getString(str)
local test_str = mw.ustring.match(str, "[^\n]*%*/")
if test_str then test_str = mw.ustring.sub(test_str, 1, -3)
else test_str = str end
local trim_check = mw.text.trim(test_str)
local first_char = mw.ustring.sub(trim_check, 1, 1)
if first_char == mw.ustring.sub(trim_check, -1, -1) and (first_char == "'" or first_char == '"') then
return mw.ustring.sub(trim_check, 2, -2)
else
return test_str
end
end
function _getContentText(str)
local wikitext = ''
xpcall(function()
local it = mw.ustring.gmatch(str, p.wikiTextKey .. "%s*%{[^c%}]*content%s*:%s*[^\n]*")
local text = it()
while text do
local temp_text = mw.ustring.gsub(mw.text.trim(
mw.ustring.match(text, "content%s*:%s*[^\n]*"), "\t\r\n\f ;}"
), "%s*content%s*:%s*", "")
if wikitext ~= '' then wikitext = wikitext .. '\n' end
wikitext = wikitext .. _getString(temp_text)
text = it()
end
end, function() end)
return wikitext
end
function _getObjText(str)
local wikitext = ''
xpcall(function()
local it = mw.ustring.gmatch(str, p.wikiTextKey .. "%s*[%=:]%s*[^\n]*")
local text = it()
while text do
local temp_text = mw.ustring.gsub(
mw.text.trim(text, "\t\r\n\f ;}"),
p.wikiTextKey .. "%s*[%=:]%s*", "")
if wikitext ~= '' then wikitext = wikitext .. '\n' end
wikitext = wikitext .. _getString(temp_text)
text = it()
end
end, function() end)
return wikitext
end
function _getCSSwikitext(input_string)
local this_frame = mw.getCurrentFrame()
local wikitext = ''
local css_text = input_string or mw.title.getCurrentTitle():getContent()
wikitext = _addText(wikitext, _getContentText(css_text), true)
wikitext = _addText(wikitext, _getObjText(css_text), true)
if wikitext ~= '' then wikitext = this_frame:preprocess(wikitext) end
return wikitext
end
function _getJSwikitext(input_string)
local this_frame = mw.getCurrentFrame()
local wikitext = ''
local js_text = input_string or mw.title.getCurrentTitle():getContent()
wikitext = _addText(wikitext, _getObjText(js_text), true)
if wikitext ~= '' then wikitext = this_frame:preprocess(wikitext) end
return wikitext
end
function _getJSONwikitext(input_string)
local this_frame = mw.getCurrentFrame()
local wikitext = ''
xpcall(function()
local json_data = mw.text.jsonDecode(input_string or mw.title.getCurrentTitle():getContent())
for k, v in pairs(json_data) do
if mw.ustring.match(k, p.wikiTextKey) and type(v) == type('') then
wikitext = _addText(wikitext, v)
end
if type(v) == type({}) then
for testArr_k, testArr_v in pairs(v) do
if mw.ustring.match(testArr_k, p.wikiTextKey) and type(testArr_v) == type('') then
wikitext = _addText(wikitext, testArr_v)
end
end
end
end
end, function() end)
if wikitext ~= '' then wikitext = this_frame:preprocess(wikitext) end
return wikitext
end
local lib_arg = {}
function _getTestFromFrame(frame)
local str = ''
if frame == mw.getCurrentFrame() then
if lib_arg.getArgs == nil then lib_arg = require('Module:Arguments') end
local args = lib_arg.getArgs(frame) --frame
str = args[1] or args['1'] or args.str
else
if type(frame) == type({}) then str = frame[1] or frame['1'] or frame.str
else str = tostring(frame) end
end
if mw.text.trim(str or '') == '' then str = mw.title.getCurrentTitle():getContent() end
return str
end
function p.getCSSwikitext(frame) return _getCSSwikitext(_getTestFromFrame(frame)) end
function p.getJSwikitext(frame) return _getJSwikitext(_getTestFromFrame(frame)) end
function p.getJSONwikitext(frame) return _getJSONwikitext(_getTestFromFrame(frame)) end
return p