<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.helmstedt-wiki.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AFileMedia</id>
	<title>Modul:FileMedia - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.helmstedt-wiki.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AFileMedia"/>
	<link rel="alternate" type="text/html" href="https://www.helmstedt-wiki.de/index.php?title=Modul:FileMedia&amp;action=history"/>
	<updated>2026-05-05T21:15:37Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Helmstedt-Wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://www.helmstedt-wiki.de/index.php?title=Modul:FileMedia&amp;diff=29343&amp;oldid=prev</id>
		<title>Admin: AZ: Die Seite wurde neu angelegt: local FileMedia = { suite  = &quot;FileMedia&quot;,                     serial = &quot;2023-01-01&quot;,                     item   = 24765326 } --[=[ FileMedia ]=]  local Failsafe = FileMedia FileMedia.extension = { storage = &quot;FileMediaExt.tab&quot; }    FileMedia.getExtension = function ( ask )     -- Retrieve &quot;file name extension&quot; from file name     -- Precondition:     --     ask  -- file name; string, or nil     -- Pos…</title>
		<link rel="alternate" type="text/html" href="https://www.helmstedt-wiki.de/index.php?title=Modul:FileMedia&amp;diff=29343&amp;oldid=prev"/>
		<updated>2025-01-28T10:35:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;/index.php?title=Hilfe:Zusammenfassung_und_Quellen&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Hilfe:Zusammenfassung und Quellen (Seite nicht vorhanden)&quot;&gt;AZ&lt;/a&gt;: Die Seite wurde neu angelegt: local FileMedia = { suite  = &amp;quot;FileMedia&amp;quot;,                     serial = &amp;quot;2023-01-01&amp;quot;,                     item   = 24765326 } --[=[ FileMedia ]=]  local Failsafe = FileMedia FileMedia.extension = { storage = &amp;quot;FileMediaExt.tab&amp;quot; }    FileMedia.getExtension = function ( ask )     -- Retrieve &amp;quot;file name extension&amp;quot; from file name     -- Precondition:     --     ask  -- file name; string, or nil     -- Pos…&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local FileMedia = { suite  = &amp;quot;FileMedia&amp;quot;,&lt;br /&gt;
                    serial = &amp;quot;2023-01-01&amp;quot;,&lt;br /&gt;
                    item   = 24765326 }&lt;br /&gt;
--[=[&lt;br /&gt;
FileMedia&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
local Failsafe = FileMedia&lt;br /&gt;
FileMedia.extension = { storage = &amp;quot;FileMediaExt.tab&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.getExtension = function ( ask )&lt;br /&gt;
    -- Retrieve &amp;quot;file name extension&amp;quot; from file name&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- file name; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string, or false&lt;br /&gt;
    local r = false&lt;br /&gt;
    local s = FileMedia.getTitle( ask )&lt;br /&gt;
    if s then&lt;br /&gt;
        s = ask:match( &amp;quot;.%.(%w+)%s*$&amp;quot; )&lt;br /&gt;
        if s then&lt;br /&gt;
            r = s:lower()&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.getExtension()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.getHeight = function ( ask )&lt;br /&gt;
    -- Retrieve image height&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- file name or title; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns number, or false or nil&lt;br /&gt;
    local r = false&lt;br /&gt;
    local s = FileMedia.getTitle( ask )&lt;br /&gt;
    if s then&lt;br /&gt;
        local d = mw.title.makeTitle( &amp;quot;File&amp;quot;, s )&lt;br /&gt;
        if d and d.file then&lt;br /&gt;
            r = d.file.height&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.getHeight()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.getHeightWidth = function ( ask )&lt;br /&gt;
    -- Retrieve image height x width&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- file name or title; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string like &amp;quot;123x456px&amp;quot;, or false or nil&lt;br /&gt;
    local r = false&lt;br /&gt;
    local s = FileMedia.getTitle( ask )&lt;br /&gt;
    if s then&lt;br /&gt;
        local d = mw.title.makeTitle( &amp;quot;File&amp;quot;, s )&lt;br /&gt;
        if d and d.file then&lt;br /&gt;
            r = d.file.height&lt;br /&gt;
            if r then&lt;br /&gt;
                r = string.format(&amp;quot;%dx%dpx&amp;quot;, r, d.file.width)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.getHeightWidth()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.getMimeType = function ( ask )&lt;br /&gt;
    -- Retrieve file MimeType&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- file name or title; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string, or false or nil&lt;br /&gt;
    local r = false&lt;br /&gt;
    local s = FileMedia.getTitle( ask )&lt;br /&gt;
    if s then&lt;br /&gt;
        local d = mw.title.makeTitle( &amp;quot;File&amp;quot;, s )&lt;br /&gt;
        if d and d.file then&lt;br /&gt;
            r = d.file.mimeType&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.getMimeType()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.getPageCount = function ( ask )&lt;br /&gt;
    -- Retrieve number of file pages (paged media fragments)&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- file name or title; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns number (0 if not paged media), or false or nil&lt;br /&gt;
    local r = false&lt;br /&gt;
    local s = FileMedia.getTitle( ask )&lt;br /&gt;
    if s then&lt;br /&gt;
        local d = mw.title.makeTitle( &amp;quot;File&amp;quot;, s )&lt;br /&gt;
        if d and d.file then&lt;br /&gt;
            r = d.file.pages&lt;br /&gt;
            if r then&lt;br /&gt;
                r = #r&lt;br /&gt;
            elseif d.file.size then&lt;br /&gt;
                r = 0&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.getPageCount()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.getPages = function ( ask )&lt;br /&gt;
    -- Retrieve table of file page sizes (paged media fragments)&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- file name or title; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns table, or false or nil&lt;br /&gt;
    local r = false&lt;br /&gt;
    local s = FileMedia.getTitle( ask )&lt;br /&gt;
    if s then&lt;br /&gt;
        local d = mw.title.makeTitle( &amp;quot;File&amp;quot;, s )&lt;br /&gt;
        if d and d.file then&lt;br /&gt;
            r = d.file.pages&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.getPages()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.getSize = function ( ask )&lt;br /&gt;
    -- Retrieve file size&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- file name or title; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns number, or false or nil&lt;br /&gt;
    local r = false&lt;br /&gt;
    local s = FileMedia.getTitle( ask )&lt;br /&gt;
    if s then&lt;br /&gt;
        local d = mw.title.makeTitle( &amp;quot;File&amp;quot;, s )&lt;br /&gt;
        if d and d.file then&lt;br /&gt;
            r = d.file.size&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.getSize()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.getTitle = function ( ask )&lt;br /&gt;
    -- Retrieve file page title from page name&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- file name; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string, or false if not a valid file&lt;br /&gt;
    local r = false&lt;br /&gt;
    if FileMedia.isType( ask, &amp;quot;file&amp;quot; ) then&lt;br /&gt;
        local space, s = ask:match( &amp;quot;^([^:]+):(.+)$&amp;quot; )&lt;br /&gt;
        if space then&lt;br /&gt;
            if FileMedia.isSpacing( space ) then&lt;br /&gt;
                r = mw.text.trim( s )&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            r = mw.text.trim( ask )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.getTitle()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.getType = function ( ask )&lt;br /&gt;
    -- Retrieve supposed file type from &amp;quot;file name extension&amp;quot;&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- file name; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns string, or false&lt;br /&gt;
    --             &amp;quot;audio&amp;quot;&lt;br /&gt;
    --             &amp;quot;data&amp;quot;&lt;br /&gt;
    --             &amp;quot;paged&amp;quot;&lt;br /&gt;
    --             &amp;quot;pixel&amp;quot;&lt;br /&gt;
    --             &amp;quot;program&amp;quot;&lt;br /&gt;
    --             &amp;quot;style&amp;quot;&lt;br /&gt;
    --             &amp;quot;vector&amp;quot;&lt;br /&gt;
    --             &amp;quot;video&amp;quot;&lt;br /&gt;
    local r = false&lt;br /&gt;
    if ask then&lt;br /&gt;
        local s = ask:match( &amp;quot;.%.(%w+)%s*$&amp;quot; )&lt;br /&gt;
        if s then&lt;br /&gt;
            if not FileMedia.extension.data then&lt;br /&gt;
                local lucky, data&lt;br /&gt;
                lucky, data = pcall( mw.ext.data.get,&lt;br /&gt;
                                     FileMedia.extension.storage )&lt;br /&gt;
                if type( data ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    FileMedia.extension.data = data.data&lt;br /&gt;
                else&lt;br /&gt;
                    FileMedia.extension.data = true&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if type( FileMedia.extension.data ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                local e&lt;br /&gt;
                s = s:lower()&lt;br /&gt;
                for i = 1, #FileMedia.extension.data do&lt;br /&gt;
                    e = FileMedia.extension.data[ i ]&lt;br /&gt;
                    if type( e ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                       e[ 1 ] == s then&lt;br /&gt;
                        r = e[ 2 ]&lt;br /&gt;
                        break   -- for i&lt;br /&gt;
                    end&lt;br /&gt;
                end   -- for i&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.getType()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.getWidth = function ( ask )&lt;br /&gt;
    -- Retrieve image width&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- file name or title; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns number, or false or nil&lt;br /&gt;
    local r = false&lt;br /&gt;
    local s = FileMedia.getTitle( ask )&lt;br /&gt;
    if s then&lt;br /&gt;
        local d = mw.title.makeTitle( &amp;quot;File&amp;quot;, s )&lt;br /&gt;
        if d and d.file then&lt;br /&gt;
            r = d.file.width&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.getWidth()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.isFile = function ( ask )&lt;br /&gt;
    -- Is this a valid (existing) file title or file name?&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- file title or file name; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns boolean&lt;br /&gt;
    -- Expensive function.&lt;br /&gt;
    local r&lt;br /&gt;
    local s = FileMedia.getTitle( ask )&lt;br /&gt;
    if s then&lt;br /&gt;
        r = mw.title.makeTitle( &amp;quot;File&amp;quot;, s ).fileExists&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.isFile()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.isSpacing = function ( ask )&lt;br /&gt;
    -- Is presumed space name not conflicting with files?&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask  -- possible space name; string, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns boolean; false: conflict&lt;br /&gt;
    local r = true&lt;br /&gt;
    if ask then&lt;br /&gt;
        local space = mw.site.namespaces[ mw.text.trim( ask ) ]&lt;br /&gt;
        if space then&lt;br /&gt;
            space = space.canonicalName&lt;br /&gt;
            r     = ( space == &amp;quot;Media&amp;quot;  or  space == &amp;quot;File&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.isSpacing()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.isType = function ( ask, against )&lt;br /&gt;
    -- Does file name match type expectation?&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     ask      -- file name; string, or nil&lt;br /&gt;
    --     against  -- expectation; generic or &amp;quot;file&amp;quot; or &amp;quot;image&amp;quot; or any&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns boolean&lt;br /&gt;
    local r = false&lt;br /&gt;
    local s = FileMedia.getType( ask )&lt;br /&gt;
    if s then&lt;br /&gt;
        local scope&lt;br /&gt;
        if against == &amp;quot;file&amp;quot; then&lt;br /&gt;
            scope = &amp;quot;audio paged pixel vector video&amp;quot;&lt;br /&gt;
        elseif against == &amp;quot;image&amp;quot; then&lt;br /&gt;
            scope = &amp;quot;paged pixel vector&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if scope then&lt;br /&gt;
            local suffix = ask:match( &amp;quot;.%.(%w+)%s*$&amp;quot; )&lt;br /&gt;
            if suffix  and  suffix:lower() ~= &amp;quot;doc&amp;quot; then&lt;br /&gt;
                r = scope:match( s )&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            r = ( s == against )&lt;br /&gt;
        end&lt;br /&gt;
        if r then&lt;br /&gt;
            s = ask:match( &amp;quot;^%s*([^:]+)%s*:&amp;quot; )&lt;br /&gt;
            r = FileMedia.isSpacing( s )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.isType()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FileMedia.setParSize = function ( assign, atleast, ahead )&lt;br /&gt;
    -- Check or adapt transclusion parameter for size&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     assign   -- size parameter; string, or nil&lt;br /&gt;
    --     atleast  -- fallback value; string, or nil&lt;br /&gt;
    --     ahead    -- start with pipe, if not empty; boolean, or nil&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns px string, if valid or corrected, else false&lt;br /&gt;
    local r = false&lt;br /&gt;
    if type( assign ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
        local s = mw.text.trim( assign )&lt;br /&gt;
        if s ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            if s:match( &amp;quot;^[1-9]%d?%d?%d?$&amp;quot; ) then&lt;br /&gt;
                r = s .. &amp;quot;px&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                s = s:lower()&lt;br /&gt;
                if s:match( &amp;quot;%d$&amp;quot; ) then&lt;br /&gt;
                    s = s .. &amp;quot;px&amp;quot;&lt;br /&gt;
                elseif not s:match( &amp;quot;%dpx$&amp;quot; ) then&lt;br /&gt;
                    s = false&lt;br /&gt;
                end&lt;br /&gt;
                if s then&lt;br /&gt;
                    if s:match( &amp;quot;^[1-9]%d?%d?%d?px$&amp;quot; )  or&lt;br /&gt;
                       s:match( &amp;quot;^[1-9]%d?%d?%d?x[1-9]%d?%d?%d?px$&amp;quot; )  or&lt;br /&gt;
                       s:match( &amp;quot;^x[1-9]%d?%d?%d?px$&amp;quot; ) then&lt;br /&gt;
                        r = s&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not r and atleast then&lt;br /&gt;
        r = atleast&lt;br /&gt;
    end&lt;br /&gt;
    if r and ahead then&lt;br /&gt;
        r = &amp;quot;|&amp;quot; .. r&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- FileMedia.setParSize()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Failsafe.failsafe = function ( atleast )&lt;br /&gt;
    -- Retrieve versioning and check for compliance&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     atleast  -- string, with required version&lt;br /&gt;
    --                         or wikidata|item|~|@ or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns  string  -- with queried version/item, also if problem&lt;br /&gt;
    --              false   -- if appropriate&lt;br /&gt;
    -- 2020-08-17&lt;br /&gt;
    local since = atleast&lt;br /&gt;
    local last    = ( since == &amp;quot;~&amp;quot; )&lt;br /&gt;
    local linked  = ( since == &amp;quot;@&amp;quot; )&lt;br /&gt;
    local link    = ( since == &amp;quot;item&amp;quot; )&lt;br /&gt;
    local r&lt;br /&gt;
    if last  or  link  or  linked  or  since == &amp;quot;wikidata&amp;quot; then&lt;br /&gt;
        local item = Failsafe.item&lt;br /&gt;
        since = false&lt;br /&gt;
        if type( item ) == &amp;quot;number&amp;quot;  and  item &amp;gt; 0 then&lt;br /&gt;
            local suited = string.format( &amp;quot;Q%d&amp;quot;, item )&lt;br /&gt;
            if link then&lt;br /&gt;
                r = suited&lt;br /&gt;
            else&lt;br /&gt;
                local entity = mw.wikibase.getEntity( suited )&lt;br /&gt;
                if type( entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    local seek = Failsafe.serialProperty or &amp;quot;P348&amp;quot;&lt;br /&gt;
                    local vsn  = entity:formatPropertyValues( seek )&lt;br /&gt;
                    if type( vsn ) == &amp;quot;table&amp;quot;  and&lt;br /&gt;
                       type( vsn.value ) == &amp;quot;string&amp;quot;  and&lt;br /&gt;
                       vsn.value ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                        if last  and  vsn.value == Failsafe.serial then&lt;br /&gt;
                            r = false&lt;br /&gt;
                        elseif linked then&lt;br /&gt;
                            if mw.title.getCurrentTitle().prefixedText&lt;br /&gt;
                               ==  mw.wikibase.getSitelink( suited ) then&lt;br /&gt;
                                r = false&lt;br /&gt;
                            else&lt;br /&gt;
                                r = suited&lt;br /&gt;
                            end&lt;br /&gt;
                        else&lt;br /&gt;
                            r = vsn.value&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if type( r ) == &amp;quot;nil&amp;quot; then&lt;br /&gt;
        if not since  or  since &amp;lt;= Failsafe.serial then&lt;br /&gt;
            r = Failsafe.serial&lt;br /&gt;
        else&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Failsafe.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- Export&lt;br /&gt;
local p = { }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.getExtension = function ( frame )&lt;br /&gt;
    -- Retrieve &amp;quot;file name extension&amp;quot; from page title or name&lt;br /&gt;
    --     1  -- file title or name&lt;br /&gt;
    local lucky, r = pcall( FileMedia.getExtension,&lt;br /&gt;
                            frame.args[ 1 ] )&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.getExtension&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.getHeight = function ( frame )&lt;br /&gt;
    -- Retrieve image height from page title or name&lt;br /&gt;
    --     1  -- file title or name&lt;br /&gt;
    local lucky, r = pcall( FileMedia.getHeight,&lt;br /&gt;
                            frame.args[ 1 ] )&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.getHeight&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.getHeightWidth = function ( frame )&lt;br /&gt;
    -- Retrieve image height x width from page title or name&lt;br /&gt;
    --     1  -- file title or name&lt;br /&gt;
    local lucky, r = pcall( FileMedia.getHeightWidth,&lt;br /&gt;
                            frame.args[ 1 ] )&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.getHeightWidth&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.getMimeType = function ( frame )&lt;br /&gt;
    -- Retrieve MIME type from page title or name&lt;br /&gt;
    --     1  -- file title or name&lt;br /&gt;
    local lucky, r = pcall( FileMedia.getMimeType,&lt;br /&gt;
                            frame.args[ 1 ] )&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.getMimeType&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.getPageCount = function ( frame )&lt;br /&gt;
    -- Retrieve number of file pages (paged media fragments) from page title or name&lt;br /&gt;
    --     1  -- file title or name&lt;br /&gt;
    local lucky, r = pcall( FileMedia.getPageCount,&lt;br /&gt;
                            frame.args[ 1 ] )&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.getPageCount&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.getSize = function ( frame )&lt;br /&gt;
    -- Retrieve file size from page title or name&lt;br /&gt;
    --     1  -- file title or name&lt;br /&gt;
    local lucky, r = pcall( FileMedia.getSize,&lt;br /&gt;
                            frame.args[ 1 ] )&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.getSize&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.getTitle = function ( frame )&lt;br /&gt;
    -- Retrieve file title from page title or name&lt;br /&gt;
    --     1  -- file title or name&lt;br /&gt;
    local lucky, r = pcall( FileMedia.getTitle,&lt;br /&gt;
                            frame.args[ 1 ] )&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.getTitle&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.getType = function ( frame )&lt;br /&gt;
    -- Retrieve supposed file type from &amp;quot;file name extension&amp;quot;&lt;br /&gt;
    --     1  -- file title or name&lt;br /&gt;
    local lucky, r = pcall( FileMedia.getType,&lt;br /&gt;
                            frame.args[ 1 ] )&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.getType&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.getWidth = function ( frame )&lt;br /&gt;
    -- Retrieve file width from page title or name&lt;br /&gt;
    --     1  -- file title or name&lt;br /&gt;
    local lucky, r = pcall( FileMedia.getWidth,&lt;br /&gt;
                            frame.args[ 1 ] )&lt;br /&gt;
    return r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.getWidth&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.isFile = function ( frame )&lt;br /&gt;
    -- Is this a valid (existing) file title or file name?&lt;br /&gt;
    --     1  -- file name; with or without namespace&lt;br /&gt;
    -- Expensive function.&lt;br /&gt;
    local lucky, r = pcall( FileMedia.isFile,&lt;br /&gt;
                            frame.args[ 1 ] )&lt;br /&gt;
    return r and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.isFile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.isType = function ( frame )&lt;br /&gt;
    -- Does file name match type expectation?&lt;br /&gt;
    --     1  -- file name&lt;br /&gt;
    --     2  -- expected&lt;br /&gt;
    local r        = false&lt;br /&gt;
    local supposed = frame.args[ 2 ]&lt;br /&gt;
    if supposed then&lt;br /&gt;
        supposed = supposed:match( &amp;quot;^%s*(%w+)%s*$&amp;quot; )&lt;br /&gt;
        if supposed then&lt;br /&gt;
            local lucky&lt;br /&gt;
            lucky, r = pcall( FileMedia.isType,&lt;br /&gt;
                              frame.args[ 1 ],&lt;br /&gt;
                              supposed:lower() )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r and &amp;quot;1&amp;quot; or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.isType&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.setParSize = function ( frame )&lt;br /&gt;
    -- Check or adapt transclusion parameter [ 1 ] for size&lt;br /&gt;
    -- Returns px string, if valid or corrected, else empty&lt;br /&gt;
    --         Fallback to parameter [ 2 ]&lt;br /&gt;
    local lead = frame.args.pipe&lt;br /&gt;
    local r&lt;br /&gt;
    if lead  and&lt;br /&gt;
       ( lead == &amp;quot;&amp;quot;  or  lead == &amp;quot;0&amp;quot; ) then&lt;br /&gt;
        lead = false&lt;br /&gt;
    end&lt;br /&gt;
    r = FileMedia.setParSize( frame.args[ 1 ],&lt;br /&gt;
                              frame.args[ 2 ],&lt;br /&gt;
                              lead )&lt;br /&gt;
    return  r or &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.setParSize&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.failsafe = function ( frame )&lt;br /&gt;
    -- Versioning interface&lt;br /&gt;
    local s = type( frame )&lt;br /&gt;
    local since&lt;br /&gt;
    if s == &amp;quot;table&amp;quot; then&lt;br /&gt;
        since = frame.args[ 1 ]&lt;br /&gt;
    elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        since = frame&lt;br /&gt;
    end&lt;br /&gt;
    if since then&lt;br /&gt;
        since = mw.text.trim( since )&lt;br /&gt;
        if since == &amp;quot;&amp;quot; then&lt;br /&gt;
            since = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return Failsafe.failsafe( since )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.failsafe()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.FileMedia = function ()&lt;br /&gt;
    return FileMedia&lt;br /&gt;
end -- p.FileMedia&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
setmetatable( p,  { __call = function ( func, ... )&lt;br /&gt;
                                 setmetatable( p, nil )&lt;br /&gt;
                                 return Failsafe&lt;br /&gt;
                             end } )&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>