<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AVorlage%3ARuneberg</id>
	<title>Modul:Vorlage:Runeberg - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Modul%3AVorlage%3ARuneberg"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Vorlage:Runeberg&amp;action=history"/>
	<updated>2026-06-09T10:44:34Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Vorlage:Runeberg&amp;diff=2930442&amp;oldid=prev</id>
		<title>imported&gt;PerfektesChaos: 2023-12-18</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Vorlage:Runeberg&amp;diff=2930442&amp;oldid=prev"/>
		<updated>2023-12-17T23:21:42Z</updated>

		<summary type="html">&lt;p&gt;2023-12-18&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local Runeberg = { self   = &amp;quot;Vorlage:Runeberg&amp;quot;,&lt;br /&gt;
                   suite  = &amp;quot;Runeberg&amp;quot;,&lt;br /&gt;
                   serial = &amp;quot;2023-12-18&amp;quot;,&lt;br /&gt;
                   item   = 123906537 }&lt;br /&gt;
&lt;br /&gt;
--[=[&lt;br /&gt;
Support for templates referring to https://runeberg.org/&lt;br /&gt;
]=]&lt;br /&gt;
local Failsafe = Runeberg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local Data = { DBL       = { },&lt;br /&gt;
               NF        = { },&lt;br /&gt;
               Salmonsen = { },&lt;br /&gt;
               project   = false,&lt;br /&gt;
               self      = Runeberg.self,&lt;br /&gt;
               serial    = Runeberg.serial,&lt;br /&gt;
               site      = &amp;quot;https://runeberg.org/&amp;quot;,&lt;br /&gt;
               suite     = false,&lt;br /&gt;
               types     = { facet   = &amp;quot;function&amp;quot;,&lt;br /&gt;
                             figures = &amp;quot;function&amp;quot;,&lt;br /&gt;
                             pages   = &amp;quot;table&amp;quot;,&lt;br /&gt;
                             ranges  = &amp;quot;table&amp;quot; } }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function range()&lt;br /&gt;
    -- Retrieve volume title&lt;br /&gt;
    -- Returns title&lt;br /&gt;
    local iEdt, iVol = Data.project.figures( Data )&lt;br /&gt;
    local r&lt;br /&gt;
    if iVol then&lt;br /&gt;
        r = Data.project.ranges[ iEdt ][ iVol ]&lt;br /&gt;
    else&lt;br /&gt;
        r = Data.fault( 10 )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- range()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function wwwLink()&lt;br /&gt;
    -- Retrieve external link from invocation&lt;br /&gt;
    -- Returns bracketed URL&lt;br /&gt;
    local iEdt, iVol, iCP, err = Data.project.figures( Data )&lt;br /&gt;
    local r&lt;br /&gt;
    if err then&lt;br /&gt;
        r = Data.fault( err )&lt;br /&gt;
    else&lt;br /&gt;
        local show   = Data.params.text or &amp;quot;&amp;quot;&lt;br /&gt;
        local site   = Data.site .. Data.suite:lower()&lt;br /&gt;
        local sub    = Data.params.runeberg&lt;br /&gt;
        local s1, s2 = Data.project.facet( Data, iEdt, iVol, iCP )&lt;br /&gt;
        if sub then&lt;br /&gt;
            if sub:match( &amp;quot;^%l+%.%l+$&amp;quot; ) then&lt;br /&gt;
                s2 = sub&lt;br /&gt;
            elseif sub:match( &amp;quot;^%l+$&amp;quot; ) then&lt;br /&gt;
                s2 = sub .. &amp;quot;.html&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if s1 then&lt;br /&gt;
            if s2 then&lt;br /&gt;
                site = string.format( &amp;quot;%s%s/%s&amp;quot;, site, s1, s2 )&lt;br /&gt;
            else&lt;br /&gt;
                r    = s1&lt;br /&gt;
                site = false&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if site then&lt;br /&gt;
            if show == &amp;quot;&amp;quot; then&lt;br /&gt;
                show = string.format( &amp;quot;%d,%d,%d&amp;quot;,&lt;br /&gt;
                                      iEdt or 1,  iVol or 1,  iCP or 0 )&lt;br /&gt;
            end&lt;br /&gt;
            r = string.format( &amp;quot;[%s %s]&amp;quot;, site, show )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- wwwLink()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Data.fault = function ( alert )&lt;br /&gt;
    local cat    = Data.params.errCat   or &amp;quot;&amp;quot;&lt;br /&gt;
    local class  = Data.params.errClass or &amp;quot;&amp;quot;&lt;br /&gt;
    local style  = Data.params.errStyle or &amp;quot;&amp;quot;&lt;br /&gt;
    local show   = Data.params.errText  or &amp;quot;&amp;quot;&lt;br /&gt;
    local suffix = type( alert )&lt;br /&gt;
    local e      = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                          :addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
    local r&lt;br /&gt;
    if class ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        e:addClass( class )&lt;br /&gt;
    end&lt;br /&gt;
    if style ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        e:cssText( style )&lt;br /&gt;
    end&lt;br /&gt;
    if show == &amp;quot;&amp;quot; then&lt;br /&gt;
        show = &amp;quot;Error&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    if suffix == &amp;quot;string&amp;quot; then&lt;br /&gt;
        show = string.format( &amp;quot;%s: %s&amp;quot;, show, alert )&lt;br /&gt;
    elseif suffix == &amp;quot;number&amp;quot; then&lt;br /&gt;
        show = string.format( &amp;quot;%s %d&amp;quot;, show, alert )&lt;br /&gt;
    end&lt;br /&gt;
    e:wikitext( show )&lt;br /&gt;
    r = tostring( e )&lt;br /&gt;
    if cat ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        r = string.format( &amp;quot;%s[[Category:%s]]&amp;quot;, r, cat )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Data.fault()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Data.fetch = function ( frame )&lt;br /&gt;
    -- Assign particular project&lt;br /&gt;
    -- Returns string with error message, or nil&lt;br /&gt;
    local r&lt;br /&gt;
    Data.frame  = frame&lt;br /&gt;
    Data.params = frame.args&lt;br /&gt;
    if Data.params.suite then&lt;br /&gt;
        Data.project = Data[ Data.params.suite ]&lt;br /&gt;
        if Data.project then&lt;br /&gt;
            local lucky, got, s, suite&lt;br /&gt;
            Data.suite = Data.params.suite&lt;br /&gt;
            suite = string.format( &amp;quot;Module:%s/%s&amp;quot;,&lt;br /&gt;
                                   Data.self, Data.suite )&lt;br /&gt;
            lucky, got = pcall( require, suite )&lt;br /&gt;
            if type( got ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                for k, v in pairs( Data.types ) do&lt;br /&gt;
                    if type( got[ k ] ) == v then&lt;br /&gt;
                        Data.project[ k ] = got[ k ]&lt;br /&gt;
                    else&lt;br /&gt;
                        s = string.format( &amp;quot;%s %s &amp;#039;%s&amp;#039;&amp;quot;,&lt;br /&gt;
                                           &amp;quot;Internal error:&amp;quot;,&lt;br /&gt;
                                           &amp;quot;missing definition&amp;quot;,&lt;br /&gt;
                                           &amp;quot;pages&amp;quot; )&lt;br /&gt;
                        r = Data.fault( s )&lt;br /&gt;
                        break -- for k, v&lt;br /&gt;
                    end&lt;br /&gt;
                end -- for k, v&lt;br /&gt;
            else&lt;br /&gt;
                s = string.format( &amp;quot;%s %s&amp;quot;, &amp;quot;Internal error:&amp;quot;, got )&lt;br /&gt;
                r = Data.fault( s )&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            r = Data.fault( &amp;quot;Internal error: &amp;#039;suite&amp;#039; unknown&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = Data.fault( &amp;quot;Internal error: &amp;#039;suite&amp;#039; is missing&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Data.fetch()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Data.folio = function ( aEdt, aVol, aSub, aSplit )&lt;br /&gt;
    -- Retrieve web page number&lt;br /&gt;
    -- Returns sheet number&lt;br /&gt;
    local volume = Data.project.pages[ aEdt ]&lt;br /&gt;
    local r&lt;br /&gt;
    if type( volume ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        volume = volume[ aVol ]&lt;br /&gt;
        if type( volume ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            local k = aSub or 0&lt;br /&gt;
            local d&lt;br /&gt;
            for i = 1, #volume do&lt;br /&gt;
                d = volume[ i ]&lt;br /&gt;
                if k &amp;gt;= d[ 1 ]  and  k &amp;lt;= d[ 2 ] then&lt;br /&gt;
                    if d[ 4 ] then&lt;br /&gt;
                        if d[ 4 ] == &amp;quot;oddOnly&amp;quot; then&lt;br /&gt;
                            if k % 2 == 0 then&lt;br /&gt;
                                k = k - 1&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                    elseif aSplit then&lt;br /&gt;
                        if k % 2 == 1 then&lt;br /&gt;
                            k = k + 1&lt;br /&gt;
                        end&lt;br /&gt;
                        k = k / 2&lt;br /&gt;
                    end&lt;br /&gt;
                    r = k + d[ 3 ]&lt;br /&gt;
                    break    -- for i&lt;br /&gt;
                end&lt;br /&gt;
            end -- i = 1, #volume&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return  r or 1&lt;br /&gt;
end -- Data.folio()&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;
p.range = function ( frame )&lt;br /&gt;
    local r = Data.fetch( frame )&lt;br /&gt;
    if not r then&lt;br /&gt;
        r = range()&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.wwwLink = function ( frame )&lt;br /&gt;
    local r = Data.fetch( frame )&lt;br /&gt;
    if not r then&lt;br /&gt;
        r = wwwLink()&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end&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;
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>imported&gt;PerfektesChaos</name></author>
	</entry>
</feed>