编辑“
Module:PJBSClass
”
跳转到导航
跳转到搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
local p={} p.titles = {} local class_normalize = require("Module:Class/convert")._main local function flagReturn(value, flag, is_lua) if is_lua then return {value, flag} end return {value} end --自動判斷頁面評級 function p.getAutoClass(input_data, class_input) local page_name = input_data local class_default = class_input or '' local is_lua = true if type((input_data or {}).args) ~= type(nil) then --input_data is a frame page_name = input_data.args['1'] or input_data.args[1] class_default = input_data.args.class or input_data.args.CLASS or '' is_lua = false end local class_default_norm = class_normalize({class_default}) local page = (type(page_name) ~= type(nil)) and ({pcall(mw.title.new, page_name)})[2] or mw.title.getCurrentTitle() local page_orig = (page or {}).subjectPageTitle if page_orig then --依據命名空間自動判斷頁面種類 if page_orig.isRedirect then if class_default_norm == "needed" or class_default_norm == "merge" then --可能是重定向頁的級別 return unpack(flagReturn(class_default, false, is_lua)) end return unpack(flagReturn('重定向', true, is_lua)) end if page_orig:inNamespace(mw.title.new("Template:Ex").namespace) then return unpack(flagReturn('模板', true, is_lua)) end if page_orig:inNamespace(mw.title.new("Module:Ex").namespace) then return unpack(flagReturn('模块', true, is_lua)) end if page_orig:inNamespace(mw.title.new("Category:Ex").namespace) then return unpack(flagReturn('分类', true, is_lua)) end if page_orig:inNamespace(mw.title.new("File:Ex").namespace) then if class_default_norm == "fm" or class_default_norm == "book" or --pdf class_default_norm == "audio" or --wav、ogg... class_default_norm == "image" --png、jpg、gif、svg... then --特殊文件 return unpack(flagReturn(class_default, false, is_lua)) end return unpack(flagReturn('文件', true, is_lua)) end if page_orig:inNamespace(mw.title.new("Draft:Ex").namespace) then return unpack(flagReturn('草稿', true, is_lua)) end if page_orig:inNamespace(mw.title.new("Portal:Ex").namespace) then if class_default_norm == "fpo" or class_default_norm == "complete" or class_default_norm == "substantial" or class_default_norm == "basic" or class_default_norm == "stub" then --有評級的主題級別 return unpack(flagReturn(class_default, false, is_lua)) end return unpack(flagReturn('主题', true, is_lua)) end if page_orig:inNamespace(mw.title.new("PJ:Ex").namespace) then return unpack(flagReturn('专题', true, is_lua)) end if page_orig:inNamespace(mw.title.new("User:Ex").namespace) then if mw.text.trim(class_default or '') ~= '' then return unpack(flagReturn(class_default, false, is_lua)) end return unpack(flagReturn('用户', true, is_lua)) end if page_orig:inNamespace(mw.title.new("Help:Ex").namespace) then if mw.text.trim(class_default or '') ~= '' then return unpack(flagReturn(class_default, false, is_lua)) end return unpack(flagReturn('使用说明', true, is_lua)) end if page_orig:inNamespace(mw.title.new("MediaWiki:Ex").namespace) then if mw.text.trim(class_default or '') ~= '' then return unpack(flagReturn(class_default, false, is_lua)) end return unpack(flagReturn('界面', true, is_lua)) end if page_orig:inNamespaces( mw.title.new("MediaWiki:Ex").namespace, mw.title.new("TimedText:Ex").namespace, mw.title.new("Media:Ex").namespace, mw.title.new("Special:Ex").namespace,2600) then if mw.text.trim(class_default or '') ~= '' then return unpack(flagReturn(class_default, false, is_lua)) end return unpack(flagReturn('非条目', true, is_lua)) end end return unpack(flagReturn(class_default, false, is_lua)) end --輸入頁面名稱,從WPBS讀取評級 function p.getClassByPage(input_data, flag) local page_name = input_data if type((input_data or {}).args) ~= type(nil) then --input_data is a frame page_name = input_data.args['1'] or input_data.args[1] end local page = (type(page_name) ~= type(nil)) and ({pcall(mw.title.new, page_name)})[2] or mw.title.getCurrentTitle() local talk_page = (page or {}).talkPageTitle if talk_page then --如果討論頁存在 --從討論頁的維基代碼解析WPBS的評級 local class_result, has_WPBS = p.getClassByWikitext(talk_page:getContent() or "", flag) local has_value = mw.text.trim(class_result or '') ~= '' --檢查是否可自動評級 local result, is_auto = p.getAutoClass(talk_page.fullText, class_result) if has_value then is_auto = false end if flag then --如果從Lua調用並設flag為true,會多返回有無找到WPBS的布林值 return result, has_WPBS, is_auto else return result end end --找不到評級值也無法自動評級 if flag then --如果從Lua調用並設flag為true,會多返回有無找到WPBS的布林值 return '', false, false else return '' end end --處理WPBS重定向問題 local function processWPBSRedirect(input_text) local text = input_text local norm_name = "WPBS" local match_list = { --Template:WikiProject banner shell的重定向匹配表 --注意:這裡必須全部使用小寫字母 "wiki%s*project%s*banner%s*shell", "w?pj?%s*banner%s*shell", "wiki%s*project%s*banners", "multiple%s*wikiprojects?", "wiki%s*project%s*shell", "pjbs", "[維维]基[专專][题題][橫横]幅", "多?[個个]?[維维]?基?[专專][题題][橫横]幅", "[維维]基[专專][题題]", "多?[個个]?[維维]?基?[专專][题題]", "[专專][题題][橫横]幅", "通用[評评][級级]", --如有新WPBS重定向被建立請加入於此 }--致管理員:如有新WPBS重定向被建立,請優先受理WPBS重定向匹配項目的編輯請求 --以小寫進行匹配 local lotext = mw.ustring.gsub(mw.ustring.lower(text), "_", " ") local normtext = text --轉換重定向名稱的過程變數 for i = 1,#match_list do --對所有的WPBS重定向匹配清單項目做 : --維基代碼中尋找是否存在此WPBS重定向匹配 local j, k = mw.ustring.find(lotext, match_list[i]) while j ~= nil do --持續嘗試尋找匹配直到不能匹配到為止 --替換為統一的名稱 normtext = mw.ustring.sub(normtext, 1, j-1)..norm_name..mw.ustring.sub(normtext, k+1, -1) --重設小寫匹配用變數 lotext = mw.ustring.gsub(mw.ustring.lower(normtext), "_", " ") j, k = mw.ustring.find(lotext, match_list[i]) end end --統一的字串改成目標模板名稱WikiProject banner shell。 --註:如Template:WikiProject banner shell被移動或更名,請更新此處 --致管理員:如此處需要更新,請優先受理更新此處的編輯請求 normtext = mw.ustring.gsub(normtext, "[Ww][Pp][Bb][Ss]", "WikiProject banner shell") text = normtext --轉換完的文字 return text end --抓取會放置WPBS的段落 local function getTemplateSection(input_text) local text = (input_text or '')..'\n' --抓取終點1:章節標題 local i,j = mw.ustring.find(text, "\n%=+[^\n]*%=+%s*\n") if i == nil then --抓取終點2:DYK評選標題 i,j = mw.ustring.find(text, "%{%{%s*[Dd][Yy][Kk][Ee]ntry/archive") end --抓取終點3:頁尾 --從頭取到抓取終點 text = mw.ustring.sub(text, 1, (i or 0)-1) return text end --取得WPBS模板本身的wikitext function p.getWPBSTemplateContent(input_text) local text = input_text --匹配WPBS模板開頭 local re_WPBS_header = "%{%{[^%{%}%|]*[Ww]iki[Pp]roject[%s_]*[Bb]anner[%s_]*[Ss]hell" --接下來要把成對的{}移除,直到WPBS的也移除則停止,或移除到找不到成對的{}則停止 local it = text local old_it = text.."-" --對比用字串,確定上次替換有無成對的{} while it ~= old_it do --如果有成對的{} if not mw.ustring.match(it, re_WPBS_header) then break end --如果WPBS也被移除了則停止 old_it = it --更新對比字串 it = mw.ustring.gsub(it, "%{[^%{%}]*%}", "") --移除成對的{} end --移除到沒有WPBS後,前一個結果恰好是最後一個有WPBS的結果 local WPBS = mw.ustring.match(old_it, re_WPBS_header.."[^%{%}]*%}%}") or '' return WPBS end --從wikitext中解析出WPBS中輸入的評級。flag為是有關 "是否要返回有無找到WPBS模板" 的參數 function p.getClassByWikitext(input_data, flag) local wikitext = input_data if type((input_data or {}).args) ~= type(nil) then --input_data is a frame wikitext = input_data.args['1'] or input_data.args[1] or '' end local text=wikitext or '' text = getTemplateSection(text) --取得掛模板的段落 text = processWPBSRedirect(text) --處理WPBS的重定向頁 local WPBS = p.getWPBSTemplateContent(text) --讀取WPBS模板內容 if tostring(mw.title.getCurrentTitle().rootText or ''):lower():gsub("[_%s-]", " ") ~= "wikiproject banner shell" then local template_name = mw.ustring.gsub(mw.ustring.match(WPBS, "%{%{%s*([^%}%|]+)%s*[%}%|]") or '','\n', '') if mw.ustring.match(template_name, "/sandbox") then require('Module:TrackingCategory').append(mw.getCurrentFrame(), "使用沙盒評級模板的頁面") end end --匹配 | class = XX local select_class = mw.ustring.gsub(mw.ustring.match(WPBS, "%|%s*[Cc][Ll][Aa][Ss][Ss]%s*%=%s*([^%|%}]+)") or '', '\n', '') --返回匹配到的評級 if flag then --如果需要返回有關 "是否要返回有無找到WPBS模板" 之資訊 return select_class, mw.text.trim(WPBS or '') ~= '' else return select_class end end return p
摘要:
请注意,您对Positive WiKi的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Positive WiKi:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
Module:PJBSClass/doc
(
编辑
)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
模块
讨论
English
查看
阅读
编辑源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息