未登录
中文(简体)
创建账号
登录
搜索
查看“模块:Bar”的源代码
来自东方活动维基
命名空间
模块
讨论
更多
更多
页面操作
阅读
查看源代码
历史
←
模块:Bar
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您必须确认您的电子邮件地址才能编辑页面。请通过
参数设置
设置并确认您的电子邮件地址。
您可以查看和复制此页面的源代码。
local p = {} local inner = {} --########## --## Public functions --########## --- Render a bar chart. -- @param frame The arguments passed to the script. See docs on renderFromLua. function p.format( frame ) -- extract args local width = frame.args['width'] local barCSS = frame.args['barCSS'] local zeroWidth = frame.args['zeroWidth'] local total = frame.args['total'] -- extract bar series from arguments like 'value,color,title' local series = {} for key, spec in ipairs(frame.args) do spec = mw.text.split(spec, ',') local data = {value = tonumber(spec[1] or 0), color = spec[2] or '#CCC', title = spec[3] or ''} if data['value'] > 0 then table.insert(series, data) end end return p.renderFromLua(series, total, width, barCSS, zeroWidth) end --- Render a bar chart from Lua. -- @param series A table representing the bars to render, consisting of a sequence of tables like {value = 14, color = '#CCC', title = 'tooltip text'}. -- @param total (optional) The total number of values represented by all bar series. -- @param width (optional) The CSS width of the bar. -- @param barCss (optional) Additional CSS to apply to the rendered bar table. -- @param zeroWidth (optional) function p.renderFromLua(series, total, width, barCSS, zeroWidth) -- parse arguments width = width or '100%' total = tonumber(total or 0) zeroWidth = zeroWidth or '1px' -- calculate total local seriesTotal = 0 for k,v in ipairs(series) do seriesTotal = seriesTotal + v['value'] end if total < seriesTotal then total = seriesTotal end -- inject empty series for uncharted values if(seriesTotal < total) then table.insert(series, {value = total - seriesTotal, color = 'transparent', title = ''}) end -- inject ratios for k,v in ipairs(series) do v['total'] = total v['ratio'] = inner.getRatio(v['value'], total) if v['ratio'] == 0 then v['width'] = zeroWidth end end -- render result = '<table style="width:' .. width .. ';' .. (barCSS or '') .. '" cellspacing="0"><tr>' for k, v in pairs(series) do result = result .. inner.renderSeries(v) end result = result .. '</tr></table>' return result end --########## --## Private functions --########## --- Render an individual bar series. -- @param series The bar series to render. function inner.renderSeries(series) -- ignore empty series if not series.value or series.value == 0 then return '' end -- set width local width = series.width if not(width) then width = series.ratio .. '%' end -- format local result = mw.ustring.format('<td title="%s" style="width:%s; height:1em; padding:0; background:%s;' .. (series.css or '') .. '" data-value="%s"></td>', series.title, width, series.color, series.value) return result end --- Get the percentage ratio of two numbers as a decimal value. -- @param value The number of items in the subset. -- @param total The total number of items in the set. function inner.getRatio(value, total) if(total == 0) then error('the total for a series cannot be zero') end return math.floor(value / total * 10000) / 100 end return p
本页使用的模板:
模块:Bar/doc
(
查看源代码
)
返回
模块:Bar
。
导航
导航
首页
最近更改
文件列表
留言板
活动日程
活动日历
分类索引
活动QQ群组一览
各地区线下活动
帮助
沙盒
规划
编辑规范
创建页面
页面生成器
使用方法与帮助
Wiki页面
相关站点
THBWiki
东方市场
莉莉云下载站
绯想天则指南
上海爱丽丝幻乐团
wiki工具
wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志