Module:Sandbox/Ahecht/Xviews: Difference between revisions

Content deleted Content added
Add
m Ahecht moved page Module:Xviews/sandbox to Module:Sandbox/Ahecht/Xviews without leaving a redirect: Move to personal sandbox
 
(11 intermediate revisions by the same user not shown)
Line 3:
local function ifblank(v, alt) return notblank(v) and v or alt end
local function red(v) return '<span style="color: red;">' .. v .. '</span>' end
local function getContent(page) return mw.ustringstring.gsub(mw.title.new(page).content, '^Date,"[^"]+"', '') end
local function diffDays(dargs)
return require('Module:diff days')['diff_days'](
Line 10:
end
local showTimeLine = require('Module:Horizontal timeline')._showTimeLine
local Text = require('Module:Text').Text()
 
-- EXPORTED CONSTANTS --
Line 18 ⟶ 19:
 
function p._xviews(args) -- {{xviews}}
-- args contains stale, days, ct, log, and mode
local page = ifblank(args[1], mw.title.getCurrentTitle().fullText .. '/pageviews')
if mw.title.new(page).exists then
local stale = tonumber(ifblank(args.stale, p.gSTALE()))
if tonumber(p._age(page)) > stale then --stale:
return red(mw.ustring.format(
'The pageviews file [[%s]] is more than %d days old; please see [[Template:Xviews#Instructions|Instructions]].',
Line 27 ⟶ 29:
))
else --not stale:
return p._xvmain(page, {ct = ifblank(args.days, ifblank(args.ct, p.gCOUNT()))}) ..
((notblank(args.log) or notblank(args.mode)) and '' or p._xAxis(page, {})) or-- ''p._xAxis() doesn't handle log values or vertical bars yet
end
else
Line 43 ⟶ 45:
function p._age(page) -- {{xviews/age}}
local nthview = p._nthView(page, p._viewCount(page))
nthview = mw.textText.split(nthview, ':', true)[1]
return diffDays({nthview, mw.getContentLanguage():formatDate('j F Y'), precision=0})
end
Line 50 ⟶ 52:
end
 
function p._nthView(page, numberindex) -- {{xviews/nth view}}
local viewscontent = mw.ustringstring.gsub(getContent(page), '.?(202%d%-%d%d%-%d%d)%,?(%d+)', '%1:%2,')
content = string.gsub(content, "^%s*,%s*(.-)%s*,$", "%1")
return mw.text.split(views, ',', true)[tonumber(number)]
local items = {}
for item in string.gmatch(content, "([^,]+)") do
table.insert(items, mw.text.trim(item))
end
index = tonumber(index)
if index < 0 then
index = #items + index + 1
end
return items[index]
end
function p.nthView(frame)
Line 62 ⟶ 73:
 
function p._viewCount(page) -- {{xviews/view count}}
local str = mw.ustringstring.gsub(getContent(page), '.?202%d%-%d%d%-%d%d', '')
str = mw.ustringstring.gsub(str, ',', '', 1)
-- Remove leading and trailing delimiters (along with any surrounding whitespace)
str = str:gsub("^%s*,%s*", ""):gsub("%s*,%s*$", "")
Line 71 ⟶ 82:
end
function p.viewCount(frame)
return p._viewCount(ifblank(frame.args[1] or, 'Talk:Liberation of France/pageviews'))
end
 
Line 77 ⟶ 88:
-- xargs contains ct, log, mode, and debug
local output = {}
local stop = p.viewCount_viewCount(page)
local start = stop - math.min(152, ifblank(xargs.ct, 93)) + 1
local iargs = {
Line 88 ⟶ 99:
for n = start, stop do
iargs.n = n
table.insert(output, p.itemBar_itemBar(iargs))
end
return table.concat(output)
end
function p.xvmain(frame)
local xargs = frame.args
xargs.ct = ifblank(xargs.ct, 93)
return p._xvmain(ifblank(xargs[1], 'Talk:Liberation of France/pageviews'), xargs)
Line 108 ⟶ 119:
end
local nthview = p._nthView(iargs.page, ifblank(iargs.n, 1))
if not nthview then
local val = mw.text.split(nthview, ':', true)[2] or 0
error("Error generating item bar for item #" .. ifblank(iargs.n, 1) .. ". Range may be invalid")
local width = val * 100 * 0.88 / p._maxViews(page)
end
local val = mw.textText.split(nthview, ':', true)[2] or 0
local width = val * 100 * 0.88 / p._maxViews(iargs.page)
width = tonumber(string.format("%.2f", width))
local label = p._xlabel(mw.textText.split(nthview, ':', true)[1], 'y')
return p._vbar(width, val, {label = label})
end
function p.itemBar(frame)
local iargs = frame.args
iargs.page = ifblank(iargs.page, 'Talk:House of the Dragon/pageviews')
iargs.n = ifblank(iargs.n, 1)
Line 149 ⟶ 163:
end
function p.vbar(frame)
local vargs = frame.args
return p._vbar(ifblank(vargs[1], 75), ifblank(vargs[2], ifblank(vargs.val, 2136)), vargs)
end
 
function p._xlabel(date, bold01) -- {{xviews/xlabel}}
local replace = ((date:sub(-3) == '-01') and notblank(bold01)) and "'''%1'''" or "%1"
return mw.ustringstring.gsub(date, '20[23]%d%-(%d%d%-%d%d)', replace)
end
function p.xlabel(frame)
Line 163 ⟶ 177:
function p._maxViews(page) -- {{xviews/max views}}
local views = 0
forlocal vcontent in= mwstring.text.splitggsub(getContent(page), ',.?202%d%-%d%d%-%d%d', true'') do
for v in Text.gsplit(content, ',', true) do
if v > views then views = v end
v = tonumber(v)
if (v and v > views) then views = v end
end
return vviews
end
function p._maxViewsmaxViews(frame)
return p.__maxViews_maxViews(ifblank(frame.pageargs[1], 'Talk:Liberation of France/pageviews'))
end
 
function p._xAxis(page, xargs) -- {{xviews/x-axis}}
-- xargs contains shift, caption, ff
local div = mw.html.create('div')
:css('margin', '-22px 0 0 ' .. ifblank(xargs.shift, '16px'))
:wikitext(