Module:Cbox
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Cbox/doc
local p = {} local cbox local styles,css,args = {},{},{} local lomod = require('Module:Cbox/layout') local chrome = require('Module:Colors') local getArgs = require('Module:Arguments').getArgs local notmeta_checks = { above = true, below = true, class = true, data = true, fontsize = true, header = true, image = true, imagelink = true, imagesize = true, layout = true, name = true, quote = true, reason = true, reasontext = true, text = true, timestamp = true, towhere = true, } local main_checks = { above = true, below = true, data = true, header = true, image = true, imagelink = true, name = true, quote = true, reason = true, reasontext = true, text = true, timestamp = true, towhere = true, } local test_checks = main_checks local function doublekey(str,v) local k,ka = 1,{} for n in mw.ustring.gmatch(str,'[^#]+') do ka[k] = n k=k+1 end if not styles[ka[2] or 'cbox'] then styles[ka[2] or 'cbox'] = {} end styles[ka[2] or 'cbox'][ka[1]] = v args[str] = nil end local function multikey(loc,str,v) if type(str)=="table" then styles[loc]=styles[loc] or {} for i=1,#str do styles[loc][str[i]] = v end end end local function adddata(moto) local text={args.text} if tostring(moto)=="table" then text[#text+1] ='entering is:table<br/>' for k,v in pairs(moto) do text[#text+1] =tostring(k)..':『'..tostring(v)..'』<br/>' end else text[#text+1] ='value:『'..tostring(moto)..'』<br/>' end args.text = table.concat(text, "") end local function notmeta(k,v) if v=='' or v==nil then return false elseif mw.ustring.find(k,'#') then return true elseif notmeta_checks[k] then return false end return true end local function autotext(size) if size then local o = size..'pt' local h = tostring(tonumber(size)+2)..'pt' styles['cbox'] = styles['cbox'] or {} styles['cbox']['font-size'] = o styles['header'] = styles['header'] or {} styles['header']['font-size'] = h end end local function colorfix(header) if styles[header] then local c,bc = styles[header]['color'],styles[header]['background-color'] if c and not bc then styles[header]['background-color'] = chrome.text({['args']={c}}) elseif bc and not c then styles[header].color = chrome.text({['args']={bc}}) end end end local function quickcreate(element,class) local cell = mw.html.create(element) cell:addClass(class) if styles[class] then cell:css(styles[class]) end if css[class] then cell:cssText(css[class]) end return cell end function p.maketest(frame) multikey('cbox',{"border-radius","-moz-border-radius","-webkit-border-radius","-khtml-border-radius","-icab-border-radius","-o-border-radius"},"30px") cbox=quickcreate('table','cbox') lomod.layout1() return tostring(cbox) end function p.test(frame) adddata(frame) local moto = getArgs(frame,{ valueFunc = function(key,value) if not value then return nil end if type(key)=="number" then return value end local k = mw.ustring.lower(key) if not test_checks[k] then value = mw.ustring.lower(value) end if mw.ustring.find(value,'%S') then return value end return nil end }) for k,v in pairs(moto) do if type(k)=="string" then key = mw.ustring.lower(k) else key = tostring(k) end if not args[key] then args[key] = v end end adddata(args) if args.round and tonumber(args.round)>0 then multikey('cbox',{"border-radius","-moz-border-radius","-webkit-border-radius","-khtml-border-radius","-icab-border-radius","-o-border-radius"},args.round .. 'px') end css['cbox'] = args.style args.style = '' css['header'] = args.headerstyle args.headerstyle = '' css['description'] = args.textstyle args.textstyle = '' css['reason'] = args.reasonstyle args.reasonstyle = '' css['image'] = args.imagestyle args.imagestyle = '' autotext(args.fontsize) args.fontsize = '' -- Loop over all the args colorfix('cbox') colorfix('header') colorfix('reason') cbox = quickcreate('table','cbox') cbox:addClass(args['class'] or '') lomod.layout1() return tostring(cbox) end function p.main(frame) local moto = getArgs(frame,{ valueFunc = function(key,value) if not value then return nil end if type(key)=='number' then return value end local k = mw.ustring.lower(key) if not main_checks[k] then value = mw.ustring.lower(value) end if mw.ustring.find(value,'%S') then return value end return nil end }) for k,v in pairs(moto) do if type(k)=="string" then key = mw.ustring.lower(k) else key = tostring(k) end if not args[key] then args[key] = v end end if args.round and tonumber(args.round)>0 then multikey('cbox',{"border-radius","-moz-border-radius","-webkit-border-radius","-khtml-border-radius","-icab-border-radius","-o-border-radius"},args.round .. 'px') end css['cbox'] = args.style args['style'] = '' css['header'] = args.headerstyle args.headerstyle = '' css['description'] = args.textstyle args.textstyle = '' css['reason'] = args.reasonstyle args.reasonstyle = '' css['image'] = args.imagestyle args.imagestyle = '' autotext(args.fontsize) args.fontsize = '' -- Loop over all the args for k,v in pairs(args) do -- 先に↑を消すことで飛ばすようになる if notmeta(k,v) then doublekey(k,v) -- Simple copy end end colorfix('cbox') colorfix('header') colorfix('reason') cbox = quickcreate('table','cbox') cbox:addClass(args['class'] or '') local layout = tonumber(args.layout) or 0 local func = lomod["layout" .. layout] if func and layout > 1 and layout < 7 then cbox = func(cbox,styles,css,args) end return tostring(cbox) end return p