![]() |
VOOZH | about |
This module implements {{Group rights}}, {{Right entry}}, see their respective documentation pages for usages.
Data of rights belongs to each groups are stored in Module:Group rights/data.json, which are from the API.
localp={} localdataPath='Module:Group rights/data.json' localfunctionlistToText(tbl,langCode)-- Ref: MediaWiki 1.43, MediaWiki\Language\Language::listToText() ifnottblortype(tbl)~='table'or(#tbl<1)then returnnil end langCode=langCodeormw.message.getDefaultLanguage() localwordAnd=mw.message.new('and'):inLanguage(langCode):plain() localwordSpace=mw.message.new('word-separator'):inLanguage(langCode):plain() localwordComma=mw.message.new('comma-separator'):inLanguage(langCode):plain() returnmw.text.listToText(tbl,wordComma,wordAnd..wordSpace) end localfunctiongroupLink(groupName,langCode) ifnotgroupNamethen returnnil end langCode=langCodeormw.message.getDefaultLanguage() localgroupPageMessageObject=mw.message.new('grouppage-'..groupName):inLanguage(mw.language.getContentLanguage()) localgroupNameMessageObject=mw.message.new('group-'..groupName):inLanguage(langCode) ifgroupPageMessageObject:exists()then returnmw.ustring.format('[[%s|%s]]',groupPageMessageObject:plain(),groupNameMessageObject:exists()andgroupNameMessageObject:plain()orgroupName) else returnmw.ustring.format('%s',groupNameMessageObject:exists()andgroupNameMessageObject:plain()orgroupName) end end localfunctionparseData(path,targetName) ifnotpathornottargetNamethen returnnil end localuserGroups=mw.loadJsonData(path).query.usergroups localresults={} for_,userGroupinipairs(userGroups)do localuserGroupName=userGroup.name ifuserGroup.name==targetNamethen returnuserGroup end end returnnil end functionp.displayRight(rightName,langCode) ifnotrightNamethen returnnil end langCode=langCodeormw.message.getDefaultLanguage() localrightMessageObject=mw.message.new('right-'..rightName):inLanguage(langCode) returnmw.message.new('listgrouprights-right-display'):inLanguage(langCode):params{rightMessageObject:exists()andrightMessageObject:plain()orrightName,rightName}:plain() end localfunctiondisplayRights(rightNames,langCode) ifnotrightNamesortype(rightNames)~='table'then returnnil end localresults={} for_,vinipairs(rightNames)do table.insert(results,p.displayRight(v,langCode)) end return'* '..table.concat(results,'\n* ') end localfunctiondisplayGroupChanges(typeName,groupList,langCode) ifnottypeNameortype(typeName)~='string'ornotgroupListortype(groupList)~='table'then returnnil end localmessageNames={ ['add']='listgrouprights-addgroup', ['remove']='listgrouprights-removegroup', ['add-self']='listgrouprights-addgroup-self', ['remove-self']='listgrouprights-removegroup-self', } localmessageName=messageNames[typeName] ifnotmessageNamethen returnnil end langCode=langCodeormw.message.getDefaultLanguage() localgroupLinks={} for_,groupinipairs(groupList)do table.insert(groupLinks,groupLink(group,langCode)) end return'* '..mw.message.new(messageName):inLanguage(langCode):params{listToText(groupLinks,langCode),#groupLinks}:plain() end functionp.call(groupName,langCode) ifnotgroupNamethen returnnil end localdata=parseData(dataPath,groupName) ifnotdatathen returnnil end localsections={} ifdata['rights']then table.insert(sections,displayRights(data['rights'],langCode)) end for_,changeAspectinipairs{'add','remove','add-self','remove-self'}do ifdata[changeAspect]then table.insert(sections,displayGroupChanges(changeAspect,data[changeAspect],langCode)) end end returnmw.getCurrentFrame():preprocess(table.concat(sections,'\n')) end functionp.main(f) localargs=f localframe=mw.getCurrentFrame() iff==framethen args=require('Module:ProcessArgs').merge(true) end ifnotargs[1]then return'' end returnp.call(args[1],args[2])or'' end functionp.right(f) localargs=f localframe=mw.getCurrentFrame() iff==framethen args=require('Module:ProcessArgs').merge(true) end ifnotargs[1]then return'' end returnp.displayRight(args[1],args[2])or'' end returnp