<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://db.seven-sages-of-rome.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ACommon</id>
	<title>Module:Common - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://db.seven-sages-of-rome.org/index.php?action=history&amp;feed=atom&amp;title=Module%3ACommon"/>
	<link rel="alternate" type="text/html" href="https://db.seven-sages-of-rome.org/index.php?title=Module:Common&amp;action=history"/>
	<updated>2026-04-19T09:14:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://db.seven-sages-of-rome.org/index.php?title=Module:Common&amp;diff=3210&amp;oldid=prev</id>
		<title>Noeth: Created page with &quot;local common = {}  --- Convert an input to number ---@param num string|integer Input ---@param onFail string|integer Output if conversion fails ---@param base integer Base for tonumber, defaults to 10 ---@return number function common.toNumber( num, onFail, base ) 	base = base or 10      if num == nil then         return onFail     end  	local numCopy = num     if type( num ) == &#039;string&#039; then         numCopy = num:gsub( &#039;,&#039;, &#039;.&#039; )     end      numCopy = tonumber( numCopy...&quot;</title>
		<link rel="alternate" type="text/html" href="https://db.seven-sages-of-rome.org/index.php?title=Module:Common&amp;diff=3210&amp;oldid=prev"/>
		<updated>2024-08-06T15:04:26Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local common = {}  --- Convert an input to number ---@param num string|integer Input ---@param onFail string|integer Output if conversion fails ---@param base integer Base for tonumber, defaults to 10 ---@return number function common.toNumber( num, onFail, base ) 	base = base or 10      if num == nil then         return onFail     end  	local numCopy = num     if type( num ) == &amp;#039;string&amp;#039; then         numCopy = num:gsub( &amp;#039;,&amp;#039;, &amp;#039;.&amp;#039; )     end      numCopy = tonumber( numCopy...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local common = {}&lt;br /&gt;
&lt;br /&gt;
--- Convert an input to number&lt;br /&gt;
---@param num string|integer Input&lt;br /&gt;
---@param onFail string|integer Output if conversion fails&lt;br /&gt;
---@param base integer Base for tonumber, defaults to 10&lt;br /&gt;
---@return number&lt;br /&gt;
function common.toNumber( num, onFail, base )&lt;br /&gt;
	base = base or 10&lt;br /&gt;
&lt;br /&gt;
    if num == nil then&lt;br /&gt;
        return onFail&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	local numCopy = num&lt;br /&gt;
    if type( num ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
        numCopy = num:gsub( &amp;#039;,&amp;#039;, &amp;#039;.&amp;#039; )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    numCopy = tonumber( numCopy, base )&lt;br /&gt;
&lt;br /&gt;
    if numCopy == nil then&lt;br /&gt;
        return onFail&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return numCopy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Formats a number according to the content language&lt;br /&gt;
---@param num number|string&lt;br /&gt;
function common.formatNum( num, onFail )&lt;br /&gt;
    local converted = common.toNumber( num, false )&lt;br /&gt;
&lt;br /&gt;
    if converted == nil or converted == false then&lt;br /&gt;
    	return onFail or false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    local converted = mw.language.getContentLanguage():formatNum( converted )&lt;br /&gt;
&lt;br /&gt;
    return mw.ustring.gsub( converted, &amp;#039;−&amp;#039;, &amp;#039;-&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Removes (...) suffixes&lt;br /&gt;
---@param pageName string&lt;br /&gt;
---@param suffix string|table&lt;br /&gt;
function common.removeTypeSuffix( pageName, suffix )&lt;br /&gt;
    if type( suffix ) == &amp;#039;table&amp;#039; then&lt;br /&gt;
        for _, toRemove in pairs( suffix ) do&lt;br /&gt;
            pageName = common.removeTypeSuffix( pageName, toRemove )&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        return pageName&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return mw.text.trim( pageName:gsub( &amp;#039;%(&amp;#039; .. suffix .. &amp;#039;%)&amp;#039;, &amp;#039;&amp;#039; ), &amp;#039;_ &amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Create interwiki links for a given title&lt;br /&gt;
---@param pageName string&lt;br /&gt;
function common.generateInterWikiLinks( pageName )&lt;br /&gt;
	if pageName == nil or #pageName == &amp;#039;&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local prefixes = { &amp;#039;de&amp;#039;, &amp;#039;hu&amp;#039;, &amp;#039;zh&amp;#039; }&lt;br /&gt;
	local suffixes = {}&lt;br /&gt;
&lt;br /&gt;
	local out = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	for _, prefix in pairs( prefixes ) do&lt;br /&gt;
		local page = common.removeTypeSuffix( pageName, suffixes )&lt;br /&gt;
		out = out .. mw.ustring.format( &amp;#039;[[%s:%s]]&amp;#039;, prefix, page )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Checks if Setting SMW Data was successful&lt;br /&gt;
---@param result table&lt;br /&gt;
function common.checkSmwResult( result )&lt;br /&gt;
	if result == nil then&lt;br /&gt;
        return&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if result ~= true and result.error ~= nil then&lt;br /&gt;
        error( &amp;#039;Semantic Mediawiki error &amp;#039; .. result.error )&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Checks if Api Request was successful and if the Response is valid&lt;br /&gt;
---@param response table&lt;br /&gt;
---@param errorOnData boolean&lt;br /&gt;
---@param errorOnData boolean&lt;br /&gt;
---@return boolean&lt;br /&gt;
function common.checkApiResponse( response, errorOnStatus, errorOnData )&lt;br /&gt;
    if response[ &amp;#039;status_code&amp;#039; ] ~= nil and response[ &amp;#039;status_code&amp;#039; ] ~= 200 then&lt;br /&gt;
        if errorOnStatus == nil or errorOnStatus == true then&lt;br /&gt;
            error( &amp;#039;API request returns the error code &amp;#039; .. response[ &amp;#039;status_code&amp;#039; ] .. &amp;#039;(&amp;#039; .. response[ &amp;#039;message&amp;#039; ] .. &amp;#039;)&amp;#039;, 0 )&lt;br /&gt;
        end&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if response[ &amp;#039;data&amp;#039; ] == nil then&lt;br /&gt;
        if errorOnData == nil or errorOnData == true then&lt;br /&gt;
            error( &amp;#039;API data does not contain a &amp;quot;data&amp;quot; field&amp;#039;, 0 )&lt;br /&gt;
        end&lt;br /&gt;
        return false&lt;br /&gt;
    end&lt;br /&gt;
    return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Walks a table in order, can be used like pairs()&lt;br /&gt;
---@param t table&lt;br /&gt;
---@param order function - Sorting function OPTIONAL&lt;br /&gt;
function common.spairs( t, order )&lt;br /&gt;
    -- collect the keys&lt;br /&gt;
    local keys = {}&lt;br /&gt;
    for k in pairs(t) do keys[#keys+1] = k end&lt;br /&gt;
&lt;br /&gt;
    -- if order function given, sort by it by passing the table and keys a, b,&lt;br /&gt;
    -- otherwise just sort the keys&lt;br /&gt;
    if order then&lt;br /&gt;
        table.sort(keys, function(a,b) return order(t, a, b) end)&lt;br /&gt;
    else&lt;br /&gt;
        table.sort(keys)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- return the iterator function&lt;br /&gt;
    local i = 0&lt;br /&gt;
    return function()&lt;br /&gt;
        i = i + 1&lt;br /&gt;
        if keys[i] then&lt;br /&gt;
            return keys[i], t[keys[i]]&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Alternative for doing table[key][key], this returns nil instead of an error if it doesn&amp;#039;t exist&lt;br /&gt;
---@param object table?&lt;br /&gt;
---@param ... string&lt;br /&gt;
function common.safeAccess( object, ... )&lt;br /&gt;
    local value = object&lt;br /&gt;
    if not value then return end&lt;br /&gt;
    for _, key in ipairs( { ... } ) do&lt;br /&gt;
        value = value[ key ]&lt;br /&gt;
        if value == nil then return nil end&lt;br /&gt;
    end&lt;br /&gt;
    return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Split a string with seperator&lt;br /&gt;
---@param str string Input string&lt;br /&gt;
---@param sep string Seperator&lt;br /&gt;
---@return table&amp;lt;string&amp;gt;&lt;br /&gt;
function common.split( str, sep )&lt;br /&gt;
    local matches = {}&lt;br /&gt;
    for matchedString in mw.ustring.gmatch( str, &amp;#039;([^&amp;#039; .. sep .. &amp;#039;]+)&amp;#039; ) do&lt;br /&gt;
        table.insert( matches, mw.ustring.gsub( matchedString, &amp;#039;%b()&amp;#039;, &amp;#039;&amp;#039; ) or &amp;#039;&amp;#039; )&lt;br /&gt;
    end&lt;br /&gt;
    return matches&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Remove parentheses and their content&lt;br /&gt;
--- Primairly used for starmap related things, such as making `TrueName (OldName)` &amp;gt; `TrueName`&lt;br /&gt;
---@param inputString string&lt;br /&gt;
---@return string&lt;br /&gt;
function common.removeParentheses( inputString )&lt;br /&gt;
    return mw.ustring.match( mw.ustring.gsub( inputString, &amp;#039;%b()&amp;#039;, &amp;#039;&amp;#039; ), &amp;#039;^%s*(.*%S)&amp;#039; ) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Trim a string&lt;br /&gt;
---@param str string&lt;br /&gt;
---@return string&lt;br /&gt;
function common.trim( str )&lt;br /&gt;
    return mw.ustring.match( str, &amp;#039;([^:%(%s]+)&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Uses Module:Pluralize to pluralize a string&lt;br /&gt;
---@param str string&lt;br /&gt;
---@return string&lt;br /&gt;
function common.pluralize( str )&lt;br /&gt;
    return require( &amp;#039;Module:Pluralize&amp;#039; ).pluralize( { args = { str } } )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return common&lt;/div&gt;</summary>
		<author><name>Noeth</name></author>
	</entry>
</feed>