模块:收纳表:修订间差异

跳到导航 跳到搜索
添加359字节 、​ 2022年9月11日 (星期日)
无编辑摘要
无编辑摘要
无编辑摘要
 
(未显示同一用户的8个中间版本)
第1行: 第1行:


--理论上能调整所有的style,并可新增class
--理论上能调整所有的style,并可新增class
--|(css)  整個storage container的css
--|stab(css)  选择栏的css。曾经为select(css)
--|stab(css)  选择栏的css。曾经为select(css)
--|sitem(css)  选择栏中每个物件的css
--|sitem(css)  选择栏中每个物件的css
第8行: 第9行:
--[[ 非css的参数设定
--[[ 非css的参数设定
splitCount      = 5:    决定每行有几个物件
splitCount      = 5:    决定每行有几个物件
initialTab      = nil:  决定页面加载出来时,收纳表预设显示的tab。
                        nil的话就是一开始都不显示东西
textDisplay    = down: 内容相对于选择栏的位置,可输入
textDisplay    = down: 内容相对于选择栏的位置,可输入
                         top(内容在选择栏上)
                         top(内容在选择栏上)
第17行: 第20行:
local p = {}
local p = {}
local notCSS = { --非CSS的参数
local notCSS = { --非CSS的参数
    splitCount  = true,
    initialTab  = true,
     textDisplay = true,
     textDisplay = true,
    splitCount  = true
}
}


第26行: 第30行:
local ordering = {
local ordering = {
     tabIndices = {},
     tabIndices = {},
     div = {},
     stgt = {},
     stab = {},
     stab = {},
     sitm = {},
     sitm = {},
第34行: 第38行:


local CSSvalue = {
local CSSvalue = {
     div = {},
     stgt = {},
     stab = {},
     stab = {},
     sitm = {},
     sitm = {},
第41行: 第45行:
}
}


 
local initialTab = nil


--处理旧参数名与别名
--处理旧参数名与别名
第47行: 第51行:
     str = str:gsub('^select', 'stab')
     str = str:gsub('^select', 'stab')
     str = str:gsub('^text', 'ctab')
     str = str:gsub('^text', 'ctab')
     str = str:gsub('^sitem', '^sitm')
     str = str:gsub('^sitem', 'sitm')
     str = str:gsub('^citem', '^citm')
     str = str:gsub('^citem', 'citm')
     --[[str = str:gsub('^selecttab', 'stab')
     --[[str = str:gsub('^selecttab', 'stab')
     str = str:gsub('^selectitem', 'sitem')
     str = str:gsub('^selectitem', 'sitem')
第59行: 第63行:


--空的数值填入预设值
--空的数值填入预设值
local function fillWithDefaultCSS(horizontal)
local function fillWithDefaultCSS(contents, horizontal)
     local defaults = {
     local defaults = {
         div = {class=''},
         stgt = {class = '',},
         stab = {
         stab = {class = '',},
            class     = '',
         sitm = {class = '',},
            display    = 'grid',
         ctab = {class = '',},
            margin    = '2.5%',
         citm = {class = '',},
            gap        = '6px',
        },
         sitm = {
            class   = '',
            margin  = '0',
            padding = '0',
            ['font-weight'] = '700',
        },
         ctab = {
            class   = '',
            display = 'inline',
            margin  = '2.5%',
            ['margin-left'] = '0',
        },
         citm = {class=''},
     }
     }
     if horizontal then
     if horizontal then
         defaults['stab']['display'] = 'inline-grid'
         contents['splitCount'] = contents['splitCount'] or '1'
        defaults['stab']['height'] = '400px'
        defaults['stab']['overflow-y'] = 'auto'
        defaults['stab']['width'] = '20%'
 
        defaults['ctab']['height'] = '400px'
        defaults['ctab']['overflow-y'] = 'auto'
        defaults['ctab']['width'] = '60%'
     end
     end
    contents['splitCount'] = contents['splitCount'] or '5'


     local elements = {'div', 'stab', 'sitm', 'ctab', 'citm'}
     local elements = {'stgt', 'stab', 'sitm', 'ctab', 'citm'}
     for _, s in ipairs(elements) do
     for _, elem in ipairs(elements) do
         local resizeFlowDir = {height='y', width='x'}
         local resizeFlowDir = {height='y', width='x'}
         for size, dir in pairs(resizeFlowDir) do
         for size, dir in pairs(resizeFlowDir) do
             if CSSvalue[s][size] then
             if CSSvalue[elem][size] then
                 defaults[s]['overflow-'..dir] = 'auto'
                 defaults[elem]['overflow-'..dir] = 'auto'
             end
             end
         end
         end
         for CSS, defaultValue in pairs(defaults[s]) do
         for CSS, defaultValue in pairs(defaults[elem]) do
             CSSvalue[s][CSS] = CSSvalue[s][CSS] or defaultValue
             CSSvalue[elem][CSS] = CSSvalue[elem][CSS] or defaultValue
         end
         end
     end
     end
第112行: 第95行:
local function renderSelect(contents)
local function renderSelect(contents)
     local tabs_pages = mw.html.create('div')
     local tabs_pages = mw.html.create('div')
         :addClass('tabs_pages ' .. CSSvalue['stab']['class'])
         :addClass('tabs_pages stab ' .. CSSvalue['stab']['class'])
         :css('grid-template-columns',
         :css('grid-template-columns',
             string.rep('1fr ', tonumber(contents['splitCount'])))
             string.rep('1fr ', tonumber(contents['splitCount'])))
第120行: 第103行:
     end
     end


     for _, tabIndex in ipairs(ordering['tabIndices']) do
     for originalIndex, tabIndex in ipairs(ordering['tabIndices']) do
         local sitm = tabs_pages:tag('div')
         local sitm = tabs_pages:tag('div')
             :addClass('tab ' .. CSSvalue['sitm']['class'])
             :addClass('tab sitm ' .. CSSvalue['sitm']['class'])
             :wikitext(contents['tab' .. tabIndex])
             :wikitext(contents['tab' .. tabIndex])
        if originalIndex == initialTab then sitm:addClass('active') end
         for _, CSS in ipairs(ordering['sitm']) do
         for _, CSS in ipairs(ordering['sitm']) do
             sitm:css(CSS, CSSvalue['sitm'][CSS])
             sitm:css(CSS, CSSvalue['sitm'][CSS])
第137行: 第121行:
local function renderContent(contents)
local function renderContent(contents)
     local tabs_contents = mw.html.create('div')
     local tabs_contents = mw.html.create('div')
         :addClass('tabs-contents ' .. CSSvalue['ctab']['class'])
         :addClass('tabs-contents ctab ' .. CSSvalue['ctab']['class'])


     for _, CSS in ipairs(ordering['ctab']) do
     for _, CSS in ipairs(ordering['ctab']) do
第143行: 第127行:
     end
     end


     for _, tabIndex in ipairs(ordering['tabIndices']) do
     for originalIndex, tabIndex in ipairs(ordering['tabIndices']) do
         local citm = tabs_contents:tag('div')
         local citm = tabs_contents:tag('div')
             :addClass('tab-c ' .. CSSvalue['citm']['class'])
             :addClass('tab-c citm ' .. CSSvalue['citm']['class'])
             :wikitext(contents['content' .. tabIndex])
             :wikitext(contents['content' .. tabIndex])
        if originalIndex == initialTab then citm:addClass('active') end
         for _, CSS in ipairs(ordering['citm']) do
         for _, CSS in ipairs(ordering['citm']) do
             citm:css(CSS, CSSvalue['citm'][CSS])
             citm:css(CSS, CSSvalue['citm'][CSS])
第165行: 第150行:
     --将获取的参数传给args
     --将获取的参数传给args
     for k, v in pairs(page_args) do
     for k, v in pairs(page_args) do
    k = '' .. k
         if v ~= 'nil' then
         if v ~= 'nil' then
             if notCSS[k] then args[k] = v
             if notCSS[k] then args[k] = v
第170行: 第156行:
         end
         end
     end
     end
    initialTab = tonumber(args['initialTab'])


     --处理CSSvalue
     --处理CSSvalue
     local validArgs = {stab=true, sitm=true, ctab=true, citm=true}
     local validArgs = {stgt=true, stab=true, sitm=true, ctab=true, citm=true}
     for k, v in pairs(args) do  
     for k, v in pairs(args) do  
         k = '' .. k; v = '' .. v
         k = '' .. k; v = '' .. v
第183行: 第171行:
                 CSSvalue[prefix][CSS] = v
                 CSSvalue[prefix][CSS] = v
             else
             else
                 CSSvalue['div'][k] = v
                 CSSvalue['stgt'][k] = v
             end
             end
         end
         end
     end
     end
     fillWithDefaultCSS(args['textDisplay']=='left' or args['textDisplay']=='right')
     local horizontal = args['textDisplay']=='left' or args['textDisplay']=='right'
    fillWithDefaultCSS(args, horizontal)
    if horizontal then
    CSSvalue['stgt']['class'] = CSSvalue['stgt']['class'] .. ' hori'
        CSSvalue['stab']['class'] = CSSvalue['stab']['class'] .. ' hori'
        CSSvalue['ctab']['class'] = CSSvalue['stab']['class'] .. ' hori'
    end
 


     --处理ordering
     --处理ordering
     local elements = {'div', 'stab', 'sitm', 'ctab', 'citm'}
     local elements = {'stgt', 'stab', 'sitm', 'ctab', 'citm'}
     for _, s in ipairs(elements) do
     for _, s in ipairs(elements) do
         for k, _ in pairs(CSSvalue[s]) do table.insert(ordering[s], k) end
         for k, _ in pairs(CSSvalue[s]) do
            if k ~= 'class' then table.insert(ordering[s], k) end
        end
         table.sort(ordering[s])
         table.sort(ordering[s])
     end
     end
    table.sort(ordering['tabIndices'])


     local mainDiv = mw.html.create('div')
     local mainDiv = mw.html.create('div')
     mainDiv:addClass('tabs-container ' .. CSSvalue['div']['class'])
     mainDiv:addClass('tabs-container stgt ' .. CSSvalue['stgt']['class'])
     for _, divCSS in ipairs(ordering['div']) do
     for _, divCSS in ipairs(ordering['stgt']) do
         mainDiv:css(divCSS, CSSvalue['div'][divCSS])
         mainDiv:css(divCSS, CSSvalue['stgt'][divCSS])
     end
     end


导航菜单