Wikipedia:Lua
Namnrymder | |||
---|---|---|---|
Aktuell lista (API-anrop) | |||
Innehållsnamnrymder | Diskussionsnamnrymder | ||
0 | (Artikel) | Diskussion | 1 |
2 | Användare | Användardiskussion | 3 |
4 | Wikipedia | Wikipediadiskussion | 5 |
6 | Fil | Fildiskussion | 7 |
8 | MediaWiki | MediaWiki-diskussion | 9 |
10 | Mall | Malldiskussion | 11 |
12 | Hjälp | Hjälpdiskussion | 13 |
14 | Kategori | Kategoridiskussion | 15 |
100 | Portal | Portaldiskussion | 101 |
828 | Modul | Moduldiskussion | 829 |
2600 | Ämne | — | |
Virtuella namnrymder | |||
-1 | Special | — | |
-2 | Media | — | |
Lua är ett programspråk som nu finns tillgänglig via programtillägget Scribunto i MediaWiki på svenskspråkiga Wikipedia. Anrop av Luakod kan nu bäddas in Wikipedia-mallar genom att använda "{{#invoke:}}".
Lua(käll)koden lagras i sidor som kallas moduler som ligger i namnrymden Modul (till exempel Modul:Sgd). En Lua-modul anropas normalt från en mallsida med {{#invoke:}}, till exempel {{#invoke:Sgd|sgd|a=66|b=12}}.
Projekt
redigeraHuvudsyftet med detta projekt är att hjälpa dem som vill koda en Lua-modul för Wikipedia, genom att ge tips, riktlinjer och kontakter med andra som kodar Lua-moduler.
Lua i Wikipedia
redigeraEtt Hello World-exempel är Modul:HelloWorld:
mitt_objekt = {}; -- Alla Lua-moduler i Wikipedia måste börja med att definiera en variabel som har deras
-- externt tillgängliga funktioner. De kan ha valfria namn och kan även innehålla data.
mitt_objekt.hej = function( frame ) -- Lägg till en funktion till variabeln. Dessa går att anropa från
-- Wikipedia med #invoke. "frame" innehåller datat som Wikipedia
-- skickar till denna funktion när den anropas.
local str = "Hello World!" -- Deklarera en lokal variabel och ge den data.
return str -- Avsluta denna funktion och skicka datat i "str" tillbaka till Wikipedia.
-- "print" funktionen är inte tillåten, så all utmatning görs genom att skicka
-- tillbaka data på detta sätt.
end -- Slut på funktionen.
return mitt_objekt -- Alla moduler avslutas med att skicka tillbaka variabeln med dess funktioner
-- till Wikipedia.
-- Vi kan nu använda denna modul med {{#invoke: HelloWorld | hej }}.
-- #invoke kommandot börjar med modulens namn, i detta fall "HelloWorld",
-- sedan följer ett av modulens funktioner, i detta fall "hej".
För en mer detaljerad beskrivning om hur man använder Lua i Wikipedia, se mw:Extension:Scribunto/Lua reference manual (engelska).
Lägg till mallen {{Lua}}
längst upp på diskussionssidan för alla mallar som använder Lua. Detta för att hjälpa de som inte känner till Lua och underlätta för projektet att få en översyn. Mallen ser ut så här:
Den här mallen använder programspråket Lua. Se Wikipedia:Lua om du vill veta mer om hur man använder Lua i mallar. |
Begränsningar av Lua i Wikipedia
redigera- Lua-koden körs endast när en sida tolkas (dvs när en sida sparas, förhandsgranskas, etc) och Lua kan endast få indata som textsträngar, skickade med
{{#invoke:}}
och som går att hämta från frame:expandTemplate, frame:preprocess, osv. - Den wikitext som skickas ut från Lua efterbearbetas inte, så mallar och all annan transkludering sker inte utan texten kommer att visas som den är.
- Länkar av typen [[Wikipedia:Hjälp|]] fungerar inte som utdata från Lua - de måste skrivas explicit som [[Wikipedia:Hjälp|Hjälp]].
- Ingen annan behandling av innehållet, t ex att ersätta
~~~~
med signaturer sker heller. - Luakoden på en sida är begränsad till max 10 sekunder CPU-tid i servern.
Din sandlåda
redigeraIfall man vill byta ut wikikod mot Lua i en befintlig mall är det lämpligt att först prova sig fram i en personlig "sandlåda". Den skapar du enligt detta format (ersätt texten mellan < > med lämplig text).
Modul:Sandlådan/<Ditt användarnamn>/<Namnet på din modul>
Använd Special:PrefixIndex/Modul:Sandlådan för att lista all Lua-kod i alla sandlådor.
Modul för att hantera testfall för Lua-moduler/funktioner
redigeraFör att underlätta testande av komplexa Lua-funktioner, och speciellt verifiera att sådant som tidigare fungerat även gör det efter att ändringar och tillägg förts in i modulerna så kan man använda Modul:UnitTests som är importerad från enwp. Testfallen dokumenteras på en undersida, /testcases, till den modul som testas och resultatet visas i tabellform på undersidans diskussionssida.
Felsökning
redigeraFör att inspektera den tabell som innehåller den information som skickas till mallen, gör så här:
- Lägg till i modulen
local p = {} function p.minFunktion(frame) local pframe = frame:getParent() local args = pframe.args mw.logObject(args) end return p
- I modulens redigeringsläge, skriv in namnet på den sida där mallen anropas i "Förhandsgranska sida med denna mall"
- Klicka på "Visa förhandsgranskning"
- Skrolla längst ned på sidan
- Expandera "Profildata för parser:"
- Expandera "Lua-loggar"
Harmonisering med andra språkversioner
redigeraI de fall en modul utvecklas på svenskspråkiga Wikipedia, och det inte finns intresse att den ska få spridning internationellt, kan modul- och funktionsnamnen med fördel vara på svenska. Den bör inte wikidata-länkas med någon liknande men icke-identisk modul på andra språk.
I de fall en modul importeras bör modul- och funktionsnamn vara på originalspråket, så att mallar som importeras från andra projekt kan anropa modulen och fungerar direkt. Den bör wikidata-länkas med originalmodulen. Importerade moduler (ofta med engelska namn) bör redigeras på originalplatsen istället för lokalt, och bör importeras på nytt med jämna mellanrum. Importerade mallar som anropar modulen kan dock omdirigeras så att både mallnamn på svenska och originalspråket fungerar. Anpassning av mallar till svenskspråkiga förhållanden behövs ofta, medan lokal anpassning bör undvikas vid importerade moduler med engelska namn.
Deltagare
redigeraSom med de flesta andra projekt som finns det ett antal personer som engagerar sig i det. Alla är mycket välkomna att delta precis hur mycket de vill, utan att man måste skriva upp sig någonstans för den sakens skull – många på Wikipedia föredrar att inte göra det. Om man vill, så går det dock att markera sin närvaro nedan, så finns det några man kan vända sig om man specifikt vill kontakta användare om projektet.