I have tables listing various pdf documents in my wiki. I use [[Image:Pdficon.png|16px|link={{filepath:MyFileName.pdf}}]]
in the wiki table to display a small icon (Pdficon.png) that when clicked opens the pdf file.
I want to get a popup showing the size of the pdf file when I mouse over the icon. I know I can do it "manually" with the RegularTooltips extension like this: {{#inline-tooltip: | 350 kB}}
.
However, I would like to have some wiki code that finds the filesize (e.g. 350 kB) and populates that popup for me automatically.
Is there anything remotely close to this already available?
If you have Scribunto installed, you can use the file
attribute of the mw.title
object by defining Module:File data
:
-- Convert a property to custom unit of measurement:
local bit32 = require 'bit32'
local conversions = {
size = function (bytes, unit)
local shifts = { b = 0, kb = 10, mb = 20, gb = 30 }
return bit32.rshift (bytes, shifts [(unit or 'b'):lower()] or 0)
end
}
-- Function that returns a function returning certain file attribute:
local function attribute_function (attr)
return function (frame)
local text = frame.args [1]
local title = mw.title.new (text, 6) -- 6 is File:.
local attrs = title.file
if not attrs.exists then
return nil
end
-- Take multi-page files into account (| page = n):
if frame.args.page and attrs.pages then
attrs = attrs.pages[tonumber (frame.args.page) or 1]
end
local value = attrs [attr]
-- Process optional parameters if defined for this property:
if conversions [attr] then
-- Normal table methods do not work on frame.args:
local optional = {}
for key, arg in ipairs (frame.args) do
if key ~= 1 then
optional [key - 1] = arg
end
end
value = conversions [attr] (value, unpack (optional))
end
return value
end
end
local module = {}
for _, property in ipairs {
'width',
'height',
'size',
'mimeType',
'length'
} do
module [property] = attribute_function (property)
end
return module
Get the file size by adding to wikitext:
{{#invoke:File data|size|MyFileName.pdf}}
or{{#invoke:File data|size|MyFileName.pdf|KB}}