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