<?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%3AHilfe%3AVisualEditor</id>
	<title>Modul:Hilfe:VisualEditor - 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%3AHilfe%3AVisualEditor"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Hilfe:VisualEditor&amp;action=history"/>
	<updated>2026-06-01T14:26:15Z</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:Hilfe:VisualEditor&amp;diff=2926233&amp;oldid=prev</id>
		<title>imported&gt;PerfektesChaos: 2025-12-19</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Modul:Hilfe:VisualEditor&amp;diff=2926233&amp;oldid=prev"/>
		<updated>2025-12-19T17:46:44Z</updated>

		<summary type="html">&lt;p&gt;2025-12-19&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local HelpVisualEditor = { suite  = &amp;quot;HelpVisualEditor&amp;quot;,&lt;br /&gt;
                           serial = &amp;quot;2025-12-19&amp;quot;,&lt;br /&gt;
                           item   = 63383133 }&lt;br /&gt;
--[=[&lt;br /&gt;
Unterstützung für Vorlagen/Hilfeseiten Hilfe:VisualEditor/***&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local lucky, Data = pcall( mw.loadData,&lt;br /&gt;
                           &amp;quot;Module:Hilfe:VisualEditor/config&amp;quot; )&lt;br /&gt;
if type( Data ) ~= &amp;quot;table&amp;quot; then&lt;br /&gt;
    error( &amp;quot;[[Module:Hilfe:VisualEditor/config]] fehlt&amp;quot; )&lt;br /&gt;
end&lt;br /&gt;
local Config  = Data.config&lt;br /&gt;
local Widgets = { }&lt;br /&gt;
local Frame&lt;br /&gt;
local Title&lt;br /&gt;
local Tree&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function facet( activate )&lt;br /&gt;
    return activate:gsub( &amp;quot;%.svg$&amp;quot;, &amp;quot;-progressive.svg&amp;quot; )&lt;br /&gt;
end -- facet()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function factory( ancestor, array, all )&lt;br /&gt;
    -- Clone a table&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     ancestor  -- table, to be copied&lt;br /&gt;
    --     array     -- true, if sequence; number: copy first elements&lt;br /&gt;
    --     all       -- true, if deep elements to be copied also&lt;br /&gt;
    -- Returns:&lt;br /&gt;
    --     new table&lt;br /&gt;
    local r = { }&lt;br /&gt;
    if array then&lt;br /&gt;
        local n&lt;br /&gt;
        if type( array ) == &amp;quot;number&amp;quot; then&lt;br /&gt;
            n = array&lt;br /&gt;
        else&lt;br /&gt;
            n = table.maxn( ancestor )&lt;br /&gt;
            if n == 0 then&lt;br /&gt;
                for k, v in pairs( ancestor ) do&lt;br /&gt;
                    n = n + 1&lt;br /&gt;
                end -- for k, v&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        for i = 1, n do&lt;br /&gt;
            table.insert( r,  ancestor[ i ] )&lt;br /&gt;
        end -- for i&lt;br /&gt;
        if all then&lt;br /&gt;
            local e&lt;br /&gt;
            for i = 1, n do&lt;br /&gt;
                e = r[ i ]&lt;br /&gt;
                if type( e ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    r[ i ] = factory( e, false, true )&lt;br /&gt;
                end&lt;br /&gt;
            end -- for i&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        for k, v in pairs( ancestor ) do&lt;br /&gt;
            r[ k ] = v&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        if all then&lt;br /&gt;
            local e&lt;br /&gt;
            for k, v in pairs( r ) do&lt;br /&gt;
                e = r[ k ]&lt;br /&gt;
                if type( e ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                    r[ k ] = factory( e, false, true )&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
        end&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 fallback( ask )&lt;br /&gt;
    -- Create similar item&lt;br /&gt;
    --     ask  -- string, with ID&lt;br /&gt;
    -- Returns table&lt;br /&gt;
    local insertFew = 4&lt;br /&gt;
    local kurzSchrift = 4&lt;br /&gt;
    local r&lt;br /&gt;
    if ask:sub( 1, 10 ) == &amp;quot;CodeMirror&amp;quot;  and  #ask &amp;gt; 10 then&lt;br /&gt;
        r = { menu    = 3,&lt;br /&gt;
              show    = Tree.CodeMirror.show,&lt;br /&gt;
              slot    = Tree.CodeMirror.slot,&lt;br /&gt;
              icon    = Tree.CodeMirror.icon,&lt;br /&gt;
              start   = Tree.CodeMirror.start,&lt;br /&gt;
              lowered = false }&lt;br /&gt;
        if ask == &amp;quot;CodeMirrorAktiv&amp;quot; then&lt;br /&gt;
            r.icon = facet( r.icon )&lt;br /&gt;
        end&lt;br /&gt;
    elseif ask == &amp;quot;InsertFew&amp;quot; then&lt;br /&gt;
        r = { menu  = -2,&lt;br /&gt;
              show  = Tree.InsertAll.show,&lt;br /&gt;
              slot  = Tree.InsertAll.slot,&lt;br /&gt;
              icon  = Tree.InsertAll.icon,&lt;br /&gt;
              start = Tree.InsertAll.start,&lt;br /&gt;
              entries = factory( Tree.InsertAll.entries, insertFew ) }&lt;br /&gt;
        r.entries[ insertFew ] = &amp;quot;Mehr&amp;quot;&lt;br /&gt;
    elseif ask:sub( 1, 7 ) == &amp;quot;Schrift&amp;quot; then&lt;br /&gt;
        local entries, k&lt;br /&gt;
        if ask:sub( 1, 11 ) == &amp;quot;SchriftKurz&amp;quot; then&lt;br /&gt;
            k = kurzSchrift&lt;br /&gt;
        else&lt;br /&gt;
            k = true&lt;br /&gt;
        end&lt;br /&gt;
        entries = factory( Tree.SchriftAlle.entries, k )&lt;br /&gt;
        r = { menu    = -2,&lt;br /&gt;
              icon    = Tree.SchriftAlle.icon,&lt;br /&gt;
              slot    = Tree.SchriftAlle.slot,&lt;br /&gt;
              entries = entries }&lt;br /&gt;
        if k == kurzSchrift then&lt;br /&gt;
            r.entries[ kurzSchrift ] = &amp;quot;Mehr&amp;quot;&lt;br /&gt;
            if ask == &amp;quot;SchriftKurz&amp;quot; then&lt;br /&gt;
                r.entries[ kurzSchrift - 1 ] = &amp;quot;Gestaltlos&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                r.entries[ kurzSchrift - 1 ] = &amp;quot;GestaltlosNix&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            r.entries[ #r.entries - 1 ] = &amp;quot;GestaltlosNix&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
    elseif ask:sub( 1, 14 ) == &amp;quot;Seitenoptionen&amp;quot;  and  #ask &amp;gt; 14 then&lt;br /&gt;
        local sub&lt;br /&gt;
        r = factory( Tree.Seitenoptionen, false, true )&lt;br /&gt;
        for i = 2, #r.entries do&lt;br /&gt;
            sub = r.entries[ i ]&lt;br /&gt;
            if i &amp;lt;= 5 then&lt;br /&gt;
                Tree[ sub ] = factory( Tree[ sub ] )&lt;br /&gt;
                Tree[ sub ].lowered = true&lt;br /&gt;
            elseif sub == &amp;quot;CodeMirror&amp;quot; then&lt;br /&gt;
                if ask:sub( 20 ) == &amp;quot;&amp;quot; then&lt;br /&gt;
                    r.entries[ i ] = &amp;quot;CodeMirrorInaktiv&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                    r.entries[ i ] = sub .. ask:sub( 20 )&lt;br /&gt;
                end&lt;br /&gt;
                break    -- for i&lt;br /&gt;
            end&lt;br /&gt;
        end -- for i&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fallback()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fault( a )&lt;br /&gt;
    -- Formatiere Fehler mit class=error&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     a  -- string, mit Fehlermeldung&lt;br /&gt;
    -- Rückgabewert:&lt;br /&gt;
    --     string, mit HTML-Element&lt;br /&gt;
    local e = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
    e:addClass( &amp;quot;error&amp;quot; )&lt;br /&gt;
     :wikitext( &amp;quot;FEHLER * &amp;quot; .. a )&lt;br /&gt;
    return tostring( e )&lt;br /&gt;
end -- fault()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function fetch( access )&lt;br /&gt;
    -- Retrieve static tree entry; else on the fly&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     access  -- string, mit ID&lt;br /&gt;
    -- Rückgabewert:&lt;br /&gt;
    --     tree entry&lt;br /&gt;
    local r = Tree[ access ]&lt;br /&gt;
    if not r then&lt;br /&gt;
        r = fallback( access )&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;
local function fill( apply, assume )&lt;br /&gt;
    -- Beschriftung ermitteln&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     apply   -- table&lt;br /&gt;
    --     assume  -- string, mit Rückfallwert&lt;br /&gt;
    -- Rückgabewert:&lt;br /&gt;
    --     string&lt;br /&gt;
    local r&lt;br /&gt;
    if apply.slot then&lt;br /&gt;
        r = mw.message.new( apply.slot:gsub( &amp;quot;^@&amp;quot;, &amp;quot;visualeditor-&amp;quot; ) )&lt;br /&gt;
        if not r:exists() then&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if r then&lt;br /&gt;
        r = r:plain()&lt;br /&gt;
        if r:find( &amp;quot;{{&amp;quot;, 1, true ) then&lt;br /&gt;
            r = Frame:preprocess( r )&lt;br /&gt;
        end&lt;br /&gt;
    elseif apply.show then&lt;br /&gt;
        r = apply.show&lt;br /&gt;
    else&lt;br /&gt;
        r = assume&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- fill()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function flat( a )&lt;br /&gt;
    -- Eingabewert trimmen; leeren Wert ignorieren&lt;br /&gt;
    -- Parameter:&lt;br /&gt;
    --     a  -- string oder nil&lt;br /&gt;
    -- Rückgabewert:&lt;br /&gt;
    --     string oder nil oder false&lt;br /&gt;
    local r&lt;br /&gt;
    if a then&lt;br /&gt;
        r = mw.text.trim( a )&lt;br /&gt;
        if r == &amp;quot;&amp;quot; then&lt;br /&gt;
            r = false&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- flat()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Widgets.dropdown2 = function ( all, accessed, aim, above, active, align )&lt;br /&gt;
    local r&lt;br /&gt;
    if all.entries then&lt;br /&gt;
        local cssT  = { &amp;quot;background-color:#FFFFFF&amp;quot;,&lt;br /&gt;
                        &amp;quot;border-collapse:collapse&amp;quot;,&lt;br /&gt;
                        &amp;quot;margin-left:.5em&amp;quot;,&lt;br /&gt;
                        &amp;quot;margin-bottom:.5em&amp;quot; }&lt;br /&gt;
        local high  = { }&lt;br /&gt;
        local low   = ( all.menu &amp;lt; 0 )&lt;br /&gt;
        local e, entry, launch, show, short, sign, space, strong, style&lt;br /&gt;
        if aim then&lt;br /&gt;
            e = mw.text.split( aim, &amp;quot;+&amp;quot;, true )&lt;br /&gt;
            for k, v in pairs( e ) do&lt;br /&gt;
                high[ v ] = true&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
        end&lt;br /&gt;
        if above then&lt;br /&gt;
            if type( above ) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                table.insert( cssT,  &amp;quot;min-width:&amp;quot; .. above )&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            table.insert( cssT, &amp;quot;width:100%&amp;quot; )&lt;br /&gt;
        end&lt;br /&gt;
        style = table.concat( cssT, &amp;quot;;&amp;quot; )&lt;br /&gt;
        r     = &amp;quot;\n{|&amp;quot;&lt;br /&gt;
        if above then&lt;br /&gt;
            local pars  = { background = &amp;quot;#&amp;quot; .. Config.bgMainSel,&lt;br /&gt;
                            div = true }&lt;br /&gt;
            local sep   = &amp;quot;style=&amp;#039;border%%s: #%s 1px solid;%%s&amp;#039;&amp;quot;&lt;br /&gt;
            sep   = string.format( sep, Config.borderDd )&lt;br /&gt;
            style = style .. &amp;quot;;box-shadow: 0 2px 2px 0 rgba(0,0,0,0.25)&amp;quot;&lt;br /&gt;
            r     = string.format( &amp;quot;%s %s\n|%s|%s&amp;quot;,&lt;br /&gt;
                                   r,&lt;br /&gt;
                                   string.format( sep, &amp;quot;&amp;quot;, style ),&lt;br /&gt;
                                   string.format( sep, &amp;quot;-bottom&amp;quot;, &amp;quot;&amp;quot; ),&lt;br /&gt;
                                   Widgets.toolItem( accessed, pars ) )&lt;br /&gt;
        else&lt;br /&gt;
          cssT  = { style,&lt;br /&gt;
                      &amp;quot;font-size:90%&amp;quot; }&lt;br /&gt;
            r = string.format( &amp;quot;%s style=&amp;#039;%s&amp;#039;&amp;quot;,&lt;br /&gt;
                               r,&lt;br /&gt;
                               table.concat( cssT, &amp;quot;;&amp;quot; ) )&lt;br /&gt;
        end&lt;br /&gt;
        space = false&lt;br /&gt;
        for k, v in pairs( all.entries ) do&lt;br /&gt;
            entry  = fetch( v )&lt;br /&gt;
            launch = high[ v ]&lt;br /&gt;
            if not entry then&lt;br /&gt;
                return fault( &amp;quot;dropdown: Bad entry &amp;quot; .. v )&lt;br /&gt;
            end&lt;br /&gt;
            if launch then&lt;br /&gt;
                if low  or  Config.itemSel == 1 then&lt;br /&gt;
                    strong = &amp;quot;background-color: #&amp;quot; .. Config.bgItemSel&lt;br /&gt;
                else&lt;br /&gt;
                    strong = &amp;quot;border: 2px solid #&amp;quot; .. Config.borderSel&lt;br /&gt;
                end&lt;br /&gt;
                high[ v ] = false&lt;br /&gt;
            elseif entry.lowered then&lt;br /&gt;
                strong = &amp;quot;opacity:0.5&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                strong = &amp;quot;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            if strong ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                strong = string.format( &amp;quot;style=&amp;#039;%s&amp;#039;|&amp;quot;, strong )&lt;br /&gt;
            end&lt;br /&gt;
            if entry.icon then&lt;br /&gt;
                sign = entry.icon&lt;br /&gt;
                if launch  and  not entry.lock   and&lt;br /&gt;
                   sign:match( &amp;quot;^OOjs UI .+%.svg$&amp;quot; ) then&lt;br /&gt;
                    sign = facet( sign )&lt;br /&gt;
                end&lt;br /&gt;
            elseif launch and all.leader then&lt;br /&gt;
                sign = &amp;quot;OOjs UI icon check-progressive.svg&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                sign = false&lt;br /&gt;
            end&lt;br /&gt;
            if sign then&lt;br /&gt;
                sign = string.format( &amp;quot;[[File:%s|%dpx|alt=|icon]]&amp;quot;,&lt;br /&gt;
                                      sign,&lt;br /&gt;
                                      entry.px or Config.icon )&lt;br /&gt;
            else&lt;br /&gt;
                if not space then&lt;br /&gt;
                    space = string.format( &amp;quot;%dpx&amp;quot;, Config.icon )&lt;br /&gt;
                    e     = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                    e:css( { [&amp;quot;display&amp;quot;] = &amp;quot;inline-block&amp;quot;,&lt;br /&gt;
                             [&amp;quot;width&amp;quot;]   = space } )&lt;br /&gt;
                     :wikitext( &amp;quot;&amp;amp;#160;&amp;quot; )&lt;br /&gt;
                    space = tostring( e )&lt;br /&gt;
                end&lt;br /&gt;
                sign = space&lt;br /&gt;
            end&lt;br /&gt;
            show = fill( entry, v )&lt;br /&gt;
            if active and entry.smart then&lt;br /&gt;
                local s&lt;br /&gt;
                e = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                if launch then&lt;br /&gt;
                    s = &amp;quot;#3366CC&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                    s = &amp;quot;#444444&amp;quot;&lt;br /&gt;
                end&lt;br /&gt;
                e:css( &amp;quot;color&amp;quot;, s )&lt;br /&gt;
                 :wikitext( show )&lt;br /&gt;
                show = string.format( &amp;quot;[[#%s|%s]]&amp;quot;,&lt;br /&gt;
                                      entry.smart,&lt;br /&gt;
                                      tostring( e ) )&lt;br /&gt;
                launch = false&lt;br /&gt;
            end&lt;br /&gt;
            if entry.style or launch then&lt;br /&gt;
                e = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                if entry.style then&lt;br /&gt;
                    e:cssText( entry.style )&lt;br /&gt;
                end&lt;br /&gt;
                if launch then&lt;br /&gt;
                    e:css( &amp;quot;color&amp;quot;, &amp;quot;#3366CC&amp;quot; )&lt;br /&gt;
                end&lt;br /&gt;
                e:wikitext( show )&lt;br /&gt;
                show = tostring( e )&lt;br /&gt;
            end&lt;br /&gt;
            e = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
            e:css( { [&amp;quot;float&amp;quot;]         = &amp;quot;left&amp;quot;,&lt;br /&gt;
                     [&amp;quot;padding-right&amp;quot;] = &amp;quot;3px&amp;quot;,&lt;br /&gt;
                     [&amp;quot;white-space&amp;quot;]   = &amp;quot;pre&amp;quot; } )&lt;br /&gt;
             :wikitext(  string.format( &amp;quot;%s %s&amp;quot;, sign, show )  )&lt;br /&gt;
            show = tostring( e )&lt;br /&gt;
            if entry.shortcut then&lt;br /&gt;
                if not Title then&lt;br /&gt;
                    Title = mw.title.getCurrentTitle()&lt;br /&gt;
                end&lt;br /&gt;
                if Title.text == Config.single then&lt;br /&gt;
                    short = &amp;quot;#VEshortcuts&amp;quot;&lt;br /&gt;
                else&lt;br /&gt;
                    short = string.format( &amp;quot;%s:%s&amp;quot;,&lt;br /&gt;
                                           mw.site.namespaces[12].name,&lt;br /&gt;
                                           Config.shortcut )&lt;br /&gt;
                end&lt;br /&gt;
                e = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
                e:css( { [&amp;quot;float&amp;quot;]        = &amp;quot;right&amp;quot;,&lt;br /&gt;
                         [&amp;quot;opacity&amp;quot;]      = &amp;quot;0.5&amp;quot;,&lt;br /&gt;
                         [&amp;quot;margin-left&amp;quot;]  = &amp;quot;0.8em&amp;quot;,&lt;br /&gt;
                         [&amp;quot;margin-right&amp;quot;] = &amp;quot;0.3em&amp;quot;,&lt;br /&gt;
                         [&amp;quot;white-space&amp;quot;]  = &amp;quot;nowrap&amp;quot; } )&lt;br /&gt;
                 :wikitext( string.format( &amp;quot;[[%s|%s]]&amp;quot;,&lt;br /&gt;
                                           short,&lt;br /&gt;
                                           entry.shortcut ) )&lt;br /&gt;
                short = tostring( e )&lt;br /&gt;
            elseif entry.iconRight then&lt;br /&gt;
                e = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
                e:css( { [&amp;quot;float&amp;quot;]        = &amp;quot;right&amp;quot;,&lt;br /&gt;
                         [&amp;quot;margin-left&amp;quot;]  = &amp;quot;0.8em&amp;quot;,&lt;br /&gt;
                         [&amp;quot;margin-right&amp;quot;] = &amp;quot;0.3em&amp;quot; } )&lt;br /&gt;
                 :wikitext( string.format( &amp;quot;[[File:%s|%dpx]]&amp;quot;,&lt;br /&gt;
                                           entry.iconRight,&lt;br /&gt;
                                           entry.pxR or Config.icon ) )&lt;br /&gt;
                short = tostring( e )&lt;br /&gt;
            else&lt;br /&gt;
                short = &amp;quot;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            r = string.format( &amp;quot;%s\n|-\n|%s %s %s&amp;quot;,&lt;br /&gt;
                               r, strong, show, short )&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
        r = r .. &amp;quot;\n|}&amp;quot;&lt;br /&gt;
        if aim then&lt;br /&gt;
            show = false&lt;br /&gt;
            for k, v in pairs( e ) do&lt;br /&gt;
                if high[ v ] then&lt;br /&gt;
                    if show then&lt;br /&gt;
                        show = string.format( &amp;quot;%s+%s&amp;quot;, show, k )&lt;br /&gt;
                    else&lt;br /&gt;
                        show = k&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end -- for k, v&lt;br /&gt;
            if show then&lt;br /&gt;
                r = r .. fault( &amp;quot;dropdown: Auswahl fehlt: &amp;quot; .. show )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = fault( &amp;quot;dropdown: Keine .entries&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Widgets.dropdown2()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Widgets.progressive = function ( about, adjust )&lt;br /&gt;
    local e    = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
    local size = &amp;quot;1em&amp;quot;&lt;br /&gt;
    local r&lt;br /&gt;
    if adjust.div  or  adjust.mini then&lt;br /&gt;
        size = &amp;quot;0.8em&amp;quot;&lt;br /&gt;
        e:css( { [&amp;quot;border-radius&amp;quot;] = &amp;quot;0&amp;quot;,&lt;br /&gt;
                 [&amp;quot;font-size&amp;quot;] = &amp;quot;75%&amp;quot; } )&lt;br /&gt;
    end&lt;br /&gt;
    e:addClass( &amp;quot;mw-ui-button mw-ui-progressive&amp;quot; )&lt;br /&gt;
     :css( { [&amp;quot;color&amp;quot;]       = &amp;quot;#FFFFFF&amp;quot;,&lt;br /&gt;
             [&amp;quot;line-height&amp;quot;] = size,&lt;br /&gt;
             [&amp;quot;min-width&amp;quot;]   = &amp;quot;none&amp;quot; } )&lt;br /&gt;
     :wikitext( about )&lt;br /&gt;
    r = tostring( e )&lt;br /&gt;
    if Config.tstyleUI then&lt;br /&gt;
        r = Frame:extensionTag( &amp;quot;templatestyles&amp;quot;,&lt;br /&gt;
                                nil,&lt;br /&gt;
                                { src = Config.tstyleUI } )&lt;br /&gt;
            .. r&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Widgets.progressive()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Widgets.toolbar = function ( ahead, after )&lt;br /&gt;
    local div      = { div = true,&lt;br /&gt;
                       [&amp;quot;line-height&amp;quot;] = &amp;quot;1em&amp;quot; }&lt;br /&gt;
    local element  = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
    local entries  = factory( Tree.TOOLBAR.entries, true )&lt;br /&gt;
    local n        = #entries&lt;br /&gt;
    local surround = &amp;quot;1px solid #&amp;quot; .. Config.borderBar&lt;br /&gt;
    local entry, s&lt;br /&gt;
    element:css( { [&amp;quot;background&amp;quot;] = &amp;quot;#FFFFFF&amp;quot;,&lt;br /&gt;
                   [&amp;quot;border&amp;quot;]     = surround,&lt;br /&gt;
                   [&amp;quot;float&amp;quot;]      = &amp;quot;left&amp;quot;,&lt;br /&gt;
                   [&amp;quot;margin&amp;quot;]     = &amp;quot;0&amp;quot; } )&lt;br /&gt;
    if ahead &amp;gt;= 1  and  after &amp;gt;= 1 then&lt;br /&gt;
        element:css( { [&amp;quot;width&amp;quot;] = &amp;quot;100%&amp;quot; } )&lt;br /&gt;
    end&lt;br /&gt;
    if after &amp;gt; 0 then&lt;br /&gt;
        local rechts = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
        rechts:css( { [&amp;quot;float&amp;quot;]       = &amp;quot;right&amp;quot;,&lt;br /&gt;
                      [&amp;quot;margin-left&amp;quot;] = &amp;quot;1em&amp;quot;,&lt;br /&gt;
                      [&amp;quot;white-space&amp;quot;] = &amp;quot;nowrap&amp;quot; } )&lt;br /&gt;
        if ahead &amp;gt; 0 then&lt;br /&gt;
            rechts:css( { [&amp;quot;border-left&amp;quot;] = surround } )&lt;br /&gt;
        end&lt;br /&gt;
        for i = 5, n do&lt;br /&gt;
            s     = entries[ i ]&lt;br /&gt;
            entry = Tree[ s ]&lt;br /&gt;
            if entry.rechts then&lt;br /&gt;
                rechts:wikitext( Widgets.toolItem( s, div ) )&lt;br /&gt;
            end&lt;br /&gt;
        end -- for i&lt;br /&gt;
        element:wikitext( tostring( rechts ) )&lt;br /&gt;
    end&lt;br /&gt;
    if ahead &amp;gt; 0 then&lt;br /&gt;
        for i = 1, n do&lt;br /&gt;
            s     = entries[ i ]&lt;br /&gt;
            entry = Tree[ s ]&lt;br /&gt;
            if entry.links  and  ahead &amp;gt;= entry.links then&lt;br /&gt;
                element:wikitext( Widgets.toolItem( s, div ) )&lt;br /&gt;
            end&lt;br /&gt;
        end -- for i&lt;br /&gt;
    end&lt;br /&gt;
    entry = mw.html.create( &amp;quot;div&amp;quot; )&lt;br /&gt;
    entry:css( { [&amp;quot;clear&amp;quot;] = &amp;quot;both&amp;quot; } )&lt;br /&gt;
    element:wikitext( tostring( entry ) )&lt;br /&gt;
    return tostring( element )&lt;br /&gt;
end -- Widgets.toolbar()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Widgets.toolItem = function ( access, adjust )&lt;br /&gt;
    local details = factory( fetch( access ),  false )&lt;br /&gt;
    local element, low, r, shift, show, smart&lt;br /&gt;
    if adjust then&lt;br /&gt;
        for k, v in pairs( adjust ) do&lt;br /&gt;
            details[ k ] = v&lt;br /&gt;
        end -- for k, v&lt;br /&gt;
    end&lt;br /&gt;
    low = ( details.border  or  details.menu ~= 2 )&lt;br /&gt;
          and   not details.div&lt;br /&gt;
    if low then&lt;br /&gt;
        element = &amp;quot;span&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        element = &amp;quot;div&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    element = mw.html.create( element )&lt;br /&gt;
    if details.border and details.icon then&lt;br /&gt;
        show = &amp;quot;&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        show = fill( details, access )&lt;br /&gt;
        if not low then&lt;br /&gt;
            local height = adjust[&amp;quot;line-height&amp;quot;]&lt;br /&gt;
            element:css( { [&amp;quot;float&amp;quot;] = &amp;quot;left&amp;quot; } )&lt;br /&gt;
            if height then&lt;br /&gt;
                element:css( { [&amp;quot;line-height&amp;quot;] = height } )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if not Title then&lt;br /&gt;
            Title = mw.title.getCurrentTitle()&lt;br /&gt;
        end&lt;br /&gt;
        if Title.text == Config.single then&lt;br /&gt;
            if details.swift then&lt;br /&gt;
                shift = &amp;quot;#&amp;quot; .. details.swift&lt;br /&gt;
            end&lt;br /&gt;
        elseif details.start then&lt;br /&gt;
            shift = string.format( &amp;quot;%s:%s&amp;quot;,&lt;br /&gt;
                                   mw.site.namespaces[12].name,&lt;br /&gt;
                                   details.start )&lt;br /&gt;
            if shift == Title.prefixedText then&lt;br /&gt;
                shift = false&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if details.progressive then&lt;br /&gt;
            show = Widgets.progressive( show, details )&lt;br /&gt;
        end&lt;br /&gt;
        if shift then&lt;br /&gt;
            show = string.format( &amp;quot;[[%s|%s]]&amp;quot;, shift, show )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if details.smart then&lt;br /&gt;
        smart = details.smart&lt;br /&gt;
        if details.shortcut then&lt;br /&gt;
            smart = string.format( &amp;quot;%s %s %s&amp;quot;,&lt;br /&gt;
                                   smart,&lt;br /&gt;
                                   mw.ustring.char( 8211 ),&lt;br /&gt;
                                   details.shortcut )&lt;br /&gt;
        end&lt;br /&gt;
    elseif details.shortcut then&lt;br /&gt;
        smart = details.shortcut&lt;br /&gt;
    end&lt;br /&gt;
    element:css( { [&amp;quot;white-space&amp;quot;] = &amp;quot;nowrap&amp;quot; } )&lt;br /&gt;
    if not details.progressive then&lt;br /&gt;
        local graphics = details.icon or details.before&lt;br /&gt;
        if details.border then&lt;br /&gt;
            element:css( { [&amp;quot;border&amp;quot;]  = &amp;quot;1px solid #&amp;quot;&lt;br /&gt;
                                         .. Config.borderBar,&lt;br /&gt;
                           [&amp;quot;padding&amp;quot;] = &amp;quot;2px 5px&amp;quot; } )&lt;br /&gt;
        else&lt;br /&gt;
            element:css( { [&amp;quot;padding&amp;quot;] = &amp;quot;0 5px&amp;quot; } )&lt;br /&gt;
            if type( details.borderR ) ~= &amp;quot;boolean&amp;quot; then&lt;br /&gt;
                details.borderR = true&lt;br /&gt;
            end&lt;br /&gt;
            if details.background then&lt;br /&gt;
                element:css( { [&amp;quot;background&amp;quot;] = details.background } )&lt;br /&gt;
            end&lt;br /&gt;
            if details.borderR then&lt;br /&gt;
                element:css( { [&amp;quot;border-right&amp;quot;] = &amp;quot;1px solid #&amp;quot;&lt;br /&gt;
                                                  .. Config.borderBar } )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        if graphics then&lt;br /&gt;
            local k, s&lt;br /&gt;
            if type( graphics ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                details.px  = graphics.px&lt;br /&gt;
                details.top = graphics.top&lt;br /&gt;
                graphics    = graphics.img  or  &amp;quot;example.svg&amp;quot;&lt;br /&gt;
            else&lt;br /&gt;
                show = &amp;quot;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            if type( details.px ) == &amp;quot;number&amp;quot; then&lt;br /&gt;
                k = details.px&lt;br /&gt;
            else&lt;br /&gt;
                k = Config.mainPX&lt;br /&gt;
            end&lt;br /&gt;
--          if details.align == &amp;quot;right&amp;quot; then&lt;br /&gt;
--              s = &amp;quot;|right&amp;quot;&lt;br /&gt;
--          end&lt;br /&gt;
            if details.top then&lt;br /&gt;
                s = &amp;quot;|top&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            show = string.format( &amp;quot;[[File:%s|%dpx%s|link=%s|alt=%s|%s]]%s&amp;quot;,&lt;br /&gt;
                                  graphics,&lt;br /&gt;
                                  k,&lt;br /&gt;
                                  s     or &amp;quot;&amp;quot;,&lt;br /&gt;
                                  shift or &amp;quot;&amp;quot;,&lt;br /&gt;
                                  smart or &amp;quot;&amp;quot;,&lt;br /&gt;
                                  smart or &amp;quot;icon&amp;quot;,&lt;br /&gt;
                                  show )&lt;br /&gt;
        end&lt;br /&gt;
        if details.div  and  not details.icon then&lt;br /&gt;
            element:css( { [&amp;quot;padding-bottom&amp;quot;] = &amp;quot;3px&amp;quot;,&lt;br /&gt;
                           [&amp;quot;padding-top&amp;quot;]    = &amp;quot;2px&amp;quot; } )&lt;br /&gt;
        end&lt;br /&gt;
        if details.entries  and  not details.less then&lt;br /&gt;
            s    = smart or &amp;quot;Dropdown-Menü&amp;quot;&lt;br /&gt;
            show = string.format( &amp;quot;%s [[File:%s|%dpx|link=|alt=%s|%s]]&amp;quot;,&lt;br /&gt;
                                  show,&lt;br /&gt;
                                  Config.openDown.src,&lt;br /&gt;
                                  Config.openDown.px,&lt;br /&gt;
                                  s,&lt;br /&gt;
                                  s )&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if smart then&lt;br /&gt;
        element:attr( &amp;quot;title&amp;quot;, smart )&lt;br /&gt;
    end&lt;br /&gt;
    element:wikitext( show )&lt;br /&gt;
    if details.name then&lt;br /&gt;
        show = fill( details, access )&lt;br /&gt;
        if math.abs( details.name ) &amp;gt; 1 then&lt;br /&gt;
            show = string.format( &amp;quot;&amp;#039;&amp;#039;&amp;#039;%s&amp;#039;&amp;#039;&amp;#039;&amp;quot;, show )&lt;br /&gt;
        end&lt;br /&gt;
        if details.name &amp;gt; 0 then&lt;br /&gt;
            r = string.format( &amp;quot;%s %s&amp;quot;, tostring( element ), show )&lt;br /&gt;
        else&lt;br /&gt;
            r = string.format( &amp;quot;%s %s&amp;quot;, show, tostring( element ) )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = tostring( element )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- Widgets.toolItem()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Tree = factory( Data.tree )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HelpVisualEditor.failsafe = function ( atleast )&lt;br /&gt;
    -- Retrieve versioning and check for compliance&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     atleast  -- string, with required version or &amp;quot;wikidata&amp;quot;,&lt;br /&gt;
    --                or false&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Returns  string with appropriate version, or false&lt;br /&gt;
    local since = atleast&lt;br /&gt;
    local r&lt;br /&gt;
    if since == &amp;quot;wikidata&amp;quot; then&lt;br /&gt;
        local item = HelpVisualEditor.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 entity = mw.wikibase.getEntity( string.format( &amp;quot;Q%d&amp;quot;,&lt;br /&gt;
                                                                 item ) )&lt;br /&gt;
            if type( entity ) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                local vsn = entity:formatPropertyValues( &amp;quot;P348&amp;quot; )&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;
                    r = vsn.value&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not r then&lt;br /&gt;
        if not since  or  since &amp;lt;= HelpVisualEditor.serial then&lt;br /&gt;
            r = HelpVisualEditor.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 -- HelpVisualEditor.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.dropdown = function ( frame )&lt;br /&gt;
    -- Tropfrunter&lt;br /&gt;
    local params = frame:getParent().args&lt;br /&gt;
    local scope  = flat( params[ 1 ] )&lt;br /&gt;
    local r&lt;br /&gt;
    if scope then&lt;br /&gt;
        local path = fetch( scope )&lt;br /&gt;
        if path then&lt;br /&gt;
            local leader = not faculty( params.nohead )&lt;br /&gt;
                           or  faculty( params.head )&lt;br /&gt;
            local link   = faculty( params.link )&lt;br /&gt;
            local widget = string.format( &amp;quot;dropdown%d&amp;quot;,&lt;br /&gt;
                                          math.abs( path.menu ) )&lt;br /&gt;
            Frame = frame&lt;br /&gt;
            if leader and params.head and&lt;br /&gt;
               params.head:match( &amp;quot;^%d+%l+$&amp;quot; ) then&lt;br /&gt;
                leader = params.head&lt;br /&gt;
            end&lt;br /&gt;
            r = Widgets[ widget ]( path,&lt;br /&gt;
                                   scope,&lt;br /&gt;
                                   flat( params[ 2 ] ),&lt;br /&gt;
                                   leader,&lt;br /&gt;
                                   link,&lt;br /&gt;
                                   flat( params.float ) )&lt;br /&gt;
        else&lt;br /&gt;
            r = fault( &amp;quot;dropdown * Menü unbekannt: &amp;quot; .. scope )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = fault( &amp;quot;dropdown: Kein Menü&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.dropdown()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.headline = function ( frame )&lt;br /&gt;
    -- Dynamische Überschrift&lt;br /&gt;
    local pages  = { }&lt;br /&gt;
    local params = frame:getParent().args&lt;br /&gt;
    local parts  = { }&lt;br /&gt;
    local e, m, s, show&lt;br /&gt;
    Title = mw.title.getCurrentTitle()&lt;br /&gt;
    for k, v in pairs( params ) 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;
                if v:match( &amp;quot;^%s*[1-6]%s*$&amp;quot; ) then&lt;br /&gt;
                    m = tonumber( v )&lt;br /&gt;
                else&lt;br /&gt;
                    show = fault( &amp;quot;h-Zahl ungültig:&amp;quot; .. v )&lt;br /&gt;
                end&lt;br /&gt;
            elseif k == 2  and not show then&lt;br /&gt;
                v = mw.text.trim( v )&lt;br /&gt;
                if v ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    show = v&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        elseif s == &amp;quot;string&amp;quot; then&lt;br /&gt;
            if k == &amp;quot;Gesamt&amp;quot; then&lt;br /&gt;
                k = Config.single&lt;br /&gt;
            end&lt;br /&gt;
            if k:find( &amp;quot;/&amp;quot;, 2, true ) then&lt;br /&gt;
                pages[ k:gsub( &amp;quot;^%./&amp;quot;, &amp;quot;&amp;quot; ) ] = v&lt;br /&gt;
            elseif k:sub( 1, 5 ) == &amp;quot;Anker&amp;quot; then&lt;br /&gt;
                if v ~= &amp;quot;&amp;quot; then&lt;br /&gt;
                    table.insert( parts, v )&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end -- for k, v&lt;br /&gt;
    if not m then&lt;br /&gt;
        m = 2&lt;br /&gt;
    end&lt;br /&gt;
    if not pages[ Config.single ] then&lt;br /&gt;
        pages[ Config.single ] = tostring( m + 1 )&lt;br /&gt;
    end&lt;br /&gt;
    if Title.namespace == 12 then&lt;br /&gt;
        s = pages[ Title.text ]&lt;br /&gt;
        if s then&lt;br /&gt;
            if s:match( &amp;quot;^[1-6]$&amp;quot; ) then&lt;br /&gt;
                m = tonumber( s )&lt;br /&gt;
            else&lt;br /&gt;
                show = fault( &amp;quot;h-Zahl ungültig:&amp;quot; .. s )&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if not show then&lt;br /&gt;
        show = fault( &amp;quot;Überschrift fehlt&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    e = mw.html.create( string.format( &amp;quot;h%d&amp;quot;,  m ) )&lt;br /&gt;
    m = table.maxn( parts )&lt;br /&gt;
    if m &amp;gt; 0 then&lt;br /&gt;
        e:attr( &amp;quot;id&amp;quot;,  mw.uri.anchorEncode( parts[ 1 ] ) )&lt;br /&gt;
        if m &amp;gt; 1 then&lt;br /&gt;
            local el&lt;br /&gt;
            for i = 2, m do&lt;br /&gt;
                el = mw.html.create( &amp;quot;span&amp;quot; )&lt;br /&gt;
                el:attr( &amp;quot;id&amp;quot;,  mw.uri.anchorEncode( parts[ i ] ) )&lt;br /&gt;
                show = tostring( el ) .. show&lt;br /&gt;
            end    -- for i&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    e:wikitext( show )&lt;br /&gt;
    return tostring( e )&lt;br /&gt;
end -- p.headline()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.icon = function ( frame )&lt;br /&gt;
    -- Icon per ID&lt;br /&gt;
    local params = frame:getParent().args&lt;br /&gt;
    local sketch = flat( params[ 1 ] )&lt;br /&gt;
    local r&lt;br /&gt;
    if sketch then&lt;br /&gt;
        local entry = Tree[ sketch ]&lt;br /&gt;
        if entry then&lt;br /&gt;
            r = entry.icon&lt;br /&gt;
            if r then&lt;br /&gt;
                local icon = flat( params[ 2 ] )&lt;br /&gt;
                if icon then&lt;br /&gt;
                    icon = tonumber( icon ) or 1&lt;br /&gt;
                else&lt;br /&gt;
                    icon = Config.icon&lt;br /&gt;
                end&lt;br /&gt;
                if icon &amp;gt; 7 then&lt;br /&gt;
                    r = string.format( &amp;quot;[[File:%s|%dpx|alt=|icon]]&amp;quot;,&lt;br /&gt;
                                       r, icon )&lt;br /&gt;
                else&lt;br /&gt;
                    r = fault( &amp;quot;icon * zu klein: &amp;quot; .. tostring( icon ) )&lt;br /&gt;
                end&lt;br /&gt;
            else&lt;br /&gt;
                r = fault( &amp;quot;icon * unbebildert: &amp;quot; .. sketch )&lt;br /&gt;
            end&lt;br /&gt;
        else&lt;br /&gt;
            r = fault( &amp;quot;icon * unbekannt: &amp;quot; .. sketch )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = fault( &amp;quot;icon: Keine ID&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.icon()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.progressive = function ( frame )&lt;br /&gt;
    -- Button auf blau&lt;br /&gt;
    local params  = frame:getParent().args&lt;br /&gt;
    Frame = frame&lt;br /&gt;
    return Widgets.progressive( params[ 1 ] or &amp;quot;??????????????&amp;quot;,&lt;br /&gt;
                                { mini = faculty( params.mini ) } )&lt;br /&gt;
end -- p.progressive()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.toolbar = function ( frame )&lt;br /&gt;
    -- Hauptmenü&lt;br /&gt;
    local params = frame:getParent().args&lt;br /&gt;
    local links  = flat( params.links )   or  1&lt;br /&gt;
    local rechts = flat( params.rechts )  or  1&lt;br /&gt;
    local r&lt;br /&gt;
    if links == &amp;quot;½&amp;quot; then&lt;br /&gt;
        links = 0.5&lt;br /&gt;
    elseif links == &amp;quot;¾&amp;quot; then&lt;br /&gt;
        links = 0.75&lt;br /&gt;
    elseif links == mw.ustring.char( 8540 ) then    --  3/8&lt;br /&gt;
        links = 0.375&lt;br /&gt;
    else&lt;br /&gt;
        links = tonumber( links )  or  0&lt;br /&gt;
    end&lt;br /&gt;
    rechts = tonumber( rechts )  or  0&lt;br /&gt;
    if links &amp;gt; 0  or  rechts &amp;gt; 0 then&lt;br /&gt;
        Frame = frame&lt;br /&gt;
        r     = Widgets.toolbar( links, rechts )&lt;br /&gt;
    else&lt;br /&gt;
        r = fault( &amp;quot;toolbar: links und rechts 0&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.toolbar()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.toolitem = function ( frame )&lt;br /&gt;
    -- Hauptmenü-Element&lt;br /&gt;
    local params = frame:getParent().args&lt;br /&gt;
    local scope  = flat( params[ 1 ] )&lt;br /&gt;
    local r&lt;br /&gt;
    if scope then&lt;br /&gt;
        local branch = Tree[ scope ]&lt;br /&gt;
        if branch then&lt;br /&gt;
            local name = params.name&lt;br /&gt;
            local pars = { }&lt;br /&gt;
            if branch.menu == 2 then&lt;br /&gt;
                pars.border = true&lt;br /&gt;
            else&lt;br /&gt;
                pars.borderR = false&lt;br /&gt;
            end&lt;br /&gt;
            if name  and  name:match( &amp;quot;^[-+]?[12]$&amp;quot; ) then&lt;br /&gt;
                pars.name = tonumber( name )&lt;br /&gt;
            end&lt;br /&gt;
            Frame = frame&lt;br /&gt;
            r     = Widgets.toolItem( scope, pars )&lt;br /&gt;
        else&lt;br /&gt;
            r = fault( &amp;quot;toolitem * Item unbekannt: &amp;quot; .. scope )&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        r = fault( &amp;quot;toolitem: Kein Item&amp;quot; )&lt;br /&gt;
    end&lt;br /&gt;
    return r&lt;br /&gt;
end -- p.toolitem()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.failsafe = function ( frame )&lt;br /&gt;
    -- Check or retrieve version information&lt;br /&gt;
    -- Precondition:&lt;br /&gt;
    --     frame  -- object; #invoke environment&lt;br /&gt;
    -- Postcondition:&lt;br /&gt;
    --     Return string with error message or &amp;quot;&amp;quot;&lt;br /&gt;
    -- Uses:&lt;br /&gt;
    --     HelpVisualEditor.failsafe()&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 HelpVisualEditor.failsafe( since )  or  &amp;quot;&amp;quot;&lt;br /&gt;
end -- p.failsafe()&lt;br /&gt;
&lt;br /&gt;
p.HelpVisualEditor = function ()&lt;br /&gt;
    -- Module interface&lt;br /&gt;
    return HelpVisualEditor&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>