User:Lily/test

    From TestWiki

    Including html via Lua is not working, the html tags are masked by the wikitext parser.

    Lilytest html

    <a id="testdiv" href="https://publictestwiki.com" target="_blank">Link Testtext</a>

    Lilytest htmlx

    <a id="testdiv" href="https://publictestwiki.com" target="_blank">Link Testtext</a>

    Lilytest simple

    <a href="https://publictestwiki.com" target="_blank">Link Testtext</a>

    Module

    Module Lilytest

    local p = {}
    local t = require('Module:Arguments')
    --<strong class="error"><span class="scribunto-error" id="mw-scribunto-error-0">Script error: The function &quot;xxx&quot; does not exist.</span></strong>
    
    function p.urltest(frame)
    	--<strong class="error"><span class="scribunto-error" id="mw-scribunto-error-1">Lua error in Module:Lilytest at line 150: attempt to index local 'seite' (a nil value).</span></strong>
    	local was = frame.args.seite or frame:getParent().args.seite or 'Lua'  -- Seitentitel
    	local ns  = frame.args.ns or frame:getParent().args.ns or ''           -- Namensraum
    	local namesp = trim(ns) or 'Artikel'
    	local seite = mw.title.new(was, ns)
    	local myserver = mw.site.server 
    	local mypath   = mw.site.scriptPath
    	local myuri = mw.uri.fullUrl( seite.text )
    	local myurl = myuri.protocol .. myuri.host .. myuri.path .. ' tostring ' .. tostring(myuri)
    	local myns = seite.namespace
    	if myns == 0 then return 'im Artkelnamensraum'
    		else return 'nicht im AR ' .. myns .. ' *** ' .. ns
    	end
    	
    	if 1 then
    		return '\nserver: ' .. myserver .. '\nPfad: ' .. mypath .. '\nfullurl: ' .. myurl
    	end
    	
    	local _ = seite.id
    	if _ == 0 then return 'Seite ' .. was .. ' existiert nicht im Namensraum ' .. namesp end
    	namesp = seite.nsText
    	local fulln = seite.prefixedText 
    	--return 'Die Seite ' .. fulln .. ' hat die ID ' ..  _
    end
    
    function p.dpl(frame)
    	-- https://www.mediawiki.org/wiki/Extension:DynamicPageList_(Wikimedia)
    	-- wertet die Erweiterung '"`UNIQ--dynamicpagelist-00000000-QINU`"'  aus
    	-- 
    	local a = frame.args              -- direkt per #invoke: übergeben
    	if empty(a) then a = frame:getParent().args or { } end
    	
    	local ns = mw.title.getCurrentTitle().namespace
    	--if ns ~= 0 then return '' end -- nur im Artikelnamensraum
    	
    	local taga = ''"`UNIQ--dynamicpagelist-00000001-QINU`"'' -- muss anders erfolgen, da andere Logik
    	-- Parameter, die mit c beginnen: category
    	-- Patameter, die mit n beginnen: notcategory
    	-- alle anderen Parameter wie gewohnt
    	local parm, fletter, ausgabe, tag = '', '', '', ''
    
    	for k, v in pairs(a) do                         -- alle Parameter werden gesammelt und in die tagparms Tabelle übergeben
    		parm = trim(v)
    		fletter  = parm:sub(1,1):lower()  -- Anfangsbuchstaben
    		ausgabe = ausgabe .. '<br>index: ' .. k .. ' inhalt: ' .. fletter    -- für Testzwecke
    		if fletter == 'c' then     -- Kategorie
    			tag = tag .. '\ncategory = ' .. parm
    		elseif fletter == 'n' then -- Not Kategorie
    			tag = tag .. '\nnotcategory = ' .. parm
    		else -- anderer Parameter
    			tag = tag .. '\n' .. k .. ' = ' .. parm
    		end
    	end
    
    	--ausgabe = 'Parameterliste: ' .. table.concat(tagparms, ", ")
    	return tag -- frame:extensionTag { name = tag, content = content, args = tagparms }
    end
    
    function p.monat(frame)
    	local a = frame.args              -- direkt per #invoke: übergeben
    	local b = frame:getParent().args  -- an die Vorlage übergebene Parameter
    	local myname = mw.title.getCurrentTitle().text:lower()
    	local moname = { 'Jänner', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' }
    	local monat = ''
    	local jahr = string.match(myname, ('%d%d%d%d'))
    	if jahr == '' then return 'kein Jahr gefunden in ' .. myname end -- kein Jahr gefunden
    	for i = 1, 12 do
    		monat = moname[i]
    		if string.find(myname, monat:lower()) then
    			--break
    			return '[[Category:' .. jahr .. '|-' .. string.format("%02d", i) .. ']]'
    		end
    	end
    	return ''
    end
    
    function p.nsliste(frame)
    	--<strong class="error"><span class="scribunto-error" id="mw-scribunto-error-2">Lua error: too many expensive function calls.</span></strong>
    	--erzeugt eine Tabelle mit Seitennummer und Namen in einem Namensraum
    	--sehr teuer in der Ausführung, daher werden nur 100 Listeneinträge
    	--inzwischen habe ich die Zahl der zulässigen Aufrufe in der LocalSettings.php auf 20000 erhöht, also praktisch unlimitiert
    	--Parameter: ab/abwo, Zahl ab der gestartet wird
    	local a = frame.args              -- direkt per #invoke: übergeben
    	if empty(a) then a = mw.getCurrentFrame().args end  -- an die Vorlage übergebene Parameter	
    
    	local _ = ''
    	local seite, sname, ns, nstitel
    	
    	local abwo   = tonumber(a.ab or a.abwo) or 1
    	local bishin = tonumber(a.bis or a.bishin) or 100
    	local myns   = string.lower(trim(a.ns) or '')
    	local __ = '\nmyns: ' .. myns
    	
    	for i = abwo, bishin do
    		seite = mw.title.new(i)
    		
    		if seite then
    			nstitel = string.lower(seite.nsText)
    			ns      = tostring(seite.namespace)
    			if myns == nstitel or myns == ns then
    				_ = _ .. '<tr><td>' .. i .. '</td><td>[[:' .. seite.prefixedText .. '|' .. seite.text .. ']]</td></tr>\n'
    			end
    			--__ = __ .. '\nns: ' .. ns .. ' nstitel: ' .. nstitel
    		end
    	end
    	_ = '<table class="cute"><tr><th>ID</th><th>Name</th></tr>' .. _ .. '</table>'
    	return _ --.. __
    end
    
    function p.nrliste(frame)
    	--<table class="cute"><tr><th>ID</th><th>Name</th><th>Namensraum</th></tr><tr><td>1</td><td>[[:Main Page|Main Page]]</td><td>Artikel</td></tr>
    <tr><td>2</td><td>[[:TestWiki:Main policy|Main policy]]</td><td>TestWiki</td></tr>
    <tr><td>3</td><td>[[:TestWiki:Administrators|Administrators]]</td><td>TestWiki</td></tr>
    <tr><td>4</td><td>[[:TestWiki:Main Policy|Main Policy]]</td><td>TestWiki</td></tr>
    <tr><td>5</td><td>[[:TestWiki:Bureaucrats|Bureaucrats]]</td><td>TestWiki</td></tr>
    <tr><td>6</td><td>[[:TestWiki:Request permissions|Request permissions]]</td><td>TestWiki</td></tr>
    <tr><td>7</td><td>[[:Template:Inputbox|Inputbox]]</td><td>Template</td></tr>
    <tr><td>8</td><td>[[:Template:New RfP/subst|New RfP/subst]]</td><td>Template</td></tr>
    <tr><td>9</td><td>[[:Template:New RfP/core|New RfP/core]]</td><td>Template</td></tr>
    <tr><td>10</td><td>[[:MediaWiki:Sidebar|Sidebar]]</td><td>MediaWiki</td></tr>
    <tr><td>11</td><td>[[:Template:Request instructions|Request instructions]]</td><td>Template</td></tr>
    <tr><td>12</td><td>[[:Template:User|User]]</td><td>Template</td></tr>
    <tr><td>13</td><td>[[:Template:User-multi/template|User-multi/template]]</td><td>Template</td></tr>
    <tr><td>15</td><td>[[:Template:Template other|Template other]]</td><td>Template</td></tr>
    <tr><td>16</td><td>[[:Template:Documentation/start box2|Documentation/start box2]]</td><td>Template</td></tr>
    <tr><td>17</td><td>[[:Template:Pp-template|Pp-template]]</td><td>Template</td></tr>
    <tr><td>18</td><td>[[:Template:Documentation/end box2|Documentation/end box2]]</td><td>Template</td></tr>
    <tr><td>19</td><td>[[:Template:Documentation/end box|Documentation/end box]]</td><td>Template</td></tr>
    <tr><td>20</td><td>[[:Template:Fmbox|Fmbox]]</td><td>Template</td></tr>
    <tr><td>21</td><td>[[:TestWiki:Bots|Bots]]</td><td>TestWiki</td></tr>
    <tr><td>22</td><td>[[:Category:Non-test pages|Non-test pages]]</td><td>Category</td></tr>
    <tr><td>23</td><td>[[:Template:New RfP/preload|New RfP/preload]]</td><td>Template</td></tr>
    <tr><td>24</td><td>[[:User:Example|Example]]</td><td>User</td></tr>
    <tr><td>25</td><td>[[:User:Example2|Example2]]</td><td>User</td></tr>
    <tr><td>26</td><td>[[:TestWiki:Community portal|Community portal]]</td><td>TestWiki</td></tr>
    <tr><td>27</td><td>[[:MediaWiki:Deletereason-dropdown|Deletereason-dropdown]]</td><td>MediaWiki</td></tr>
    <tr><td>28</td><td>[[:MediaWiki:Revdelete-reason-dropdown|Revdelete-reason-dropdown]]</td><td>MediaWiki</td></tr>
    <tr><td>29</td><td>[[:User talk:NDKilla|NDKilla]]</td><td>User_talk</td></tr>
    <tr><td>30</td><td>[[:User:NDKilla|NDKilla]]</td><td>User</td></tr>
    <tr><td>31</td><td>[[:TestWiki talk:Request permissions/Archive 1|Request permissions/Archive 1]]</td><td>TestWiki_talk</td></tr>
    <tr><td>32</td><td>[[:Template:Discussion top|Discussion top]]</td><td>Template</td></tr>
    <tr><td>33</td><td>[[:Template:Discussion bottom|Discussion bottom]]</td><td>Template</td></tr>
    <tr><td>34</td><td>[[:Category talk:Non-test pages|Non-test pages]]</td><td>Category_talk</td></tr>
    <tr><td>35</td><td>[[:MediaWiki:Gadget-HotCat.js|Gadget-HotCat.js]]</td><td>MediaWiki</td></tr>
    <tr><td>36</td><td>[[:TestWiki:Extensions/Gadgets|Extensions/Gadgets]]</td><td>TestWiki</td></tr>
    <tr><td>37</td><td>[[:User:Revi/common.css|Revi/common.css]]</td><td>User</td></tr>
    <tr><td>38</td><td>[[:MediaWiki:Group-consul|Group-consul]]</td><td>MediaWiki</td></tr>
    <tr><td>39</td><td>[[:User talk:Revi|Revi]]</td><td>User_talk</td></tr>
    <tr><td>40</td><td>[[:User:Revi|Revi]]</td><td>User</td></tr>
    <tr><td>41</td><td>[[:Category:Ko|Ko]]</td><td>Category</td></tr>
    <tr><td>42</td><td>[[:Category:Ko-N|Ko-N]]</td><td>Category</td></tr>
    <tr><td>43</td><td>[[:Category:En|En]]</td><td>Category</td></tr>
    <tr><td>44</td><td>[[:Category:En-3|En-3]]</td><td>Category</td></tr>
    <tr><td>45</td><td>[[:User talk:BanTJ|BanTJ]]</td><td>User_talk</td></tr>
    <tr><td>47</td><td>[[:User talk:Example|Example]]</td><td>User_talk</td></tr>
    <tr><td>48</td><td>[[:TestWiki:Consuls|Consuls]]</td><td>TestWiki</td></tr>
    <tr><td>49</td><td>[[:Template:Notdone|Notdone]]</td><td>Template</td></tr>
    <tr><td>50</td><td>[[:User:NDKilla/sigsub|NDKilla/sigsub]]</td><td>User</td></tr>
    <tr><td>51</td><td>[[:User:NDKilla/sig|NDKilla/sig]]</td><td>User</td></tr>
    <tr><td>52</td><td>[[:User:54nd60x/sandbox|54nd60x/sandbox]]</td><td>User</td></tr>
    <tr><td>53</td><td>[[:User talk:TheTVFan|TheTVFan]]</td><td>User_talk</td></tr>
    <tr><td>54</td><td>[[:IRC|IRC]]</td><td>Artikel</td></tr>
    <tr><td>55</td><td>[[:User:Reception123/MP|Reception123/MP]]</td><td>User</td></tr>
    <tr><td>56</td><td>[[:User talk:Reception123|Reception123]]</td><td>User_talk</td></tr>
    <tr><td>57</td><td>[[:Template:Tick|Tick]]</td><td>Template</td></tr>
    <tr><td>58</td><td>[[:Template:Done|Done]]</td><td>Template</td></tr>
    <tr><td>59</td><td>[[:MediaWiki:Gadget-section-general-gadgets|Gadget-section-general-gadgets]]</td><td>MediaWiki</td></tr>
    <tr><td>60</td><td>[[:MediaWiki:Gadget-HotCat|Gadget-HotCat]]</td><td>MediaWiki</td></tr>
    <tr><td>62</td><td>[[:User:Reception123|Reception123]]</td><td>User</td></tr>
    <tr><td>63</td><td>[[:File:Red warning 2.png|Red warning 2.png]]</td><td>File</td></tr>
    <tr><td>64</td><td>[[:User:John|John]]</td><td>User</td></tr>
    <tr><td>65</td><td>[[:Template:Blocked|Blocked]]</td><td>Template</td></tr>
    <tr><td>66</td><td>[[:MediaWiki:Gadget-UTCLiveClock.js|Gadget-UTCLiveClock.js]]</td><td>MediaWiki</td></tr>
    <tr><td>67</td><td>[[:MediaWiki:Gadget-UTCLiveClock|Gadget-UTCLiveClock]]</td><td>MediaWiki</td></tr>
    <tr><td>69</td><td>[[:Template:Support|Support]]</td><td>Template</td></tr>
    <tr><td>70</td><td>[[:Template:Oppose|Oppose]]</td><td>Template</td></tr>
    <tr><td>72</td><td>[[:TestWiki:RfP|RfP]]</td><td>TestWiki</td></tr>
    <tr><td>73</td><td>[[:TestWiki:Privacy policy|Privacy policy]]</td><td>TestWiki</td></tr>
    <tr><td>75</td><td>[[:Template:Ping|Ping]]</td><td>Template</td></tr>
    <tr><td>76</td><td>[[:Template:Policy|Policy]]</td><td>Template</td></tr>
    <tr><td>78</td><td>[[:Category:Es|Es]]</td><td>Category</td></tr>
    <tr><td>80</td><td>[[:User talk:Esteban|Esteban]]</td><td>User_talk</td></tr>
    <tr><td>81</td><td>[[:MediaWiki:Sitenotice|Sitenotice]]</td><td>MediaWiki</td></tr>
    <tr><td>82</td><td>[[:TestWiki:Testing policy|Testing policy]]</td><td>TestWiki</td></tr>
    <tr><td>83</td><td>[[:User talk:Southparkfan|Southparkfan]]</td><td>User_talk</td></tr>
    <tr><td>84</td><td>[[:MediaWiki:Group-testgroup|Group-testgroup]]</td><td>MediaWiki</td></tr>
    <tr><td>85</td><td>[[:MediaWiki:Group-confirmed|Group-confirmed]]</td><td>MediaWiki</td></tr>
    <tr><td>86</td><td>[[:TestWiki:Inactivity|Inactivity]]</td><td>TestWiki</td></tr>
    <tr><td>87</td><td>[[:TestWiki:C|C]]</td><td>TestWiki</td></tr>
    <tr><td>88</td><td>[[:User:Example3|Example3]]</td><td>User</td></tr>
    <tr><td>89</td><td>[[:User talk:79.41.77.251|79.41.77.251]]</td><td>User_talk</td></tr>
    <tr><td>90</td><td>[[:User:Southparkfan/Test|Southparkfan/Test]]</td><td>User</td></tr>
    <tr><td>91</td><td>[[:User talk:Osnilo|Osnilo]]</td><td>User_talk</td></tr>
    <tr><td>92</td><td>[[:User talk:D4rkB0t|D4rkB0t]]</td><td>User_talk</td></tr>
    <tr><td>93</td><td>[[:User talk:Eteethan|Eteethan]]</td><td>User_talk</td></tr>
    <tr><td>94</td><td>[[:User talk:Porchcorpter|Porchcorpter]]</td><td>User_talk</td></tr>
    <tr><td>95</td><td>[[:User talk:104.131.209.90|104.131.209.90]]</td><td>User_talk</td></tr>
    <tr><td>96</td><td>[[:User talk:98.216.105.216|98.216.105.216]]</td><td>User_talk</td></tr>
    <tr><td>97</td><td>[[:TestWiki:Request permissions/Archive 1|Request permissions/Archive 1]]</td><td>TestWiki</td></tr>
    <tr><td>99</td><td>[[:User talk:Player|Player]]</td><td>User_talk</td></tr>
    </table>
    	--erzeugt eine Tabelle mit Seitennummer und Namen
    	--sehr teuer in der Ausführung, daher werden nur 100 Listeneinträge
    	--inzwischen habe ich die Zahl der zulässigen Aufrufe in der LocalSettings.php auf 20000 erhöht, also praktisch unlimitiert
    	--Parameter: ab/abwo, Zahl ab der gestartet wird
    	local a = frame.args              -- direkt per #invoke: übergeben
    	if empty(a) then a = mw.getCurrentFrame().args end  -- an die Vorlage übergebene Parameter	
    
    	local _ = ''
    	local seite, sname, ns, nstitel
    	
    	local abwo = tonumber(a.ab or a.abwo) or 1
    
    	for i = abwo, abwo + 98 do
    		seite = mw.title.new(i)
    		
    		if seite then
    			nstitel=seite.nsText
    			if nstitel == '' then nstitel = 'Artikel' end
    			_ = _ .. '<tr><td>' .. i .. '</td><td>[[:' .. seite.prefixedText .. '|' .. seite.text .. ']]</td><td>' .. nstitel .. '</td></tr>\n'
    		end
    	end
    	_ = '<table class="cute"><tr><th>ID</th><th>Name</th><th>Namensraum</th></tr>' .. _ .. '</table>'
    	return _
    end
    
    function p.getid(frame)
    	--<strong class="error"><span class="scribunto-error" id="mw-scribunto-error-3">Lua error in Module:Lilytest at line 150: attempt to index local 'seite' (a nil value).</span></strong>
    	local was = frame.args.seite or frame:getParent().args.seite or 'Lua'  -- Seitentitel
    	local ns  = frame.args.ns or frame:getParent().args.ns or ''           -- Namensraum
    	local namesp = trim(ns) or 'Artikel'
    	local seite = mw.title.new(was, ns)
    	
    	local _ = seite.id
    	if _ == 0 then return 'Seite ' .. was .. ' existiert nicht im Namensraum ' .. namesp end
    	namesp = seite.nsText
    	local fulln = seite.prefixedText 
    	return 'Die Seite ' .. fulln .. ' hat die ID ' ..  _
    end
    -- <a id="testdiv" href="https://publictestwiki.com" target="_blank">Link Testtext</a>
    function p.html(frame)
    	local mylink = mw.html.create( 'a' ) 
    	mylink
    	:attr( 'id', 'testdiv' )
    	:attr( 'href', 'https://publictestwiki.com')
    	:attr('target', '_blank')
    	:wikitext( 'Link Testtext' )
    	return tostring( mylink )
    end
    
    function p.htmlx(frame)
    	local mylink = mw.html.create( 'a' ) 
    	mylink
    	:attr( 'id', 'testdiv' )
    	:attr( 'href', 'https://publictestwiki.com')
    	:attr('target', '_blank')
    	:wikitext( 'Link Testtext' )
    	return mylink
    end
    
    function p.simple(frame)
    	return '<a href="https://publictestwiki.com" target="_blank">Link Testtext</a>'
    end
    
    function empty (self)
    	-- es gibt keine eingebaute Funktion, um zu überprüfen, ob eine Tabelle leer ist
    	-- diese Funktion liefert true, wenn die Tabelle leer ist
    	-- hilfreich bei frame.args oder frame:parent().args etc.
        for _, _ in pairs(self) do
            return false
        end
        return true
    end
    
    function trim(s)
      -- entfernt Weißraum an den beiden Enden des Strings
      -- wenn kein String als Parameter übergeben wird, wird die Eingabe unverändert zurück gegeben
      if type(s) ~= 'string' then return s end  -- falls kein string
      return (s:gsub("^%s*(.-)%s*$", "%1"))
    end
    
    return p