More languages
More actions
(adding a function for reading length, editors can pick between reading time and reading length) |
No edit summary |
||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local mw = require("mw") | local mw = require("mw") | ||
-- Global variables | |||
local minReadingTime | |||
local maxReadingTime | |||
function p.estimateReadingTime(frame) | function p.estimateReadingTime(frame) | ||
Line 17: | Line 21: | ||
local maxSpeed = 238 | local maxSpeed = 238 | ||
minReadingTime = math.floor(wordCount / maxSpeed) | |||
maxReadingTime = math.ceil(wordCount / minSpeed) | |||
minReadingTime = math.floor(minReadingTime / 5) * 5 | minReadingTime = math.floor(minReadingTime / 5) * 5 | ||
Line 27: | Line 31: | ||
end | end | ||
return minReadingTime .. "-" .. maxReadingTime .. " minutes" | |||
else | else | ||
return "Error: Invalid content" | return "Error: Invalid content" | ||
Line 39: | Line 41: | ||
function p.estimateReadingLength(frame) | function p.estimateReadingLength(frame) | ||
if not minReadingTime or not maxReadingTime then | |||
error("Error: Reading time not calculated") | |||
local averageReadingTime = | end | ||
local averageReadingTime = (minReadingTime + maxReadingTime) / 2 | |||
if averageReadingTime < 120 then | if averageReadingTime < 120 then |
Revision as of 19:27, 10 March 2024
local p = {}
local mw = require("mw")
-- Global variables
local minReadingTime
local maxReadingTime
function p.estimateReadingTime(frame)
local pageTitle = frame.args[1]
if type(pageTitle) == "string" then
local content = mw.title.new(pageTitle):getContent()
if type(content) == "string" then
local wordCount = 0
for word in content:gmatch("%S+") do
wordCount = wordCount + 1
end
local minSpeed = 160
local maxSpeed = 238
minReadingTime = math.floor(wordCount / maxSpeed)
maxReadingTime = math.ceil(wordCount / minSpeed)
minReadingTime = math.floor(minReadingTime / 5) * 5
maxReadingTime = math.ceil(maxReadingTime / 5) * 5
if minReadingTime == 0 then
minReadingTime = 1
end
return minReadingTime .. "-" .. maxReadingTime .. " minutes"
else
return "Error: Invalid content"
end
else
return "Error: Invalid page title"
end
end
function p.estimateReadingLength(frame)
if not minReadingTime or not maxReadingTime then
error("Error: Reading time not calculated")
end
local averageReadingTime = (minReadingTime + maxReadingTime) / 2
if averageReadingTime < 120 then
return "Short"
elseif averageReadingTime >= 120 and averageReadingTime < 360 then
return "Medium"
elseif averageReadingTime >= 360 and averageReadingTime < 720 then
return "Long"
else
return "Very Long"
end
end
return p