Module:Banner shell
Documentation for this module may be created at Module:Banner shell/doc
Documentation for this module may be created at Module:Banner shell/doc
local p = {}
local yesno = require('Module:Yesno')
local shell = function(frame, header, content, collapsed, class)
local styles = frame:extensionTag('templatestyles', '', {src = 'Module:Message box/tmbox.css'})
.. frame:extensionTag('templatestyles', '', {src = 'Module:Banner shell/styles.css'})
local content_row
if content then
content_row = mw.html.create('tr')
:tag('td')
:attr('colspan', '2')
:addClass('banner-shell-inner'):addClass('outercollapse')
:wikitext(content)
:done()
end
local holder = mw.html.create('table')
:attr('role', 'presentation')
:addClass('tmbox'):addClass('tmbox-notice'):addClass('banner-shell')
:addClass(class) -- allow additional class to be specified
:addClass(content and 'mw-collapsible' or nil)
:addClass(collapsed and 'mw-collapsed' or nil)
:node(header)
:node(content_row)
return styles .. tostring(holder)
end
p.banner_holder = function(frame)
local args = require('Module:Arguments').getArgs(frame, {wrappers = {'Template:Banner holder'}})
local image = '[[File:' .. (args.image or 'NewFavicon icon.svg')
.. '|' .. (args.size or '24') .. 'px'
.. '|link=' .. (args.image_link or '')
.. '|alt=' .. (args.alt or '') .. ']]'
local image_cell = mw.html.create('td')
:addClass('mbox-image')
:wikitext(image)
local text_cell = mw.html.create('td')
:addClass('mbox-text'):addClass('banner-shell-header')
:tag('span'):addClass('nowrap'):css('float', 'left'):wikitext(string.rep(' ', 10)):done()
:wikitext(args.text or 'Other talk page banners')
local header = mw.html.create('tr'):node(image_cell):node(text_cell)
return shell(frame, header, args[1], yesno(args.collapsed))
end
local DuplicateBanners = function(text)
local capture = '<span class="wpb%-project">([%w%s]*)</span>'
local banners = {}
for project in text:gmatch(capture) do
if banners[project] == true then
return project
end
banners[project] = true
end
end
p.banner_shell = function(frame)
local args = require('Module:Arguments').getArgs(frame, {wrappers = {'Template:WikiProject banner shell'}})
local title = args.demo_page and mw.title.new(args.demo_page) or mw.title.getCurrentTitle()
local pagetype = require('Module:Pagetype')._main{
page = title.prefixedText,
[1] = args.class,
dab = 'disambiguation page',
soft_redirect = 'soft redirect',
defaultns = 'extended'
}
local classmask = require('Module:WikiProject banner').class_mask
local class = pagetype=='article' and args.class or ''
class = classmask(class, title.talkPageTitle, false, pagetype)
local demo = not yesno(args.category or true, true) or args.demo_page
local out = {}
local addCategory = function(category, sort_key)
if not demo and title.isTalkPage then
local category_title = mw.title.new('Category:' .. category)
table.insert(out, '[[' .. category_title.prefixedText .. (sort_key and ('|' .. sort_key) or '') .. ']]')
end
end
if demo and not args.demo_page then
pagetype = 'article'
end
if yesno(args.blp) or yesno(args.living) then
table.insert(out, frame:expandTemplate{title = 'BLP'})
elseif yesno(args.blpo) then
table.insert(out, frame:expandTemplate{title = 'BLP others'})
end
if yesno(args.activepol) then
table.insert(out, frame:expandTemplate{title = 'Active politician'})
end
if class=='' and args[1] then -- check if class parameters are defined by any project banner
local articleclass = require('Module:WikiProject banner').readarticleclass(
{ignore_blank = true, only_subtemplates = true},
title.talkPageTitle.prefixedText
)
if articleclass~='' then -- class parameters are defined by one or more project banners
class = nil -- no global assessment
local raw_args = require('Module:Arguments').getArgs(frame, {
wrappers = {'Template:WikiProject banner shell'},
removeBlanks = false
})
end
end
local class2 = class and class~='' and (class .. '-Class') or 'Unassessed'
local vital
local icon_class = 'council'
if yesno(args.vital) then
local page = mw.ustring.upper(mw.ustring.sub(title.subjectPageTitle.text, 1, 1)) -- get first letter of article name
local codepoint = mw.ustring.codepoint(page, 1, 1)
if codepoint<65 or codepoint>90 then --first letter is not between A-Z
page = 'others'
end
local data_page = mw.title.new('Wikipedia:Vital articles/data/' .. page .. '.json')
if data_page.exists then
local index = title.subjectPageTitle.text
index = tostring(tonumber(index))==index and tonumber(index) or index --convert to number if page is numerical, otherwise loadJsonData does not work
local data = mw.loadJsonData(data_page.fullText)[index]
if data then
local level = data.level and tostring(data.level)
if level and data.topic then
local link = 'Wikipedia:Vital articles'
if level~='3' then
link = link .. '/Level/' .. level
end
if (level=='4' or level=='5') then
link = link .. '/' .. data.topic
end
if data.sublist then
link = link .. '/' .. data.sublist
end
if data.section then
link = link .. '#' .. data.section
end
if not mw.title.new(link).exists then -- add tracking category if link does not exist
addCategory('Wikipedia vital articles needing attention', 'L')
end
vital = 'This [[File:Círculos Concéntricos.svg|16px|link=|alt=]] <b>[[' .. link .. '|level-' .. level .. ' vital article]]</b> '
else
vital = 'This vital article '
end
local vitalCat = function(cat, valid) -- valid is table of 3 booleans for class/level/topic, if true then category will not be populated unless valid
local show_cat = true
if (valid.class and (class=='NA' or class==nil or class==''))
or (valid.level and level==nil)
or (valid.topic and data.topic==nil) then
show_cat = false
end
if show_cat then
local category = cat:gsub('_CLASS', class2)
:gsub('_LEVEL', level or 'unknown')
:gsub('_TOPIC', data.topic or 'an unknown topic')
addCategory(category)
end
end
vitalCat('_CLASS vital articles', {})
vitalCat('Wikipedia level-_LEVEL vital articles', {})
vitalCat('Wikipedia vital articles in _TOPIC', {})
vitalCat('_CLASS level-_LEVEL vital articles', {class=true, level=true})
vitalCat('Wikipedia level-_LEVEL vital articles in _TOPIC', {level=true, topic=true})
vitalCat('_CLASS vital articles in _TOPIC', {class=true, topic=true})
else
addCategory('Articles not listed in the vital article list')
end
end
end
local pagetype_display = pagetype=='article' and 'article'
or pagetype=='page' and 'page'
or ('<b>' .. pagetype .. '</b>')-- use bold if page type is not article
local text = vital or 'This ' .. pagetype_display .. ' '
if class or not args[1] then
local icons = { -- map output of pagetype function to input of class icon function
['project page'] = 'project',
['user page'] = 'user',
['interface page'] = 'interface',
['help page'] = 'help',
['module'] = 'module',
['disambiguation page'] = 'disambig',
['soft redirect'] = 'redirect',
['page'] = 'na'
}
icon_class = class=='NA' and (icons[pagetype] or pagetype) or class
if class=='' then
text = text .. 'has not yet been rated'
elseif class=='NA' then
text = text .. 'does not require a rating'
else
text = text .. 'is rated <span style="font-weight:bold;">' .. class .. '-class</span>'
end
text = text .. ' on Wikipedia\'s [[Wikipedia:Content assessment|content assessment]] scale.'
if args[1] then
text = text .. '<br>It'
elseif not yesno(args.vital) then
addCategory(class2 .. ' articles')
end
end
if args[1] then
text = text .. ' is of interest to ' .. (yesno(args.collapsed)
and 'multiple [[Wikipedia:WikiProject|WikiProjects]].'
or ('the following [[Wikipedia:WikiProject|WikiProjects]]:')
)
end
local icon = require('Module:Class')._icon{icon_class, size='35px'}
local header = mw.html.create('tr')
:tag('td'):addClass('assess'):wikitext(icon):done()
:tag('td'):addClass('banner-shell-header'):css('text-align', 'left'):css('font-weight', 'normal'):wikitext(text):done()
table.insert(
out,
shell(frame, header, args[1], yesno(args.collapsed), 'wpbs')
)
if args[1] then
local duplicate_cat = DuplicateBanners(args[1])
if duplicate_cat and title.isTalkPage then
addCategory('Pages using WikiProject banner shell with duplicate banner templates', duplicate_cat)
end
end
if args.listas then
table.insert(out, frame:preprocess('{{DEFAULTSORT:' .. args.listas .. '}}'))
end
if not demo then
local tracking = require('Module:Check for unknown parameters')._check({
['unknown']='[[Category:Pages using WikiProject banner shell with unknown parameters|_VALUE_ ]]',
['preview']='Page using [[Template:WikiProject banner shell]] with unknown parameter "_VALUE_"',
'1', 'activepol', 'blp', 'blpo', 'category', 'class', 'collapsed', 'demo_page', 'listas', 'living', 'vital'
}, frame:getParent().args)
table.insert(out, tracking)
for _, param in ipairs{'activepol', 'blp', 'blpo', 'category', 'collapsed', 'living'} do
if yesno(args[param], 'invalid')=='invalid' then
addCategory('Pages using WikiProject banner shell with invalid parameters', param)
end
end
if pagetype=='article' and args.class and class=='' then -- find pages with invalid class parameter
addCategory('Pages using WikiProject banner shell with invalid parameters', 'Zclass')
end
end
return table.concat(out)
end
return p
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.