<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.hv-her-wan.de/w/index.php?action=history&amp;feed=atom&amp;title=Modul%3ANeueArtikel</id>
	<title>Modul:NeueArtikel - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hv-her-wan.de/w/index.php?action=history&amp;feed=atom&amp;title=Modul%3ANeueArtikel"/>
	<link rel="alternate" type="text/html" href="https://wiki.hv-her-wan.de/w/index.php?title=Modul:NeueArtikel&amp;action=history"/>
	<updated>2026-05-21T07:17:05Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Hist. Verein Herne / Wanne-Eickel</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.hv-her-wan.de/w/index.php?title=Modul:NeueArtikel&amp;diff=80690&amp;oldid=prev</id>
		<title>Thorsten Schmidt: Die Seite wurde neu angelegt: „-- Modul:NeueArtikel -- Liefert für die Vorlage &quot;Hauptseite/Neue Artikel/Kachel&quot; das erste Bild -- einer Seite sowie einen kurzen Auszug aus dem Seitentext. -- -- Aufrufbeispiele aus Wikitext: --   {{#invoke:NeueArtikel|bildlink|seite=Beispielseite|breite=240}} --   {{#invoke:NeueArtikel|auszug |seite=Beispielseite|laenge=140}} -- -- Das Modul nutzt nur Standard-Scribunto-Funktionen (mw.title, mw.text, -- mw.ustring) und ist daher auf MediaWiki 1.43 mit…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.hv-her-wan.de/w/index.php?title=Modul:NeueArtikel&amp;diff=80690&amp;oldid=prev"/>
		<updated>2026-05-06T17:00:53Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „-- Modul:NeueArtikel -- Liefert für die Vorlage &amp;quot;Hauptseite/Neue Artikel/Kachel&amp;quot; das erste Bild -- einer Seite sowie einen kurzen Auszug aus dem Seitentext. -- -- Aufrufbeispiele aus Wikitext: --   {{#invoke:NeueArtikel|bildlink|seite=Beispielseite|breite=240}} --   {{#invoke:NeueArtikel|auszug |seite=Beispielseite|laenge=140}} -- -- Das Modul nutzt nur Standard-Scribunto-Funktionen (mw.title, mw.text, -- mw.ustring) und ist daher auf MediaWiki 1.43 mit…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Modul:NeueArtikel&lt;br /&gt;
-- Liefert für die Vorlage &amp;quot;Hauptseite/Neue Artikel/Kachel&amp;quot; das erste Bild&lt;br /&gt;
-- einer Seite sowie einen kurzen Auszug aus dem Seitentext.&lt;br /&gt;
--&lt;br /&gt;
-- Aufrufbeispiele aus Wikitext:&lt;br /&gt;
--   {{#invoke:NeueArtikel|bildlink|seite=Beispielseite|breite=240}}&lt;br /&gt;
--   {{#invoke:NeueArtikel|auszug |seite=Beispielseite|laenge=140}}&lt;br /&gt;
--&lt;br /&gt;
-- Das Modul nutzt nur Standard-Scribunto-Funktionen (mw.title, mw.text,&lt;br /&gt;
-- mw.ustring) und ist daher auf MediaWiki 1.43 mit Scribunto direkt&lt;br /&gt;
-- einsatzfähig. Es benötigt keine zusätzliche Erweiterung.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Konfiguration: Platzhalterbild, falls auf einer Seite kein Bild gefunden&lt;br /&gt;
-- wurde. Wird die Datei nicht gefunden, erzeugt MediaWiki einen roten&lt;br /&gt;
-- Datei-Link. Bitte ggf. anpassen.&lt;br /&gt;
local PLATZHALTER_BILD = &amp;quot;Vereinslogo.png&amp;quot;&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
-- Hilfsfunktionen&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Entfernt iterativ verschachtelte Vorlagenaufrufe {{ ... }}.&lt;br /&gt;
local function strip_templates(s)&lt;br /&gt;
    local prev&lt;br /&gt;
    repeat&lt;br /&gt;
        prev = s&lt;br /&gt;
        s = s:gsub(&amp;quot;{{[^{}]*}}&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    until s == prev&lt;br /&gt;
    return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Entfernt iterativ verschachtelte Datei-/Bild-Wikilinks.&lt;br /&gt;
local function strip_files(s)&lt;br /&gt;
    local prev&lt;br /&gt;
    repeat&lt;br /&gt;
        prev = s&lt;br /&gt;
        s = s:gsub(&amp;quot;%[%[%s*[Dd]atei%s*:[^%[%]]-%]%]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
        s = s:gsub(&amp;quot;%[%[%s*[Ff]ile%s*:[^%[%]]-%]%]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
        s = s:gsub(&amp;quot;%[%[%s*[Bb]ild%s*:[^%[%]]-%]%]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    until s == prev&lt;br /&gt;
    return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Sucht in einem Text das erste Datei-/File-/Bild-Wikilink und gibt den&lt;br /&gt;
-- Dateinamen ohne Präfix zurück.&lt;br /&gt;
local function find_first_image(content)&lt;br /&gt;
    if not content or content == &amp;quot;&amp;quot; then return nil end&lt;br /&gt;
    local patterns = {&lt;br /&gt;
        &amp;quot;%[%[%s*[Dd]atei%s*:%s*([^%|%]\n]+)&amp;quot;,&lt;br /&gt;
        &amp;quot;%[%[%s*[Ff]ile%s*:%s*([^%|%]\n]+)&amp;quot;,&lt;br /&gt;
        &amp;quot;%[%[%s*[Bb]ild%s*:%s*([^%|%]\n]+)&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
    local best_pos, best_name&lt;br /&gt;
    for _, pat in ipairs(patterns) do&lt;br /&gt;
        local s, _, name = content:find(pat)&lt;br /&gt;
        if s and (not best_pos or s &amp;lt; best_pos) then&lt;br /&gt;
            best_pos = s&lt;br /&gt;
            best_name = name&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if best_name then&lt;br /&gt;
        return mw.text.trim(best_name)&lt;br /&gt;
    end&lt;br /&gt;
    return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
-- Öffentliche Funktionen&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- {{#invoke:NeueArtikel|bildlink|seite=...|breite=240}}&lt;br /&gt;
function p.bildlink(frame)&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local seite = mw.text.trim(args.seite or args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local breite = tostring(args.breite or &amp;quot;240&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if seite == &amp;quot;&amp;quot; then return &amp;quot;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
    local title = mw.title.new(seite)&lt;br /&gt;
    local bild&lt;br /&gt;
    if title and title.exists then&lt;br /&gt;
        local content = title:getContent()&lt;br /&gt;
        bild = find_first_image(content)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not bild then&lt;br /&gt;
        bild = PLATZHALTER_BILD&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Sicheres Encoding des Linkziels für die Pipe&lt;br /&gt;
    local linkZiel = seite&lt;br /&gt;
    return string.format(&lt;br /&gt;
        &amp;quot;[[Datei:%s|%spx|link=%s|alt=%s]]&amp;quot;,&lt;br /&gt;
        bild, breite, linkZiel, linkZiel&lt;br /&gt;
    )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- {{#invoke:NeueArtikel|auszug|seite=...|laenge=140}}&lt;br /&gt;
function p.auszug(frame)&lt;br /&gt;
    local args = frame.args&lt;br /&gt;
    local seite = mw.text.trim(args.seite or args[1] or &amp;quot;&amp;quot;)&lt;br /&gt;
    local laenge = tonumber(args.laenge or &amp;quot;140&amp;quot;) or 140&lt;br /&gt;
&lt;br /&gt;
    if seite == &amp;quot;&amp;quot; then return &amp;quot;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
    local title = mw.title.new(seite)&lt;br /&gt;
    if not title or not title.exists then return &amp;quot;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
    local s = title:getContent() or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- HTML-Kommentare entfernen&lt;br /&gt;
    s = s:gsub(&amp;quot;&amp;lt;!%-%-.-%-%-&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    -- nowiki-, ref- und sonstige Tags entfernen&lt;br /&gt;
    s = s:gsub(&amp;quot;&amp;lt;nowiki&amp;gt;.-&amp;lt;/nowiki&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    s = s:gsub(&amp;quot;&amp;lt;ref[^&amp;gt;]*&amp;gt;.-&amp;lt;/ref&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    s = s:gsub(&amp;quot;&amp;lt;ref[^/&amp;gt;]*/&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    -- Tabellen entfernen&lt;br /&gt;
    s = s:gsub(&amp;quot;{|.-|}&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    -- Vorlagen entfernen&lt;br /&gt;
    s = strip_templates(s)&lt;br /&gt;
    -- Dateilinks entfernen&lt;br /&gt;
    s = strip_files(s)&lt;br /&gt;
    -- Überschriften entfernen&lt;br /&gt;
    s = s:gsub(&amp;quot;==+[^=\n]*==+&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    -- Kategorielinks entfernen&lt;br /&gt;
    s = s:gsub(&amp;quot;%[%[%s*[Kk]ategorie%s*:[^%]]+%]%]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    s = s:gsub(&amp;quot;%[%[%s*[Cc]ategory%s*:[^%]]+%]%]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    -- Verbleibende HTML-Tags entfernen&lt;br /&gt;
    s = s:gsub(&amp;quot;&amp;lt;[^&amp;gt;]+&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    -- Wikilinks reduzieren: [[Ziel|Anzeige]] -&amp;gt; Anzeige&lt;br /&gt;
    s = s:gsub(&amp;quot;%[%[([^%[%]%|]-)%|([^%[%]]-)%]%]&amp;quot;, &amp;quot;%2&amp;quot;)&lt;br /&gt;
    -- Wikilinks reduzieren: [[Ziel]] -&amp;gt; Ziel&lt;br /&gt;
    s = s:gsub(&amp;quot;%[%[([^%[%]]-)%]%]&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
    -- Externe Links: [http://... Anzeige] -&amp;gt; Anzeige&lt;br /&gt;
    s = s:gsub(&amp;quot;%[https?://[^%s%]]+%s+([^%]]+)%]&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
    s = s:gsub(&amp;quot;%[https?://[^%]]+%]&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    -- Fett/Kursiv&lt;br /&gt;
    s = s:gsub(&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    s = s:gsub(&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    s = s:gsub(&amp;quot;&amp;#039;&amp;#039;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- Erste nichtleere Zeile als Auszug&lt;br /&gt;
    local para&lt;br /&gt;
    for line in mw.text.gsplit(s, &amp;quot;\n&amp;quot;, true) do&lt;br /&gt;
        local t = mw.text.trim(line)&lt;br /&gt;
        if t ~= &amp;quot;&amp;quot; and not t:match(&amp;quot;^[#%*:;]&amp;quot;) then&lt;br /&gt;
            para = t&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    para = para or &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    -- Mehrfache Leerzeichen reduzieren&lt;br /&gt;
    para = para:gsub(&amp;quot;%s+&amp;quot;, &amp;quot; &amp;quot;)&lt;br /&gt;
    para = mw.text.trim(para)&lt;br /&gt;
&lt;br /&gt;
    if mw.ustring.len(para) &amp;gt; laenge then&lt;br /&gt;
        para = mw.ustring.sub(para, 1, laenge) .. &amp;quot;…&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return para&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Thorsten Schmidt</name></author>
	</entry>
</feed>