<?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%3AJSTOR</id>
	<title>Modul:JSTOR - 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%3AJSTOR"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:JSTOR&amp;action=history"/>
	<updated>2026-05-25T02:48:22Z</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:JSTOR&amp;diff=2924246&amp;oldid=prev</id>
		<title>imported&gt;PerfektesChaos: 2024-09-22</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:JSTOR&amp;diff=2924246&amp;oldid=prev"/>
		<updated>2024-09-23T10:26:28Z</updated>

		<summary type="html">&lt;p&gt;2024-09-22&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local JSTOR = { suite  = &amp;quot;JSTOR&amp;quot;,&lt;br /&gt;
                serial = &amp;quot;2024-09-22&amp;quot;,&lt;br /&gt;
                setup  = &amp;quot;config.json&amp;quot;,&lt;br /&gt;
                item   = 71782977 }&lt;br /&gt;
--[=[&lt;br /&gt;
Template:JSTOR&lt;br /&gt;
and other issues dealing with JSTOR ID.&lt;br /&gt;
]=]&lt;br /&gt;
local Failsafe  = JSTOR&lt;br /&gt;
local Externals&lt;br /&gt;
JSTOR.config = { self = JSTOR.suite }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function factory( apply )&lt;br /&gt;
    -- Localization of messages&lt;br /&gt;
    --     apply  -- string, with message key&lt;br /&gt;
    -- Returns message text; at least english&lt;br /&gt;
    local entry = JSTOR.config[ apply ]&lt;br /&gt;
    local r&lt;br /&gt;
    if entry then&lt;br /&gt;
        r = entry[ mw.language.getContentLanguage():getCode() ]&lt;br /&gt;
        if not r then&lt;br /&gt;
            r = entry.en&lt;br /&gt;
        end&lt;br /&gt;
    else&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;
                         :wikitext( string.format( &amp;quot;????.%s.????&amp;quot;,&lt;br /&gt;
                                                   apply ) )&lt;br /&gt;
        r = tostring( e )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- factory()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function faculty( adjust )&lt;br /&gt;
    -- Test template arg for boolean&lt;br /&gt;
    --     adjust  -- string or nil&lt;br /&gt;
    -- Returns boolean&lt;br /&gt;
    local s = type( adjust )&lt;br /&gt;
    local r&lt;br /&gt;
    if s == &amp;quot;string&amp;quot; then&lt;br /&gt;
        r = mw.text.trim( adjust )&lt;br /&gt;
        r = ( r ~= &amp;quot;&amp;quot;  and  r ~= &amp;quot;0&amp;quot; )&lt;br /&gt;
    elseif s == &amp;quot;boolean&amp;quot; then&lt;br /&gt;
        r = adjust&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- faculty()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fault( alert, about )&lt;br /&gt;
    -- Format message with class=&amp;quot;error&amp;quot; or similar&lt;br /&gt;
    --     alert  -- string, with message key&lt;br /&gt;
    --     about  -- string, with explanation&lt;br /&gt;
    -- Returns message with markup&lt;br /&gt;
    local e = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
    local r&lt;br /&gt;
    JSTOR.config.first()&lt;br /&gt;
    if JSTOR.config.suite  and&lt;br /&gt;
       JSTOR.config.suite ~= &amp;quot;&amp;quot; then&lt;br /&gt;
        e:wikitext( &amp;quot; * &amp;quot; )&lt;br /&gt;
         :wikitext( JSTOR.config.suite )&lt;br /&gt;
    end&lt;br /&gt;
    e:wikitext( factory( alert ) )&lt;br /&gt;
    if not JSTOR.config.frame then&lt;br /&gt;
        JSTOR.config.frame = mw.getCurrentFrame()&lt;br /&gt;
    end&lt;br /&gt;
    r = JSTOR.config.frame:callParserFunction( &amp;quot;REVISIONID&amp;quot;,&lt;br /&gt;
                                               { [1] = &amp;quot;&amp;quot; } )&lt;br /&gt;
    if JSTOR.config.errClass then&lt;br /&gt;
        e:addClass( JSTOR.config.errClass )&lt;br /&gt;
    end&lt;br /&gt;
    if r == &amp;quot;&amp;quot; then&lt;br /&gt;
        JSTOR.config.errCat = false&lt;br /&gt;
        e:addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
    elseif JSTOR.config.errHide then&lt;br /&gt;
        e:css( { display = &amp;quot;none&amp;quot; } )&lt;br /&gt;
    end&lt;br /&gt;
    if JSTOR.config.errClasses then&lt;br /&gt;
        e:addClass( JSTOR.config.errClasses )&lt;br /&gt;
    end&lt;br /&gt;
    r = tostring( e )&lt;br /&gt;
    if about then&lt;br /&gt;
        r = string.format( &amp;quot;%s %s&amp;quot;, r, about )&lt;br /&gt;
    end&lt;br /&gt;
    if JSTOR.config.errCat then&lt;br /&gt;
        if JSTOR.config.errNS then&lt;br /&gt;
            local ns = mw.title.getCurrentTitle().namespace&lt;br /&gt;
            local st = type( JSTOR.config.errNS )&lt;br /&gt;
            if st == &amp;quot;string&amp;quot; then&lt;br /&gt;
                local space  = string.format( &amp;quot;.*%%s%d%%s.*&amp;quot;, ns )&lt;br /&gt;
                local spaces = string.format( &amp;quot; %s &amp;quot;,&lt;br /&gt;
                                              JSTOR.config.errNS )&lt;br /&gt;
                if spaces:match( space ) then&lt;br /&gt;
                    JSTOR.config.errNS = false&lt;br /&gt;
                end&lt;br /&gt;
            elseif st == &amp;quot;number&amp;quot; then&lt;br /&gt;
                if JSTOR.config.errNS == ns then&lt;br /&gt;
                    JSTOR.config.errNS = false&lt;br /&gt;
                end&lt;br /&gt;
            elseif st == &amp;quot;table&amp;quot; then&lt;br /&gt;
                for i = 1, #JSTOR.config.errNS do&lt;br /&gt;
                    if JSTOR.config.errNS[ i ] == ns then&lt;br /&gt;
                        JSTOR.config.errNS = false&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;
        if not JSTOR.config.errNS then&lt;br /&gt;
            r = string.format( &amp;quot;%s[[Category:%s]]&amp;quot;,&lt;br /&gt;
                               r, JSTOR.config.errCat )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fault()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fetch( auxilary )&lt;br /&gt;
    -- Fetch module&lt;br /&gt;
    --     auxilary  -- URIutil library, or false&lt;br /&gt;
    -- Returns table of library, or string with error message&lt;br /&gt;
    local r&lt;br /&gt;
    if Externals then&lt;br /&gt;
        r = Externals.URIutil&lt;br /&gt;
    else&lt;br /&gt;
        Externals = { }&lt;br /&gt;
        if type( auxilary ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            Externals.URIutil = auxilary&lt;br /&gt;
            r                 = Externals.URIutil&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not r then&lt;br /&gt;
        local lucky&lt;br /&gt;
        lucky, r = pcall( require, &amp;quot;Module:URIutil&amp;quot; )&lt;br /&gt;
        if type( r ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            Externals.URIutil = r()&lt;br /&gt;
            r                 = Externals.URIutil&lt;br /&gt;
        else&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;
                             :wikitext( r )&lt;br /&gt;
            r = tostring( e )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fetch()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSTOR.config.first = function ()&lt;br /&gt;
    -- Initialize configuration&lt;br /&gt;
    if not JSTOR.config.loaded then&lt;br /&gt;
        local s = string.format( &amp;quot;Module:%s/%s&amp;quot;,&lt;br /&gt;
                                 JSTOR.suite, JSTOR.setup )&lt;br /&gt;
        local lucky, json&lt;br /&gt;
        JSTOR.config.loaded = true&lt;br /&gt;
        lucky, json = pcall( mw.loadJsonData, s )&lt;br /&gt;
        if type( json ) ~= &amp;quot;table&amp;quot;  and&lt;br /&gt;
           type( JSTOR.item ) == &amp;quot;number&amp;quot;  and&lt;br /&gt;
           JSTOR.item &amp;gt; 0 then&lt;br /&gt;
            s = string.format( &amp;quot;Q%d&amp;quot;, JSTOR.item )&lt;br /&gt;
            s = mw.wikibase.getSitelink( s )&lt;br /&gt;
            if type( s ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                s = string.format( &amp;quot;%s/%s&amp;quot;, s, JSTOR.setup )&lt;br /&gt;
                lucky, json = pcall( mw.loadJsonData, s )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if type( json ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            for k, v in pairs( json ) do&lt;br /&gt;
                if not JSTOR.config[ k ] then&lt;br /&gt;
                    JSTOR.config[ k ] = v&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end -- JSTOR.config.first()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSTOR.feasible = function ( article, area, auxilary )&lt;br /&gt;
    -- Check code, normalize&lt;br /&gt;
    --     article   -- string, with JSTOR ID&lt;br /&gt;
    --     area      -- string, with &amp;quot;stable&amp;quot;, &amp;quot;journals&amp;quot;, or false&lt;br /&gt;
    --     auxilary  -- URIutil library, or false&lt;br /&gt;
    -- Returns string, with improved ID, or false&lt;br /&gt;
    local r      = article&lt;br /&gt;
    local suite  = area or &amp;quot;stable&amp;quot;&lt;br /&gt;
    local legal, URIutil&lt;br /&gt;
    if suite == &amp;quot;stable&amp;quot; then&lt;br /&gt;
        if r:find( &amp;quot;/&amp;quot;, 1, true ) then&lt;br /&gt;
            URIutil = fetch( auxilary )&lt;br /&gt;
            if type( URIutil ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                legal = URIutil.isDOI( r )&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            legal = r:match( &amp;quot;^community%.%d+$&amp;quot; )  or&lt;br /&gt;
                    r:match( &amp;quot;^[ie]?[1-9]%d*$&amp;quot; )  or&lt;br /&gt;
                    r:match( &amp;quot;^j%.%w+%.?%d*$&amp;quot; )  or&lt;br /&gt;
                    r:match( &amp;quot;^resrep%d+$&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    elseif suite == &amp;quot;journals&amp;quot; then&lt;br /&gt;
        URIutil = fetch( auxilary )&lt;br /&gt;
        if type( URIutil ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
            legal = URIutil.isISSNvalid( r )&lt;br /&gt;
            r     = r:gsub( &amp;quot;-&amp;quot;, &amp;quot;&amp;quot; )&lt;br /&gt;
                     :gsub( &amp;quot;x&amp;quot;, &amp;quot;X&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not legal then&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- JSTOR.feasible()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
JSTOR.format = function ( article, area, appear, auxilary )&lt;br /&gt;
    -- Analyze code, create URL, format&lt;br /&gt;
    --     article   -- string, with JSTOR ID&lt;br /&gt;
    --     area      -- string, with &amp;quot;stable&amp;quot;, &amp;quot;journals&amp;quot;, or false&lt;br /&gt;
    --     appear    -- string, with link title, or false&lt;br /&gt;
    --     auxilary  -- URIutil library, or false&lt;br /&gt;
    -- Returns string, with external link or error message&lt;br /&gt;
    local r     = JSTOR.feasible( article, area, auxilary )&lt;br /&gt;
    local suite = area or &amp;quot;stable&amp;quot;&lt;br /&gt;
    if r then&lt;br /&gt;
        local show = appear&lt;br /&gt;
        if type( show ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
            show = mw.text.trim( show )&lt;br /&gt;
            if show == &amp;quot;&amp;quot;  or  show == &amp;quot;-&amp;quot; then&lt;br /&gt;
                show = false&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if not show then&lt;br /&gt;
            show = article&lt;br /&gt;
        end&lt;br /&gt;
        r = string.format( &amp;quot;[http://www.jstor.org/%s/%s %s]&amp;quot;,&lt;br /&gt;
                           suite, r, show )&lt;br /&gt;
        if not appear then&lt;br /&gt;
            JSTOR.config.first()&lt;br /&gt;
            if JSTOR.config.showArticle  and&lt;br /&gt;
               JSTOR.config.showArticle ~= &amp;quot;-&amp;quot; then&lt;br /&gt;
                r = string.format( &amp;quot;[[%s|JSTOR]]:%s&amp;quot;,&lt;br /&gt;
                                   JSTOR.config.showArticle, r )&lt;br /&gt;
            else&lt;br /&gt;
                r = &amp;quot;JSTOR:&amp;quot; .. r&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = string.format( &amp;quot;%s %s/&amp;#039;&amp;#039;%s&amp;#039;&amp;#039;&amp;quot;,&lt;br /&gt;
                           fault( &amp;quot;errInvalid&amp;quot; ),  suite,  article )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- JSTOR.format()&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;
    -- 2024-03-01&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;
        elseif link then&lt;br /&gt;
            r = false&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;
-- JSTOR&lt;br /&gt;
local p = { }&lt;br /&gt;
&lt;br /&gt;
p.main = function ( argsF, argsT )&lt;br /&gt;
    -- Invocation&lt;br /&gt;
    --     argsF  -- table, with #invoke parameters, or false&lt;br /&gt;
    --     argsT  -- table, with template parameters&lt;br /&gt;
    -- Returns appropriate string&lt;br /&gt;
    local r, show, stuff, suite&lt;br /&gt;
    JSTOR.config.first()&lt;br /&gt;
    if argsF then&lt;br /&gt;
        JSTOR.config.errCat     = argsF.errCat&lt;br /&gt;
        JSTOR.config.errClasses = argsF.errClasses&lt;br /&gt;
        JSTOR.config.errHide    = faculty( argsF.errHide )&lt;br /&gt;
        JSTOR.config.errNS      = argsF.errNS&lt;br /&gt;
        if argsF.showArticle ~= nil then&lt;br /&gt;
            if argsF.showArticle == &amp;quot;&amp;quot;  or&lt;br /&gt;
               argsF.showArticle == &amp;quot;-&amp;quot; then&lt;br /&gt;
                JSTOR.config.showArticle = false&lt;br /&gt;
            else&lt;br /&gt;
                JSTOR.config.showArticle = argsF.showArticle&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if type( argsT ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        local s, unknown&lt;br /&gt;
        r = { }&lt;br /&gt;
        for k, v in pairs( argsT ) do&lt;br /&gt;
            s = type( k )&lt;br /&gt;
            if s == &amp;quot;number&amp;quot; then&lt;br /&gt;
                if ( k == 1 ) then&lt;br /&gt;
                    stuff = mw.text.trim( v )&lt;br /&gt;
                    if ( stuff == &amp;quot;&amp;quot; ) then&lt;br /&gt;
                        stuff = false&lt;br /&gt;
                    end&lt;br /&gt;
                    k = false&lt;br /&gt;
                elseif ( k == 2 ) then&lt;br /&gt;
                    k = false&lt;br /&gt;
                else&lt;br /&gt;
                    k = tostring( k )&lt;br /&gt;
                end&lt;br /&gt;
            elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
                if argsT.show then&lt;br /&gt;
                    if ( argsT.show ~= &amp;quot;&amp;quot; ) then&lt;br /&gt;
                        show = argsT.show&lt;br /&gt;
                    end&lt;br /&gt;
                    k = false&lt;br /&gt;
                elseif argsT.suite then&lt;br /&gt;
                    if ( argsT.suite ~= &amp;quot;&amp;quot; ) then&lt;br /&gt;
                        suite = argsT.suite&lt;br /&gt;
                    end&lt;br /&gt;
                    k = false&lt;br /&gt;
                elseif argsT.demo  or  faculty( argsT.NoCat ) then&lt;br /&gt;
                    JSTOR.config.errCat  = false&lt;br /&gt;
                    JSTOR.config.errHide = false&lt;br /&gt;
                    k = false&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
            if k then&lt;br /&gt;
                if not unknown then&lt;br /&gt;
                    unknown = { }&lt;br /&gt;
                end&lt;br /&gt;
                table.insert( unknown, k )&lt;br /&gt;
            end&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        if unknown then&lt;br /&gt;
            r = string.format( &amp;quot;&amp;#039;&amp;lt;code&amp;gt;%s&amp;lt;/code&amp;gt;&amp;#039; in Template:JSTOR&amp;quot;,&lt;br /&gt;
                               table.concat( unknown, &amp;quot; &amp;quot; ) )&lt;br /&gt;
            r = fault( &amp;quot;errUnkown&amp;quot;, r )&lt;br /&gt;
        elseif not stuff then&lt;br /&gt;
            r = fault( &amp;quot;errMissing&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = false&lt;br /&gt;
    end&lt;br /&gt;
    if type( r ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
        r = JSTOR.format( stuff, suite, show )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.f = function ( frame )&lt;br /&gt;
    local lucky, r&lt;br /&gt;
    JSTOR.config.frame = frame&lt;br /&gt;
    lucky, r = pcall( p.main, frame.args, frame:getParent().args )&lt;br /&gt;
    if not lucky then&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;
                         :wikitext(  string.format( &amp;quot;%s * %s&amp;quot;,&lt;br /&gt;
                                                    frame:getTitle(),&lt;br /&gt;
                                                    r ) )&lt;br /&gt;
        r = tostring( e )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.f()&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.JSTOR = function ()&lt;br /&gt;
    return JSTOR&lt;br /&gt;
end -- p.JSTOR()&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    -- JSTOR&lt;/div&gt;</summary>
		<author><name>imported&gt;PerfektesChaos</name></author>
	</entry>
</feed>