sctools>Alistair3149 |
|
Line 1: |
Line 1: |
| local p = {}
| |
| local args
| |
|
| |
|
| --- Helper function checking if a substring is in a string
| |
| --
| |
| -- @param needle string - Value to search for
| |
| -- @param haystack string - String to search in
| |
| --
| |
| -- @return bool - True if found
| |
| local function stringContains( needle, haystack )
| |
| return string.find( mw.ustring.lower( haystack ), needle, 1, true )
| |
| end
| |
|
| |
| --- Remove hyphen and format string into title case
| |
| --
| |
| -- @param title string
| |
| --
| |
| -- @return string
| |
| local function formatTitle( title )
| |
| local titleCase = require( 'Module:String2' ).title
| |
| if title and title ~= '' then
| |
| -- Replace hyphens with space
| |
| title = string.gsub( title, '-', ' ' )
| |
| -- Format into title case
| |
| title = titleCase{ args={ title } }
| |
| end
| |
|
| |
| return title
| |
| end
| |
|
| |
| -- @param url string
| |
| --
| |
| -- @return string
| |
| local function sanitizeURL( url )
| |
| local santizedURL
| |
|
| |
| if stringContains('robertsspaceindustries.com', url) then
| |
| -- Remove 'www.' from the link
| |
| santizedURL = mw.ustring.gsub( url, 'www%.', '' )
| |
| else
| |
| -- Add "https://robertsspaceindustries.com/" to url if it is not present
| |
| santizedURL = 'https://robertsspaceindustries.com/' .. url
| |
| end
| |
|
| |
| return santizedURL
| |
| end
| |
|
| |
| --- Determine which type of RSI website it is
| |
| --
| |
| -- @param url string - RSI website URL
| |
| --
| |
| -- @return string - Site type or nil if unknown
| |
| local function getType( url )
| |
| local type
| |
|
| |
| if stringContains( '/comm-link/', url ) then
| |
| type = 'Comm-Link'
| |
| elseif stringContains( '/galactapedia/', url ) then
| |
| type = 'Galactapedia'
| |
| elseif stringContains( '/spectrum/', url ) then
| |
| type = 'Spectrum'
| |
| elseif stringContains( '/pledge/', url ) then
| |
| type = 'Pledge Store'
| |
| elseif stringContains( '/starmap', url ) then
| |
| type = 'Starmap'
| |
| elseif stringContains( '/issue-council', url ) then
| |
| type = 'Issue Council'
| |
| elseif stringContains( 'support.robertsspaceindustries', url ) then
| |
| type = 'Knowledge Base'
| |
| else
| |
| type = nil
| |
| end
| |
|
| |
| return type
| |
| end
| |
|
| |
| local function getSubtype( url, type )
| |
| local subtype = nil
| |
| if type == 'Comm-Link' then
| |
| subtype = string.match( url, '/comm%-link/([%w-]+)/%d+-[%w-]+' )
| |
| end
| |
|
| |
| return formatTitle( subtype )
| |
| end
| |
|
| |
| local function getTitle( url, type )
| |
| local titleText
| |
| local throwError = function()
| |
| return error( 'Title can not be generated, please fill in the text parameter.' )
| |
| end
| |
|
| |
| -- Auto title generation, might not be accurate since special characters
| |
| -- are escaped in the URL
| |
| --
| |
| -- e.g. /comm-link/transmission/14710-Starfarer-Q-A-Part-1
| |
| if type == 'Comm-Link' then
| |
| titleText = string.match( url, '/comm%-link/[%w-]+/%d+-([%w-]+)' )
| |
| -- e.g. /article/0j46Lzl8xm-torral-aggregate
| |
| elseif type == 'Galactapedia' then
| |
| titleText = 'Galactapedia: ' .. string.match( url, '/article/%w+-([%w-]+)' )
| |
| -- NOTE: Only support threads at the moment
| |
| -- e.g. /thread/star-citizen-alpha-3-13-0-live-7319707-patch-notes
| |
| elseif type == 'Spectrum' then
| |
| titleText = string.match( url, '/thread/%w+-([%w-]+)' )
| |
| -- e.g. /hc/en-us/categories/360000295274-Updates-and-Info
| |
| elseif type == 'Knowledge Base' then
| |
| titleText = string.match( url, '/hc/.+/.+/%d+-([%w-]+)' )
| |
| -- Will still try its best to extact a title
| |
| else
| |
| local urlParts = mw.text.split(url, '[/]')
| |
| titleText = urlParts[ #urlParts ]
| |
| end
| |
|
| |
| return formatTitle( titleText )
| |
| end
| |
|
| |
| -- NOTE: Don't have internal link support yet
| |
| function p.main( frame )
| |
| if args == nil then
| |
| args = require( 'Module:Arguments' ).getArgs( frame )
| |
| end
| |
|
| |
| local url = sanitizeURL( args.url )
| |
| local type = getType( url )
| |
| local date = args.accessdate
| |
| local title
| |
| local output
| |
|
| |
| if args.text then
| |
| title = args.text
| |
| else
| |
| title = getTitle( url, type )
| |
| end
| |
|
| |
| -- Maybe there is a smarter way?
| |
| -- This needs to be redone with mw.html
| |
| output = '<cite class="citation rsi_site">' ..
| |
| '<span class="metadata citation-icon" title="RSI site">[[File:RSIsite.svg|x11px|link=]]</span>' ..
| |
| '[' .. url .. ' ' .. title .. ']'
| |
|
| |
| if type then
| |
| local subtype = getSubtype( url, type )
| |
|
| |
| output = output .. '. '
| |
| if subtype then
| |
| output = output .. '<i>' .. subtype .. '</i> - '
| |
| end
| |
| output = output .. '<i>' .. type .. '</i>'
| |
| end
| |
|
| |
| if date then
| |
| output = output .. '. Retrieved ' .. date
| |
| end
| |
|
| |
| output = output .. '</cite>'
| |
|
| |
| return output
| |
| end
| |
| return p
| |