Old School RuneScape Wiki
Register
Advertisement

Documentation for this module may be created at Module:HF/doc

-- HF stands for High Frequency.
-- This Module augments the built-in HF
local HF = {}
----------------------------
-- Libraries of functions --
----------------------------
-- Parses invocation and template parameters, trims whitespace, and removes blanks.
local getArgs = require('Dev:Arguments').getArgs
-----------------------
-- Libraries of data --
-----------------------
------------------------------------------------
-- Local functions (used only in this Module) --
------------------------------------------------
----------------------------------------------------------
-- Public functions (called from a Template or article) --
----------------------------------------------------------
function HF.explode( sep, text )
	local sep, fields = sep or "::", {}
	local pattern = string.format("([^%s]+)", sep)
	
	text:gsub( pattern, function( c ) fields[#fields+1] = c end )

	return fields
end

function HF.isempty(s)
	local result = false

	if type( s ) == "nil" then
		result = true
	elseif type( s ) == "string" then
		if s == "" then
			result = true
		end
	elseif type( s ) == "table" then
		if next( s ) == nil then
			result = true
		end
	end

	return result
end

function HF.firstToUpper( str )
	return ( str:gsub( "^%l", string.upper ) )
end

function HF.round(num, idp)
	local mult = 10^(idp or 0)
	return math.floor( num * mult + 0.5 ) / mult
end

-- eliminates the link portion wikitext of a File: call, leaving only the bare filename.
function HF.stripFileWrapper(frame)
  local args = getArgs(frame)
  return HF._stripFileWrapper(args[1])
end

-- returns the first argument if a content namespace, else the second
function HF.content(frame)
  local args = getArgs(frame)
  return mw.title.getCurrentTitle().isContentPage 
    and (args[1] or '') 
    or (args[2] or '')
end

-- returns preload template indicator
function HF.PreloadPage(frame)
  local out = { 
      '<hr style="clear:both;"/>',
      ('This page is a preload template. Simply click one of the template preloads from the menu in the editor and its contents will be placed on the page that you are editing. More info on preloads can be found at this %s.')
        :format(HF.Link('Template:PreloadPage/doc', 'documentation page')),
      HF.Category('Preload templates')
      }
  return 
    (mw.title.getCurrentTitle():inNamespace( 10 ) 
    and mw.title.getCurrentTitle().text:lower():match('preload$')) 
        and table.concat(out)
        or nil
end

-- returns ifincl
function HF.match(frame)
  local args = getArgs(frame)
    -- {{#ifeq:{{#rpos:{{{2}}}|{{{1}}}}}|-1|{{{4|}}}|{{{3}}}}}
  local test = args[lower] and args[1]:lower() or args[1] or ''
  local subject = args[lower] and args[2]:lower() or args[2] or ''
  return subject:match(test) and (args[3] or '') or (args[4] or '')
end


---------------------------------------------------------
-- Internal functions (used in this and other Modules) --
---------------------------------------------------------
-- eliminates whitespace from the front and back of a string
function HF.trim(s)
  if type(s) == 'string' then
    return (s:gsub("^%s*(.-)%s*$", '%1'))
  else
    return false
  end
end
 
-- This creates an external link.
function HF.ExternalLink( target, label, plain )
  local output = string.format('[%s %s]', target, label)
 
  if plain == true then
    output = string.format('<span class="plainlinks">%s</span>', output)
  end
 
  return output
end
 
-- This creates a link to a category, as well as placing it in that category.
-- `sortkey` and `label` are optional
-- If there's no `label` given, it will only place it in the category,
-- which is what HF.Category is for.
function HF.CategoryLink( category, sortkey, label )
  if not HF.isempty( label ) then
    return HF.LinkToCategory( category, label ) ..
    HF.Category( category, sortkey )
  else
    return HF.Category( category, sortkey )
  end
end
 
-- Adds a Category
-- `sortkey` is optional
function HF.Category( category, sortkey )
  if sortkey == nil then sortkey = '' else sortkey = '|' .. sortkey end
  return string.format('%s'..'Category:%s%s]]', '[[', category, sortkey)
end
 
-- Adds a link to a Category
function HF.LinkToCategory( category, label )
  return string.format('%s'..'Category:%s|%s]]', '[[:', category,
  label or 'Category:' .. category )
end
 
-- Adds an internal link
-- `label` is optional
function HF.Link( link, text )
  if not HF.isempty( text ) then
    return string.format('%s'..'%s|%s]]', '[[', link, text)
  else
    return string.format('%s'..'%s]]', '[[', link)
  end
end
 
-- eliminates the link portion wikitext of a File: call, leaving only the bare filename.
function HF._stripFileWrapper (s)
  if type(s) == 'string' then
    return (s
    :gsub("%[*(.*)", '%1') -- leading brackets
    :gsub("([%a]*)|+.*", '%1') -- arguments
    :gsub("([%a]*)%]*", '%1') -- closing brackets
    )
  else
    return false
  end
end
-------------------------------------------------
-- Output (send it back to whatever called it) --
-------------------------------------------------
return HF
Advertisement