From WikiChip
Module:package
To add this template, simple add
{{package}}to the page and save. The chip infobox will have a small
[Edit Values]
button at the top-right corner which can be used to add values using a form.
local p = {}
local origArgs
function p.add_file_prefix(str)
if string.match(string.lower(str), '^file:') then
return str
else
return 'File:' .. str
end
end
function p.add_separator(box, title)
box:tag('tr')
:tag('td')
:attr('class', 'header')
:attr('colspan', '2')
:wikitext(title)
end
function add_header(box, str)
box
:tag('tr')
:tag('td')
:attr('class', 'header')
:attr('colspan', '2')
:wikitext(str)
end
function p.add_entry(value, right)
local e = mw.html.create('tr')
e:tag('td')
:attr('class', 'label')
:wikitext(value)
e:node(right)
return e
end
function has_arg(name)
-- The argument can exist and be empty or not exist at all
return string.len(origArgs[name] or '') > 0
end
function arg(name)
return origArgs[name]
end
function p.set_val(prop, val)
p.frame:preprocess('{{#set: ' .. prop .. '=' .. val .. '}}')
end
function p.pkg(frame)
p.frame = frame
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame.args
end
local infobox = mw.html.create('table')
infobox
:attr('class', 'infobox')
infobox
:tag('tr')
:tag('td'):attr('colspan', '2')
:tag('small'):attr('style', 'float: left; font-weight: bold;')
:wikitext('[[Special:FormEdit/package/' .. frame:preprocess('{{FULLPAGENAME}}') .. '|<i class="fa fa-edit"></i>Edit Values]]')
-- header
if has_arg('name') then
infobox
:tag('tr')
:tag('td')
:attr('class', 'header-main')
:attr('colspan', '2')
:wikitext('[[name::' .. arg('name') .. ']]')
end
-- ####################################################################
-- some general info first
p.add_separator(infobox, 'General Info')
-- designer
if has_arg('designer') then
local designers = mw.html.create('td'):attr('style', 'width: 99%;')
designers:wikitext('[[designer::' .. arg('designer') .. '| ]][[' .. arg('designer') .. ']]')
for i = 2, 10 do
if not has_arg('designer ' .. i) then break end
designers:wikitext(', [[designer::' .. arg('designer ' .. i) .. '| ]][[' .. arg('designer ' .. i) .. ']]')
end
infobox:node(p.add_entry('Designer', designers))
end
-- release date
if has_arg('first launched') or has_arg('first announced') then
local release = mw.html.create('td')
if has_arg('first announced') then
release:wikitext('[[first announced::' .. arg('first announced') .. ']] (announced)')
end
if has_arg('first launched') then
if has_arg('first announced') then
release:wikitext('<br>')
end
release:wikitext('[[first launched::' .. arg('first launched') .. ']] (launched)')
end
infobox:node(p.add_entry('Introduction', release))
end
-- market segment
if has_arg('market') then
p.set_val('market segment', arg('market'))
local markets = mw.html.create('td'):wikitext(arg('market'))
for i = 2, 5 do
if not has_arg('market ' .. i) then break end
p.set_val('market segment', arg('market ' .. i))
markets:wikitext(', ' .. arg('market ' .. i))
end
infobox:node(p.add_entry('Market', markets))
end
-- microarch
if has_arg('microarch') then
local microarchs = mw.html.create('td')
p.set_val('microarchitecture', arg('microarch'))
microarchs:wikitext('[[' .. mw.ustring.lower(arg('designer')) .. '/microarchitectures/' ..
mw.ustring.lower(arg('microarch')) .. '|' .. arg('microarch') .. ']]')
for i = 2, 10 do
if not has_arg('microarch ' .. i) then break end
p.set_val('microarchitecture', arg('microarch ' .. i))
microarchs:wikitext(', [[' .. mw.ustring.lower(arg('designer')) .. '/microarchitectures/' ..
mw.ustring.lower(arg('microarch ' .. i)) .. '|' .. arg('microarch ' .. i) .. ']]')
end
infobox:node(p.add_entry('Microarchitecture', microarchs))
end
-- chipset
if has_arg('chipset') then
p.set_val('chipset', arg('chipset'))
local chipset = mw.html.create('td'):wikitext(arg('chipset'))
for i = 2, 10 do
if not has_arg('chipset ' .. i) then break end
p.set_val('chipset', arg('chipset ' .. i))
chipset:wikitext(', ' .. arg('chipset ' .. i))
end
infobox:node(p.add_entry('Chipset', chipset))
end
-- tdp
if has_arg('tdp') then
p.set_val('tdp', arg('tdp'))
local tdp = mw.html.create('td'):wikitext(arg('tdp'))
for i = 2, 10 do
if not has_arg('tdp ' .. i) then break end
p.set_val('tdp', arg('tdp ' .. i))
tdp:wikitext(', ' .. arg('tdp ' .. i))
end
infobox:node(p.add_entry('<abbr title="Thermal Design Power">TDP</abbr>', tdp))
end
-- ####################################################################
-- package info
if has_arg('package name') or has_arg('package type') then
p.add_separator(infobox, 'Package')
end
-- package
if has_arg('package name') then
local package_name = mw.html.create('td'):wikitext(arg('package name'))
for i = 2, 10 do
if not has_arg('package name ' .. i) then break end
package_name:wikitext(',<br> ' .. arg('package name ' .. i))
end
infobox:node(p.add_entry('Name', package_name))
end
-- type
if has_arg('package type') then
infobox:node(p.add_entry('Type', mw.html.create('td'):wikitext( arg('package type'))))
end
-- contacts
if has_arg('package contacts') then
infobox:node(p.add_entry('Contacts', mw.html.create('td'):wikitext( arg('package contacts'))))
end
-- dimension
if has_arg('package dimension') then
local dimension = mw.html.create('td'):wikitext(arg('package dimension'))
for i = 2, 10 do
if not has_arg('package dimension ' .. i) then break end
dimension:wikitext(' × ' .. arg('package dimension ' .. i))
end
infobox:node(p.add_entry('Dimension', dimension))
end
-- pitch
if has_arg('package pitch') then
infobox:node(p.add_entry('Pitch', mw.html.create('td'):wikitext( arg('package pitch'))))
end
-- ####################################################################
-- socket info
if has_arg('socket name') or has_arg('socket type') then
p.add_separator(infobox, 'Socket')
end
-- socket name
if has_arg('socket name') then
local socket_name = mw.html.create('td'):wikitext(arg('socket name'))
for i = 2, 10 do
if not has_arg('socket name ' .. i) then break end
socket_name:wikitext(',<br> ' .. arg('socket name ' .. i))
end
infobox:node(p.add_entry('Name', package_name))
end
-- type
if has_arg('socket type') then
infobox:node(p.add_entry('Type', mw.html.create('td'):wikitext( arg('socket type'))))
end
-- ####################################################################
-- ####################################################################
-- Successon
if has_arg('successor') or has_arg('predecessor') then
add_header(infobox, 'Succession')
local s = infobox:tag('tr')
local td = s:tag('td'):attr('colspan', '2')
local d1 = td:tag('div'):attr('style', 'display: inline-flex;')
local d2 = td:tag('div'):attr('style', 'display: inline-flex; float: right;')
if has_arg('predecessor') then
local list
if has_arg('predecessor link') then
list = '[[' .. arg('predecessor link') .. '|' .. arg('predecessor') .. ']]'
else
list = '[[' .. arg('predecessor') .. ']]'
end
for i = 2, 10 do
if not has_arg('predecessor ' .. i) then break end
if has_arg('predecessor ' .. i .. ' link') then
list = list .. '<br>[[' .. arg('predecessor ' .. i .. ' link') .. '|' .. arg('predecessor ' .. i) .. ']]'
else
list = list .. '<br>[[' .. arg('predecessor ' .. i) .. ']]'
end
end
d1:tag('div')
:attr('style', 'float: left; padding-right: 10px; margin: auto 5px;')
:wikitext('<i class="fa fa-chevron-left"></i>')
d1:tag('div')
:attr('style', 'float: left;')
:wikitext(list)
end
if has_arg('successor') then
local list
if has_arg('successor link') then
list = '[[' .. arg('successor link') .. '|' .. arg('successor') .. ']]'
else
list = '[[' .. arg('successor') .. ']]'
end
for i = 2, 10 do
if not has_arg('successor ' .. i) then break end
if has_arg('successor ' .. i .. ' link') then
list = list .. '<br>[[' .. arg('successor ' .. i .. ' link') .. '|' ..
arg('successor ' .. i) .. ']]'
else
list = list .. '<br>[[' .. arg('successor ' .. i) .. ']]'
end
end
d2:tag('div')
:attr('style', 'float: left;')
:wikitext(list)
d2:tag('div')
:attr('style', 'float: right; padding-left: 10px; margin: auto 5px;')
:wikitext('<i class="fa fa-chevron-right"></i>')
end
end
-- Contemporary
if has_arg('contemporary') then
add_header(infobox, 'Contemporary')
local s = infobox:tag('tr')
local td = s:tag('td'):attr('colspan', '2')
td:attr('style', 'text-align: center;')
local list
if has_arg('contemporary link') then
list = '[[' .. arg('contemporary link') .. '|' .. arg('contemporary') .. ']]'
else
list = '[[' .. arg('contemporary') .. ']]'
end
for i = 2, 10 do
if not has_arg('contemporary ' .. i) then break end
if has_arg('contemporary ' .. i .. ' link') then
list = list .. '<br>[[' .. arg('contemporary ' .. i .. ' link') .. '|' .. arg('contemporary ' .. i) .. ']]'
else
list = list .. '<br>[[' .. arg('contemporary ' .. i) .. ']]'
end
end
td:wikitext(list)
end
infobox:wikitext('[[instance of::package| ]]')
infobox:wikitext('[[Category:all ic packages]]')
return infobox
end
return p