请输入您要查询的百科知识:

 

词条 Module:Class
释义 -- This module implements Class, Class/icon and-- Class/colour.

local mArguments, mIcon -- modules to lazily load

local definitions = mw.loadData('Module:Class/importDefinitions')

local p = {}

-- Initialize helper function variables

local getDefinition, getRawArgs, makeInvokeFunction, normalizeValue


-- Argument helper functions

function getRawArgs(frame, wrapper)

mArguments = mArguments or require('Module:Arguments')

return mArguments.getArgs(frame, {

wrappers = wrapper,

trim = false,

removeBlanks = false

})

end

function makeInvokeFunction(func, wrapper)

return function (frame)

local args = getRawArgs(frame, wrapper)

return func(args)

end

end


-- String helper functions

function trim(str)

if type(str) == 'string' then str = str:match('^%s*(.-)%s*$') end

return str

end

function normalizeValue(val)

if type(val) == 'string' then val = trim(val):lower() end

if val == then val = nil end

return val

end

function ucfirst(str)

return mw.ustring.upper(mw.ustring.sub(str, 1, 1)) .. mw.ustring.sub(str, 2)

end


-- Definition helper functions

function getDefinition(code)

local canonicalCode = normalizeValue(code)

if code == 'DEFAULT' then canonicalCode = code end --DEFAULT special-case

local class = definitions[canonicalCode]

while class and class.alias do

canonicalCode = class.alias

class = definitions[class.alias]

end

if not class then

return nil, nil

end

return class, canonicalCode

end

function getDefault() return getDefinition('DEFAULT') end

function getProperty(class, default, map)

local pop = table.remove(map, 1)

local prop, dProp = class and class[pop], default and default[pop]

while #map > 0 do

pop = table.remove(map, 1)

prop = ((type(prop) == 'table') or nil) and prop[pop]

dProp = ((type(dProp) == 'table') or nil) and dProp[pop]

end

if prop == nil then prop = dProp end

return prop

end


-- Color functions

function p._colour(code)

return getProperty(getDefinition(code), getDefault(), {'colour', 'base'})

end

function p.colour(frame)

local args = getRawArgs(frame, 'Template:Class/colour')

local colour = p._colour(args[1])

-- We need nowiki tags as template output beginning with "#" triggers

-- bug 14974.

return frame:extensionTag('nowiki', colour)

end


-- Icon functions

function p._icon(args)

local class = getDefinition(args.class or args[1])

local default = getDefault()

local file = getProperty(class, default, {"icon", "file"})

local label = getProperty(class, default, {"labels", "full"})

label = ucfirst(label)

local attrib = getProperty(class, default, {"icon", "requiresAttribution"})

local span = mw.html.create('span')

span

:cssText(args.style)

:attr('title', label)

:wikitext(

string.format(

,

file,

label,

attrib and or '|link=|alt='

)

)

return tostring(span)

end

p.icon = makeInvokeFunction(p._icon, 'Template:Class/icon')


-- Class functions

function p._class(args)

local classDef, classCode = getDefinition(args.class or args[1])

local default = getDefault()

local iconDefault = getProperty(classDef, default, {"icon", "default"})

local shortLabel = getProperty(classDef, default, {"labels", "short"})

local categoryRoot = getProperty(classDef, default, {"categoryRoot"})

--o is short for "options", go for "get options". Bool true → case-sensitive

local o, go = {}, {

bold = false,

heading = false,

image = false,

rowspan = false,

fullcategory = true,

category = true,

topic = true

}

for k, v in pairs(go) do

if v then o[k] = trim(args[k]) else o[k] = normalizeValue(args[k]) end

end

local cell = mw.html.create(o.heading and 'th' or 'td')

--image=yes forces icon, image=no disables it, otherwise checks default

local icon = iconDefault and (o.image ~= 'no') or (o.image == 'yes')

icon = icon and p.icon(args) .. ' ' or

local category

if o.fullcategory then

category = o.fullcategory

elseif o.category then

category = string.format('%s %s', categoryRoot, o.category)

elseif o.topic then

category = string.format('%s %s articles', categoryRoot, o.topic)

else

category = string.format('%s articles', categoryRoot)

end

local text = string.format ('%s', category, shortLabel)

cell

:addClass('assess')

:addClass('assess-' .. (classCode or ))

:css('text-align', 'center')

:css('white-space', 'nowrap')

:css('font-weight', o.bold ~= 'no' and 'bold' or nil)

:css('background', p._colour(classCode))

:attr('rowspan', tonumber(o.rowspan))

:wikitext(icon, text)

return tostring(cell)

end

p.class = makeInvokeFunction(p._class, 'Template:Class')

return p

随便看

 

开放百科全书收录14589846条英语、德语、日语等多语种百科知识,基本涵盖了大多数领域的百科知识,是一部内容自由、开放的电子版国际百科全书。

 

Copyright © 2023 OENC.NET All Rights Reserved
京ICP备2021023879号 更新时间:2024/11/18 14:04:09