Module:EzTumblr

local Ez = {}

-- Editors: make sure to carefully copy syntax, including the comma at the end of any new entry Ez.tumblrs = { -- WotC staff ["markrosewater"] = { author = "Mark Rosewater", title = "Blogatog" }, ["dougbeyermtg"] = { author = "Doug Beyer", title = "A Voice for Vorthos" }, ["tabakrules"] = { author = "Matt Tabak", title = "Snarkham Asylum" }, ["wizardsmagic"] = { author = "Wizards of the Coast", title = "The Official Magic: The Gathering Tumblr" },

-- Other notable MtG tumblrs ["vorthosjay"] = { author = "Jay Annelli", title = "Archive Trap Mini" }, ["multiverseinreview"] = { author = "Squirle", title = "Multiverse in Review" }, }

local ERR_MALFORMED = "Malformed URL" local ERR_UNKNOWN = "Unknown tumblr (use Template:TumblrRef or add to Module:EzTumblr?)" local ERR_NOTITLE = "No title in template or URL (missing slug?)"

function Ez.getSupportedBlogs local sorted = {} local out = "" for url, data in pairs(Ez.tumblrs) do   table.insert(sorted, url) end table.sort(sorted) for _, url in ipairs(sorted) do   out = out .. string.format("* %s.tumblr.com\n", url) end return out end

-- Match the bit between the double-slash and the first period in the given URL function Ez.getAuthor(frame) local tumblrAddress = frame.args[1] local subdomain = tumblrAddress:match("^%w+://([^%.]+)")

assert(subdomain, ERR_MALFORMED) assert(Ez.tumblrs[subdomain], ERR_UNKNOWN)

return Ez.tumblrs[subdomain].author end

function Ez.getTitle(frame) local tumblrAddress = frame.args[1] local subdomain = tumblrAddress:match("^%w+://([^%.]+)")

assert(subdomain, ERR_MALFORMED) assert(Ez.tumblrs[subdomain], ERR_UNKNOWN)

return Ez.tumblrs[subdomain].title end

-- Generates a title for the post if not provided and the editor left the human-readable slug on the URL function Ez.createPostTitle(frame) local tumblrAddress = frame.args[1] local slug = tumblrAddress:match("/([%w%-]+)$")

assert(slug, ERR_NOTITLE)

slug = slug:gsub("^%l", string.upper) slug = slug:gsub("%-", " ") .. "..." return slug end

return Ez