More languages
More actions
(Undo revision 55946 by CriticalResist (talk)) Tag: Undo |
No edit summary |
||
Line 2: | Line 2: | ||
local p = {} | local p = {} | ||
local mw = require("mw") | |||
function p.estimateReadingTime(frame) | function p.estimateReadingTime(frame) | ||
-- Get the | -- Get the page title from the frame parameter | ||
local | local pageTitle = frame.args[1] | ||
-- Ensure that | -- Ensure that pageTitle is a string | ||
if type( | if type(pageTitle) == "string" then | ||
-- | -- Use MediaWiki's built-in function to get the page content | ||
local | local content = mw.title.new(pageTitle):getContent() | ||
-- | -- Ensure that content is a string | ||
if type(content) == "string" then | |||
-- Count words using a more robust pattern | |||
local wordCount = 0 | |||
for word in content:gmatch("%S+") do | |||
wordCount = wordCount + 1 | |||
end | |||
-- Define the range of reading speeds | |||
local minSpeed = 183 | |||
local maxSpeed = 250 | |||
-- Calculate reading times for both minimum and maximum speeds | |||
local minReadingTime = math.ceil(wordCount / maxSpeed) | |||
local maxReadingTime = math.ceil(wordCount / minSpeed) | |||
-- Create the reading time string | |||
local readingTime = "Between " .. minReadingTime .. " and " .. maxReadingTime .. " minutes" | |||
return | return readingTime | ||
else | |||
return "Error: Invalid content" | |||
end | |||
else | else | ||
return "Error: Invalid | return "Error: Invalid page title" | ||
end | end | ||
end | end | ||
return p | return p |
Revision as of 15:03, 17 September 2023
-- Module:ReadingTime
local p = {}
local mw = require("mw")
function p.estimateReadingTime(frame)
-- Get the page title from the frame parameter
local pageTitle = frame.args[1]
-- Ensure that pageTitle is a string
if type(pageTitle) == "string" then
-- Use MediaWiki's built-in function to get the page content
local content = mw.title.new(pageTitle):getContent()
-- Ensure that content is a string
if type(content) == "string" then
-- Count words using a more robust pattern
local wordCount = 0
for word in content:gmatch("%S+") do
wordCount = wordCount + 1
end
-- Define the range of reading speeds
local minSpeed = 183
local maxSpeed = 250
-- Calculate reading times for both minimum and maximum speeds
local minReadingTime = math.ceil(wordCount / maxSpeed)
local maxReadingTime = math.ceil(wordCount / minSpeed)
-- Create the reading time string
local readingTime = "Between " .. minReadingTime .. " and " .. maxReadingTime .. " minutes"
return readingTime
else
return "Error: Invalid content"
end
else
return "Error: Invalid page title"
end
end
return p