From WikiChip
Difference between revisions of "Module:frequency table"

(Created page with "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 fun...")
 
Line 36: Line 36:
 
end
 
end
  
function p.chip(frame)
+
function p.entry(frame)
 
 
 
     if frame == mw.getCurrentFrame() then
 
     if frame == mw.getCurrentFrame() then
Line 43: Line 43:
 
         origArgs = frame.args
 
         origArgs = frame.args
 
     end
 
     end
 +
   
 +
    local norm, avx2, avx512 = false, false, false
 +
   
 +
    local n = 1
 +
    for i = 1, 50 do
 +
    if has_arg('freq_' .. i) then n = i; norm = true end
 +
    if has_arg('freq_avx2_' .. i) then n = i; avx2 = true end
 +
    if has_arg('freq_avx512_' .. i) then n = i; avx512 = true end
 +
end
 
 
 
 
     local infobox = mw.html.create('table')
+
     local tbl = mw.html.create('table')
 
 
    infobox
 
        :attr('class', 'infobox')
 
  
 +
    tbl
 +
        :attr('class', 'wikitable')
 +
        :attr('style', 'margin-left: 10px;')
 +
       
 +
    local tr = tbl:tag('tr')
 +
    tr:tag('th'):attr('colspan', '2')
 +
    tr:tag('th'):attr('colspan', i):wikitext('Frequency/Active Cores')
 +
   
 +
tr = tbl:tag('tr')
 +
tr:tag('th'):wikitext('Mode')
 +
tr:tag('th'):wikitext('Base')
 +
for i = 1, n do
 +
tr:tag('th'):wikitext(i)
 +
end
 +
 +
if norm then
 +
tr = tbl:tag('tr')
 +
tr:tag('th'):wikitext('Normal')
 +
for i = 1, n do
 +
if has_arg('freq_' .. i) then
 +
tr:tag('td'):wikitext(arg('freq_' .. i))
 +
else
 +
tr:tag('td'):wikitext(' ')
 +
end
 +
end
 +
end
 +
 +
if avx2 then
 +
tr = tbl:tag('tr')
 +
tr:tag('th'):wikitext('AVX2')
 +
for i = 1, n do
 +
if has_arg('freq_avx2_' .. i) then
 +
tr:tag('td'):wikitext(arg('freq_avx2_' .. i))
 +
else
 +
tr:tag('td'):wikitext(' ')
 +
end
 +
end
 +
end
 +
 +
if avx512 then
 +
tr = tbl:tag('tr')
 +
tr:tag('th'):wikitext('AVX512')
 +
for i = 1, n do
 +
if has_arg('freq_avx512_' .. i) then
 +
tr:tag('td'):wikitext(arg('freq_avx512_' .. i))
 +
else
 +
tr:tag('td'):wikitext(' ')
 +
end
 +
end
 +
end
 
 
     return infobox
+
     return tbl
 
end
 
end
  
 
return p
 
return p

Revision as of 18:36, 16 July 2017

To add this template, simple add
{{frequency table}}
to the page and save. The chip infobox will have a small [Modify Frequency Info] 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 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.entry(frame)
	
    if frame == mw.getCurrentFrame() then
        origArgs = frame:getParent().args
    else
        origArgs = frame.args
    end
    
    local norm, avx2, avx512 = false, false, false
    
    local n = 1
    for i = 1, 50 do
    	if	has_arg('freq_' .. i) then n = i; norm = true end
    	if	has_arg('freq_avx2_' .. i) then n = i; avx2 = true end
    	if	has_arg('freq_avx512_' .. i) then n = i; avx512 = true end
	end
	
	
    local tbl = mw.html.create('table')

    tbl
        :attr('class', 'wikitable')
        :attr('style', 'margin-left: 10px;')
        
    local tr = tbl:tag('tr')
    	tr:tag('th'):attr('colspan', '2')
    	tr:tag('th'):attr('colspan', i):wikitext('Frequency/Active Cores')
    	
	tr = tbl:tag('tr')
		tr:tag('th'):wikitext('Mode')
		tr:tag('th'):wikitext('Base')
		for i = 1, n do
			tr:tag('th'):wikitext(i)	
		end
	
	if norm then
		tr = tbl:tag('tr')
		tr:tag('th'):wikitext('Normal')
		for i = 1, n do
			if has_arg('freq_' .. i) then
				tr:tag('td'):wikitext(arg('freq_' .. i))
			else
				tr:tag('td'):wikitext(' ')
			end
		end
	end
	
	if avx2 then
		tr = tbl:tag('tr')
		tr:tag('th'):wikitext('AVX2')
		for i = 1, n do
			if has_arg('freq_avx2_' .. i) then
				tr:tag('td'):wikitext(arg('freq_avx2_' .. i))
			else
				tr:tag('td'):wikitext(' ')
			end
		end
	end
	
	if avx512 then
		tr = tbl:tag('tr')
		tr:tag('th'):wikitext('AVX512')
		for i = 1, n do
			if has_arg('freq_avx512_' .. i) then
				tr:tag('td'):wikitext(arg('freq_avx512_' .. i))
			else
				tr:tag('td'):wikitext(' ')
			end
		end
	end
	
    return tbl
end

return p