Marvel Database
Register
Advertisement

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

local p = mw.InfoboxBuilderHF
local getArgs = require('Dev:Arguments').getArgs

--------------------------------------------------------------------------------------------------
-- returns content of the page
function p.get_content(pagename)
	local output = ''
	
	if not p.isempty(pagename)
		then output = mw.title.new(p.break_link(pagename,1)):getContent() or ''
	end
	
	return output
end

--------------------------------------------------------------------------------------------------
-- returns value of 'field' from 'page_content'
function p.get_field_value(page_content, field)
	local output = ''
	
	if not p.isempty(page_content) and not p.isempty(field)
		then
			page_content = string.gsub(page_content, '}}', '|}}') -- added to get value from last field
			output = string.match(page_content, '|%s-'..field..'%s-=%s-(.-)\n|')
			if not p.isempty(output)
				then output = p.trim(output)
			end
	end

	return output
end

--------------------------------------------------------------------------------------------------
-- Check if 'text' is part of the 'list' or not
function p.in_list(list, text)
	local output = false

	if not p.isempty(list) and not p.isempty(text)
		then
			for i, v in ipairs( list ) do
				if v == text
					then 
						output = true 
						break
				end
			end
	end

	return output
end

--------------------------------------------------------------------------------------------------
-- adds all elements from 'table2' into 'table1'; first, second, both or none of them could be tables or strings
function p.join_tables(table1, table2)
	local output = {}
	
	if not p.isempty(table1)
		then 
			if type(table1) == "table"  
				then output = table1
				else table.insert(output, table1)
			end
	end

	if not p.isempty(table2)
		then
			if type(table2) == "table"
				then
					for i = 1, #table2 do
						table.insert(output, table2[i])
					end
				else
					table.insert(output, table2)
			end
	end

	return output
end

--------------------------------------------------------------------------------------------------
--checks if 'page' exists or not
function p.exists(page)
	local title
	local output = false
	
	if not p.isempty(page) 
		then 
			title = mw.title.new(page)
			if title ~= nil and title.exists
				then output = true
			end
	end
	title = nil
	return output
end

--------------------------------------------------------------------------------------------------
--returns true if text is a wikilink or false otherwise
function p.is_link(link)
	local i
	local j
	local output = false
 
	if not p.isempty(link)
		then
			i = string.find(link, "^%[%[")
			j = string.find(link, "%]%]$")
			if i ~= nil and j ~= nil
				then output = true
			end
	end
	
	return output
end

--------------------------------------------------------------------------------------------------
--Check if 'link' is a wikilink. If yes, then check if it has | inside. If yes, then return 'part' part of it. If 'link' is not a wikilink return 'link'.
function p.break_link(link, part)
	local i
	local j
	local k
	local output = ''
	
	if not p.isempty(link) and p.is_link(link)
		then
			i = string.find(link, "[[",1,true)
			j = string.find(link, "|",1,true)
			k = string.find(link, "]]",1,true)
			if j == nil 
				then output = string.sub(link, i+2, k-1) 
				elseif j < k
					then 
						if part == 2 
							then output = string.sub(link, j+1, k-1)
							else output = string.sub(link, i+2, j-1)
						end
				else output = string.sub(link, i+2, k-1)  
			end
		else output = link
	end

	return output
end


function p.breaklink(frame)
	return p.break_link(frame.args[1], tonumber(frame.args[2]))
end

--------------------------------------------------------------------------------------------------
-- returns number of pages in the "category", "pagetype" can be one of '*', 'all', 'pages', 'subcats', or 'files' 
function p.pages_in_category(category, pagetype)
	local output = 0
	pagetype = pagetype or 'pages'

	if not p.isempty(category)
		then
		output = string.gsub(category, '&#39;',"'")
		output = mw.site.stats.pagesInCategory(output, pagetype)
	end

	return output
end

--------------------------------------------------------------------------------------------------
-- adds each element of 'categories' table as category with 'sortname'. 
-- Elements of 'categories' table could be strings or tables themselves with second element being a different sortname
function p.add_categories(categories, sortname)
	local i
	local category
	local output = {}
 
	if not p.isempty(categories) and type(categories) == 'table'
		then
			for i = 1,#categories do
				category = categories[i]
				if not p.isempty(category)
					then 
						if type(category) == 'table'
							then table.insert( output, p.Category(category[1], category[2]) )
							else table.insert( output, p.Category(category, sortname) )
						end
				end
			end
	end
 
	return table.concat(output)
end


--------------------------------------------------------------------------------------------------
--transform 'number' into ordinal number, for example '1' into '1st'
function p.ordinal_number(number)
	local output = ''
	
	number = tonumber(number)
	if not p.isempty(number)
		then
			if number % 10 == 1 and number ~= 11 -- in (1,21,31,41,51,61,71)
				then output = number..'st'
				elseif number % 10 == 2 and number ~= 12 -- in (2,22,32,42,52,62,72)
					then output = number..'nd'
					elseif number % 10 == 3 and number ~= 13 --in (3,23,33,43,53,63,73)
						then output = number..'rd'
						else output = number..'th'
			end
	end
	
	return output
end


--------------------------------------------------------------------------------------------------
--transform page type like 'character' into plural form 'characters' (used in Module:Design. Added here insted of Module:PageType to not call it there)
function p.get_plural_page_type(page_type)
	local output = ''
	
	if page_type == 'Reality'
		then output = 'Realities'
		elseif page_type == 'Gallery'
			then output = 'Galleries'
		elseif page_type == 'Series'
			then output = page_type
		else output = page_type..'s'
	end

	return output
end


--------------------------------------------------------------------------------------------------
function p.AddZeros( s, len )
  local output = ""

  local sLength = string.len( tostring( s ) )
  local diff = tonumber( len ) - tonumber( sLength )

  if diff > 0 then
    for i = 1, diff do
      output = string.format('%s0', output)
    end
  end

  output = string.format('%s%s', output, s)

  return output
end


--------------------------------------------------------------------------------------------------
-- used in Module:List_of_Powers
function p.LinkToWikipedia(link, text)
	if p.isempty(text)
		then text = link
	end
	return p.Link('Wikipedia:'..link, text)
end


return p
Advertisement